一、架構如下:
二、安裝過程
1、配置“網際網路”伺服器
1.1、修改伺服器ip為192.168.10.101/24
[root@internet ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:a8:6f:21 brd ff:ff:ff:ff:ff:ff inet 192.168.10.101/24 brd 192.168.10.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fea8:6f21/64 scope link valid_lft forever preferred_lft forever
1.2、修改伺服器的主機名為“internet”(可選)
[root@internet ~]# hostnamectl set-hostname internet
2、配置LVS伺服器
2.1、安裝ipvsadm管理工具
[root@lvs ~]# yum -y install ipvsadm
2.2、配置eth1網路卡(模擬連線外網)
2.2.1、新增一塊網路卡,選擇“僅主機模式”
2.2.2、配置eth1網路卡地址
[root@lvs /]# cat /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 NAME=eth1 BOOTPROTO=none ONBOOT=yes IPADDR=192.168.10.100 PREFIX=24
2.2.3、啟用ip_forward功能
[root@lvs /]# echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf #使其生效 [root@lvs /]# sysctl -p
3、配置RS伺服器
3.1、安裝apache、mysql、mod_ssl服務(驗證功能作用)
[root@rs1 ~]# yum -y install httpd mysql-server mod_ssl
3.2、修改eth0網路卡的閘道器配置,指向LVS伺服器的DIP(兩臺RS伺服器都需要修改配置)
[root@rs1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 NAME=eth0 BOOTPROTO=none ONBOOT=yes IPADDR=10.0.0.67 PREFIX=24 GATEWAY=10.0.0.57
3.3、啟動httpd服務(兩臺RS伺服器都需要安裝)
[root@rs1 ~]# systemctl enable --now httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
3.4、配置一下顯示頁面(特意配置不同,生產中應是相同的)
[root@rs1 ~]# cat /var/www/html/index.html rs1 10.0.0.67
RS2服務類似配置
效果如下:
[root@lvs ~]# curl 10.0.0.67 rs1 10.0.0.67 [root@lvs ~]# curl 10.0.0.77 rs2 10.0.0.77
4、(重點)配置LVS伺服器
4.1、建立叢集,使用輪詢的排程演算法
[root@lvs ~]# ipvsadm -A -t 192.168.10.100:80 -s rr #檢視當前叢集 [root@lvs ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.10.100:80 rr
4.2、新增RS服務到叢集中
[root@lvs ~]# ipvsadm -a -t 192.168.10.100:80 -r 10.0.0.67:80 -m [root@lvs ~]# ipvsadm -a -t 192.168.10.100:80 -r 10.0.0.77:80 -m #檢視當前叢集 [root@lvs ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.10.100:80 rr -> 10.0.0.67:80 Masq 1 0 0 -> 10.0.0.77:80 Masq 1 0 0
4.3、驗證功能
[root@internet ~]# curl 192.168.10.100 rs2 10.0.0.77 [root@internet ~]# curl 192.168.10.100 rs1 10.0.0.67 [root@internet ~]# curl 192.168.10.100 rs2 10.0.0.77 [root@internet ~]# curl 192.168.10.100 rs1 10.0.0.67
訪問成功,並且實現了訪問輪詢的效果。
三、思考
1、當“網際網路”伺服器去訪問後端服務時,後端伺服器看到的請求來自於哪個IP?
答:LVS-NAT模型採用的是DNAT,只對目標IP做地址轉換,不對源IP做任何處理,因此後端伺服器可以正常看到實際的“網際網路”伺服器的IP。
2、通訊過程中,“網際網路”機器是直接與LVS伺服器建立TCP連線,還是和後端伺服器建立TCP連線?
2.1、在RS建立一個大檔案
[root@rs1 ~]# dd if=/dev/zero of=/var/www/html/f.img bs=1M count=100 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied, 0.41985 s, 250 MB/s
2.2、“網際網路”機器模擬去下載RS端的檔案
[root@internet ~]# wget --limit-rate=100k http://192.168.10.100/f.img
2.3、檢視LVS埠開啟情況
[root@lvs ~]# ss -nt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 36 10.0.0.57:22 10.0.0.1:49851
2.4、檢視RS伺服器埠開啟情況
[root@rs1 ~]# ss -nt State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 36 10.0.0.67:22 10.0.0.1:61068 ESTAB 0 0 10.0.0.67:22 10.0.0.1:65352 ESTAB 0 386824 ::ffff:10.0.0.67:80 ::ffff:192.168.10.101:10659
2.5、檢視“網際網路”伺服器
[root@internet ~]# ss -nt State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 192.168.10.101:22 192.168.10.1:56282 ESTAB 0 0 192.168.10.101:22 192.168.10.1:49944 ESTAB 240888 0 192.168.10.101:10659 192.168.10.100:80
上述實驗,可見LVS在“網際網路”機器與後端伺服器通訊過程中,並不參與握手過程。
因此本題答案為:
通訊過程中,“網際網路”伺服器和後端伺服器建立TCP連線。
3、通訊過程中,LVS是否監聽80埠?
答:不會。在本實驗中,LVS相當於路由器角色,並不會監聽到服務的80埠。真正監聽80服務埠的,是RS伺服器。
四、擴充
1、ipvsadm規則儲存
[root@lvs ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm [root@lvs ~]# cat /etc/sysconfig/ipvsadm -A -t 192.168.10.100:80 -s rr -a -t 192.168.10.100:80 -r 10.0.0.67:80 -m -w 1 -a -t 192.168.10.100:80 -r 10.0.0.77:80 -m -w 1
2、ipvsadm規則清空
[root@lvs ~]# ipvsadm -C [root@lvs ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn
3、ipvsadm規則匯入
[root@lvs ~]# ipvsadm-restore -n < /etc/sysconfig/ipvsadm [root@lvs ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.10.100:80 rr -> 10.0.0.67:80 Masq 1 0 0 -> 10.0.0.77:80 Masq 1 0 0