1、簡述lvs四種集羣特色及使用場景html
本質是多目標IP的DNAT,經過將請求報文中的目標地址和目標端口修改成某挑出的RS的RIP和
PORT實現轉發。
(1)RIP和DIP應在同一個IP網絡,且應使用私網地址;RS的網關要指向DIP
(2)請求報文和響應報文都必須經由Director轉發,Director易於成爲系統瓶頸
(3)支持端口映射,可修改請求報文的目標PORT
(4)VS必須是Linux系統,RS能夠是任意OS系統前端
Direct Routing,直接路由,LVS默認模式,應用最普遍,經過爲請求報文從新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變。web
(1)Director和各RS都配置有VIPvim
(2)確保前端路由器將目標IP爲VIP的請求報文發往Director
在前端網關作靜態綁定VIP和Director的MAC地址
在RS上使用arptables工具後端
arptables -A IN -d $VIP -j DROP arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
在RS上修改內核參數以限制arp通告及應答級別centos
/proc/sys/net/ipv4/conf/all/arp_ignore /proc/sys/net/ipv4/conf/all/arp_announce
(3)RS的RIP可使用私網地址,也能夠是公網地址;RIP與DIP在同一IP網絡;RIP的網關不能指向
DIP,以確保響應報文不會經由Director服務器
(4)RS和Director要在同一個物理網絡網絡
(5)請求報文要經由Director,但響應報文不經由Director,而由RS直接發往Client負載均衡
(6)不支持端口映射(端口不能修敗)curl
(7)RS可以使用大多數OS系統
不修改請求報文的IP首部(源IP爲CIP,目標IP爲VIP),而在原IP報文以外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RS;RS直接響應給客戶端(源IP是VIP,目標IP是CIP)
(1)DIP, VIP, RIP能夠是公網地址
(2)RS的網關通常不能指向DIP
(3)請求報文要經由Director,但響應不經由Director
(4)不支持端口映射
(5)RS的OS須支持隧道功能
經過同時修改請求報文的源IP地址和目標IP地址進行轉發
CIP --> DIP
VIP --> RIP
注意:此類型kernel默認不支持,
(1)VIP是公網地址,RIP和DIP是私網地址,且一般不在同一IP網絡;所以,RIP的網關通常不會指向
DIP
(2)RS收到的請求報文源地址是DIP,所以,只需響應給DIP;但Director還要將其發往Client
(3)請求和響應報文都經由Director
(4)相對NATi模式,能夠更好的實現LVS-RealServer間跨VLAN通信
(5)支持端口映射
2、描述LVS-DR工做原理,並配置實現。
一、LVS-DR工做原理。
LVS-DR:Direct Routing,直接路由,LVS默認模式,應用最普遍,經過爲請求報文從新封裝一個MAC首部
進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變
二、LVS實驗須要5臺centos8主機。
分別須要客戶機1臺、路由主機1臺、LVS主機1臺、web服務器2臺
三、配置各臺主機網絡,配置以下:
(1)client主機,eth0使用僅主機模式,網關指向路由主機eth1網卡
NAME="eth0" DEVICE="eth0" ONBOOT=yes BOOTPROTO=none IPADDR=192.168.0.8 GATEWAY=192.168.0.68 PREFIX=24 TYPE=Ethernet
(2)route主機,eth0使用nat模式,eth1使用僅主機模式,啓用IP_FORWARD。
NAME="eth0" DEVICE="eth0" ONBOOT=yes BOOTPROTO=none IPADDR=10.0.0.68 PREFIX=24 TYPE=Ethernet NAME="eth1" DEVICE="eth1" ONBOOT=yes BOOTPROTO=none IPADDR=192.168.0.68 PREFIX=24 TYPE=Ethernet [root@route ~]#echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
(3)lvs主機,eth0使用nat模式,網關指向路由主機eth0網卡。
NAME=eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=none IPADDR=10.0.0.78 PREFIX=24 GATEWAY=10.0.0.68 TYPE=Ethernet
(4)rs1主機,eth0使用nat模式,網關指向路由主機eth0網卡。
NAME=eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=none IPADDR=10.0.0.88 PREFIX=24 GATEWAY10.0.0.68 TYPE=Ethernet
(5)rs2主機,eth0使用nat模式,網關指向路由主機eth0網卡。
NAME=eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=none IPADDR=10.0.0.98 PREFIX=24 GATEWAY10.0.0.68 TYPE=Ethernet
四、rs1和rs2配置內核參數和vip,要先修改內核參數再添加地址,兩臺都要執行。
[root@rs1 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@rs1 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@rs1 ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@rs1 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce [root@rs1 ~]#ifconfig lo:1 10.0.0.100 netmask 255.255.255.255 #永久保存內核參數須要把下面4行添加到/etc/sysctl.conf裏 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 [root@rs1 ~]#sysctl -p #lo網卡地址保存須要設置ifconfig命令開機時執行 [root@rs1 ~]#echo "ifconfig lo:1 10.0.0.100 netmask 255.255.255.255" >> /etc/rc.d/rc.local [root@rs1 ~]#chmod +x /etc/rc.d/rc.local
五、rs1和rs2安裝httpd服務,設爲開機啓動。
[root@rs1 ~]#yum install -y httpd ; systemctl enable --now httpd
六、rs1和rs2添加不一樣的index.html,以便檢測效果。
[root@rs1 ~]#echo rs1 /var/www/html/index.html [root@rs2 ~]#echo rs2 /var/www/html/index.html
七、lvs主機添加vip,安裝ipvsadm軟件包。
[root@lvs ~]#ifconfig eth0:1 10.0.0.100 netmask 255.255.255.255 [root@lvs ~]#yum install -y ipvsadm
八、lvs主機設置DR規則。
[root@lvs ~]#ipvsadm -A -t 10.0.0.100:80 -s rr [root@lvs ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.88:80 -g [root@lvs ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.98:80 -g [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 10.0.0.100:80 rr -> 10.0.0.88:80 Route 1 0 0 -> 10.0.0.98:80 Route 1 0 0
九、測試客戶端訪問,已實現負載均衡。
[root@centos08 ~]#curl 10.0.0.100 rs1 [root@centos08 ~]#curl 10.0.0.100 rs2 [root@centos08 ~]#curl 10.0.0.100 rs1 [root@centos08 ~]#curl 10.0.0.100 rs2
十、持久化保存lvs的規則,先手動保存一次,ipvsadm服務設爲開機啓動便可自動保存和加載lvs規則。
[root@lvs ~]#ipvsadm -S >/etc/sysconfig/ipvsadm [root@lvs ~]#systemctl enable --now ipvsadm.service Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service → /usr/lib/systemd/system/ipvsadm.service.
3、實現LVS+Keepalived高可用。
一、本實驗在上例的基礎上完成,client、rs一、rs2不變,原lvs服務器安裝Keepalived軟件包做爲主服務器,增長備份LVS+Keepalived服務器一臺和sorry server服務器一臺。
二、新增服務器網卡配置。
#備LVS+Keepalived服務器網卡配置 NAME=eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=none IPADDR=10.0.0.58 PREFIX=24 GATEWAY=10.0.0.68 TYPE=Ethernet #sorry server主機網卡配置 NAME=eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=none IPADDR=10.0.0.77 PREFIX=24 GATEWAY10.0.0.68 TYPE=Ethernet
三、sorry server服務器參照rs1服務器的方法配置內核參數,在lo網卡上添加vip,安裝httpd,設置index頁面。
[root@sorry ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@sorry ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@sorry ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@sorry ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce [root@sorry ~]#ifconfig lo:1 10.0.0.100 netmask 255.255.255.255 [root@sorry ~]#yum install -y httpd [root@sorry ~]#systemctl enable --now httpd [root@sorry ~]#echo sorry >/var/www/html/index.html
四、主備兩臺LVS+Keepalived服務器安裝ipvsadm和Keepalived,啓動服務,要保證版本一致。
[root@lvs1 ~]#yum install -y keepalived [root@lvs1 ~]#systemctl enable --now keepalived.service Created symlink /etc/systemd/system/multi-user.target.wants/keepalived.service → /usr/lib/systemd/system/keepalived.service. [root@lvs2 ~]#yum install keepalived [root@lvs2 ~]#systemctl enable --now keepalived.service Created symlink /etc/systemd/system/multi-user.target.wants/keepalived.service → /usr/lib/systemd/system/keepalived.service. [root@lvs2 ~]#yum install -y ipvsadm
五、修改主服務器Keepalived配置文件,重啓服務。
[root@lvs1 ~]#vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id LVS_DEVEL vrrp_skip_check_adv_addr #vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 } vrrp_instance VI_1 { state MASTER #MASTER表明主服務器 interface eth0 #設置vip所在的網卡,不要使用lo網卡 virtual_router_id 51 #這個數值要和備服務器一致 priority 100 #這個數值要比備服務器大 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { #vip 10.0.0.100 } } virtual_server 10.0.0.100 80 { #vip delay_loop 6 lb_algo rr lb_kind DR #DR模式 protocol TCP sorry_server 10.0.0.77 80 #sorry server dip real_server 10.0.0.88 80 { #rs1 dip weight 1 TCP_CHECK { connect_timeout 5 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 10.0.0.98 80 { #rs2 dip weight 1 TCP_CHECK { connect_timeout 5 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } [root@lvs1 ~]#systemctl restart keepalived.service
六、複製主LVS+Keepalived服務器配置文件到備服務器,修改部份內容,重啓服務。
#修改下里兩行,其餘不變 [root@lvs1 ~]#vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 { state BAKCKUP #MASTER改成BACKUP priority 50 #這個數值比主服務器的小便可 [root@lvs2 ~]#systemctl restart keepalived.service
七、主服務器故障後,vip地址能夠自動飄動到備服務器,主服務器恢復後vip地址自動回到主服務器,期間不影響用戶訪問。
[root@lvs1 ~]#hostname -I 10.0.0.78 10.0.0.100 [root@lvs1 ~]#systemctl stop keepalived.service #中止服務後lvs1的vip地址消失 [root@lvs1 ~]#hostname -I 10.0.0.78 #lvs2出現vip地址 [root@lvs2 ~]#hostname -I 10.0.0.58 [root@lvs2 ~]#hostname -I 10.0.0.58 10.0.0.100
八、後端rs1和rs2其中一臺故障後,會被Keepalived檢測到,自動不轉發請求到該服務器,後端兩臺所有故障後可顯示sorry derver頁面提示用戶,後端服務器恢復後便可正常訪問。
[root@centos08 ~]#curl 10.0.0.100 rs1 [root@centos08 ~]#curl 10.0.0.100 rs2 [root@centos08 ~]#curl 10.0.0.100 rs2 [root@centos08 ~]#curl 10.0.0.100 rs2 [root@centos08 ~]#curl 10.0.0.100 sorry [root@centos08 ~]#curl 10.0.0.100 rs1 [root@centos08 ~]#curl 10.0.0.100 rs2