一、lvs-nat:修改請求報文的目標IP ,多目標IP的DNAT html
本質是多目標IP的DNAT,經過將請求報文中的目標地址和目標端口修改成某挑 出的RS的RIP和PORT實現轉發 (1)RIP和DIP應在同一個IP網絡,且應使用私網地址;RS的網關要指向DIP (2)請求報文和響應報文都必須經由Director轉發,Director易於成爲系統瓶頸 (3)支持端口映射,可修改請求報文的目標PORT (4)VS必須是Linux系統,RS能夠是任意OS系統二、lvs-dr:操縱封裝新的MAC地址 前端
Direct Routing,直接路由,LVS默認模式,應用最普遍,經過爲請求報 文從新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標 MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標 IP/PORT均保持不變 (1) Director和各RS都配置有VIP (2) 確保前端路由器將目標IP爲VIP的請求報文發往Director (3)RS的RIP可使用私網地址,也能夠是公網地址;RIP與DIP在同一IP網絡; RIP的網關不能指向DIP,以確保響應報文不會經由Director (4)RS和Director要在同一個物理網絡 (5)請求報文要經由Director,但響應報文不經由Director,而由RS直接發往 Client (6)不支持端口映射(端口不能修敗) (7)RS可以使用大多數OS系統三、lvs-tun:在原請求IP報文以外新加一個IP首部 vim
轉發方式:不修改請求報文的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須支持隧道功能四、lvs-fullnat:修改請求報文的源和目標IP後端
經過同時修改請求報文的源IP地址和目標IP地址進行轉發 (1) VIP是公網地址,RIP和DIP是私網地址,且一般不在同一IP網絡;所以, RIP的網關通常不會指向DIP (2) RS收到的請求報文源地址是DIP,所以,只需響應給DIP;但Director還 要將其發往Client (3) 請求和響應報文都經由Director (4) 支持端口映射 注意:此類型kernel默認不支持
原理:centos
Director Server做爲羣集的訪問入口,但不做爲網關使用,後端服務器池中的Real Server與Director Server在同一個物理網絡中,發送給客戶機的數據包不須要通過Director Server。爲了響應對整個羣集的訪問,DS與RS都須要配置有VIP地址。
路由器開啓路由轉發功能,一個網卡nat一個橋接;
dip和rip同一網絡,
Vip能夠公網,dip和rip私網
不通網卡配置不一樣網段bash
實驗環境:服務器
Client:CIP: 192.168.3.106 router:eth0:192.168.43.107 eth1:192.168.3.107 Lvs: : DIP: 191.168.43.137 VIP:192.168.43.100 gateway:192.168.3.107 Rs1:RIP: 192.168.43.147 VIP: 192.168.43.100 GATEWAY:192.168.3.107 Rs2: RIP:192.168.43.157 VIP: 192.168.43.100 GATEWAY:192.168.3.107
一、rs服務器配置:
每臺rs上執行,lvs_dr_rs.sh 腳本,準備環境,安裝httpd服務,配置vip,改arp規則;網絡
lvs_dr_rs.sh 腳本curl
[root@rs1~]#cat lvs_dr_rs.sh #!/bin/bash vip=192.168.43.100 mask='255.255.255.255' dev=lo:1 rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null service httpd start &> /dev/null && echo "The httpd Server is Ready!" echo "<h1>`hostname`</h1>" > /var/www/html/index.html case $1 in start) echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce ifconfig $dev $vip netmask $mask #broadcast $vip up #route add -host $vip dev $dev echo "The RS Server is Ready!" ;; stop) ifconfig $dev down echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce echo "The RS Server is Canceled!" ;; *) echo "Usage: $(basename $0) start|stop" exit 1 ;; Esac
執行腳本ide
[root@rs2 ~]#sh /data/lvs_dr_rs.sh start The httpd Server is Ready! The RS Server is Ready! [root@rs1 ~]#sh /data/lvs_dr_rs.sh start The httpd Server is Ready! The RS Server is Ready!
執行結果:
二、lvs服務器配置:lvs服務器上執行 lvs_dr_vs.sh腳本,完成lvs配置 ,使用dr模式,rr輪訓,配置vip地址,添加lvs規則,端口80
lvs_dr_vs.sh 腳本
[root@lvs]#cat lvs_dr_vs.sh #!/bin/bash vip='192.168.43.100' iface='lo:1' mask='255.255.255.255' port='80' rs1='192.168.43.147' rs2='192.168.43.157' scheduler='rr' type='-g' rpm -q ipvsadm &> /dev/null || yum -y install ipvsadm &> /dev/null case $1 in start) ifconfig $iface $vip netmask $mask #broadcast $vip up iptables -F ipvsadm -A -t ${vip}:${port} -s $scheduler ipvsadm -a -t ${vip}:${port} -r ${rs1} $type ipvsadm -a -t ${vip}:${port} -r ${rs2} $type echo "The VS Server is Ready!" ;; stop) ipvsadm -C ifconfig $iface down echo "The VS Server is Canceled!" ;; *) echo "Usage: $(basename $0) start|stop" exit 1 ;; Esac [root@lvs ~]#sh /data/lvs_dr_vs.sh start The VS Server is Ready!
結果
三、客戶端測試:
[root@centos6 ~]#while true ;do curl 192.168.43.100;sleep 1 ;done <h1>rs1</h1> <h1>rs2</h1> <h1>rs1</h1> <h1>rs2</h1> <h1>rs1</h1> <h1>rs2</h1> <h1>rs1</h1> <h1>rs2</h1>
實驗環境:
Client:192.168.3.106
Router:192.168.43.107
Keepalived1:192.168.43.117
Keepalived2:192.68.43.127
浮動ip:192.168.43.100
Rs1:192.168.43.147 VIP: 192.168.43.100 GATEWAY:192.168.3.107
Rs2:192.168.43.157 VIP: 192.168.43.100 GATEWAY:192.168.3.107
一、ka1和ka2上配置
安裝keepalived服務;
[root@ka1 ~]# yum -y install keepalived
[root@ka2 ~]# yum -y install keepalived
[root@ka1 ~]# systemctl start keepalived
[root@ka2 ~]#systemctl start keepalived
二、配置keepalived,實現ip浮動;
ka1配置:
[root@ka1 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { 913254539@qq.com } notification_email_from keepalived@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id ka1 vrrp_mcast_group4 224.0.100.100 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 7 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.43.100 dev eth0 label eth0:1 } }ka2配置:
[root@ka2 ~]#vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { 913254539@qq.com } notification_email_from keepalived@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id ka2 vrrp_mcast_group4 224.0.100.100 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 7 priority 80 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.43.100 dev eth0 label eth0:1 } }
3、配置keepalived,添加rs配置,配置sorry server;
在源keepalived配置上,添加配置
virtual_server 192.168.43.100 80 { delay_loop 3 lb_algo rr lb_kind DR #persistence_timeout 50 protocol TCP sorry_server 127.0.0.1 80 real_server 192.168.43.147 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 1 nb_get_retry 3 delay_before_retry 1 } } real_server 192.168.43.157 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 1 nb_get_retry 3 delay_before_retry 1 } } }重啓keepalived:
[root@ka1 ~]# systemctl restart keepalived [root@ka2 ~]#systemctl restart keepalived
四、rs1和rs2上配置:
跑腳本,配置VIP,和arp規則,以及安裝httpd服務
lvs_dr_rs.sh 腳本:[root@rs1 ~]#cat /data/lvs_dr_rs.sh #!/bin/bash #Author:wangxiaochun #Date:2017-08-13 vip=192.168.43.100 mask='255.255.255.0' dev=eth0:1 rpm -q httpd &> /dev/null || yum -y install httpd &>/dev/null service httpd start &> /dev/null && echo "The httpd Server is Ready!" echo "<h1>`hostname`</h1>" > /var/www/html/index.html case $1 in start) echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce ifconfig $dev $vip netmask $mask #broadcast $vip up #route add -host $vip dev $dev echo "The RS Server is Ready!" ;; stop) ifconfig $dev down echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce echo "The RS Server is Canceled!" ;; *) echo "Usage: $(basename $0) start|stop" exit 1 ;; esac
五、驗證
中止主keepalived,訪問不受影響
後臺全部rs服務都停以後,sorry server提供服務