第十二、十三周作業【Linux微職位】
一、結合圖形描述LVS的工作原理;
lvs-nat模型
主要是修改目標IP地址為挑選出新的RS的IP地址。即請求進入負載均衡器時做DNAT,響應出負載均衡器時做SNAT。
1.當用戶請求到達Director Server,此時請求的數據報文會先到達內核的PREROUTING鏈,此時報文的源IP是CIP,目標IP是VIP。
2.PREROUTING鏈檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈。
3.IPVS內核模塊比對數據包請求的服務是否為集群服務,如果是,則修改數據包的目標IP為後端服務器的IP,然後將數據包發至POSTROUTING鏈,做DNAT轉換。此時報文的源IP是CIP,目標IP是RIP
4.POSTROUTING鏈通過選路,將數據包發送到Real Server。
5.Real Server比對發現目標IP是自己的IP,開始建立響應報文發回給Director Server,此時報文的源IP是RIP,目標IP是CIP.
6.Director Server在響應客戶端之前,此時會將源IP地址修改為自己的IP地址,然後響應給客戶端,做SNAT轉換。此時報文的源IP是VIP。目標IP是CIP。
lvs-dr模型
將請求報文的目標MAC地址設定為天選出來的RS的MAC地址。即做MAC地址轉換。
1.當用戶請求到達Director Server,此時請求的數據報文huixiandao內核空間的PREROUTING鏈,此時報文的IP是CIP,目標IP是VIP。
2.PREROUTING鏈檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈,
3.IPVS內核模塊比對數據包請求的服務是否為集群服務,如果是,將請求報文中的源MAC地址修改為DIP的MAC地址,將目標MAC地址修改為RIP的MAC地址,然後將數據包發至POETROUTING鏈中,此時的源IP和目的IP均未修改,僅修改了源MAC地址為DIP的MAC地址,目標MAC地址為RIP的MAC地址。
4.由於DS和RS實在同一網絡中,所以兩者之間的通信時通過二層協議來傳輸。POSTROUTING鏈檢查目標MAC地址為RIP的MAC地址,那麽此時數據包將會發至Real Server。
5.RS發現請求報文的MAC地址是自己的MAC地址,就接受此報文,處理完成以後,將響應報文通過IO接口傳送給eth0網卡,然後向外發出,不經過負載均衡器。此時源IP地址為VIP,目標IP是CIP。
6.響應報文最終送至客戶端。
lvs-tun模型
在原有的IP報文外再次封裝多一層IP首部,內部IP首部(源地址為CIP,目標地址為VIP)外部IP地址首部(源地址為DIP,目標地址為RIP)
1.當用戶請求報文到達DS,此時請求的數據報文會先到內核的PREROUTING鏈。此時源IP是CIP,目標IP是VIP。
2.PREROUTING鏈檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈。
3.IPVS比對數據包請求的服務是否為集群服務,如果是,在請求報文的首部再次封裝一層IP報文,封裝源IP為DIP,目標IP是RIP,然後發至POSTROUTING鏈。此時源IP是為DIP,目標IP是RIP。
4.POSTROUTING鏈根據最新封裝的IP報文,將數據包發至RS(因為外層封裝多了一層IP首部,所以可以理解為此時通過隧道傳輸)。此時源IP是DIP,目標IP是RIP。
5.RS收到報文後發現是自己的IP地址,就會將報文接受下來,拆除最外層的IP後,會發現裏面還有一層IP首部,而且目標地址是自己的lo接口VIP,那麽此時RS開始處理此請求,處理完成滯後,通過lo接口送給eth0網卡,然後向外傳遞。此時的源IP地址為VIP,目標IP為CIP。
6.響應報文送達至客戶端。
二、搭建一套LVS-DR模型的高性能集群,並實現以下功能:
1、wordpress程序通過nfs共享給各個realserver;
2、後端realserver中的nginx和php分離
用途 | IP |
LVS-Master | 10.18.11.31 |
LVS-BACKUP | 10.18.11.32 |
LVS-VIP | 10.18.11.40 |
wordpress1 | 10.18.11.29 |
wordpress2 | 10.18.11.30 |
配置NFS共享wordpress程序
#在10.18.11.29上配置共享目錄 [[email protected] ~]# vim /etc/exports #在10.18.11.29上配置共享目錄 /usr/local/nginx/html/ 10.18.11.29(rw,sync,fsid=0,no_root_squash) [[email protected] /]# systemctl start rpcbind.service #啟動rpcbind服務 [[email protected] /]# systemctl start nfs-server.service #啟動nfs服務 #在10.18.11.30上掛載共享目錄 [[email protected] nginx]# mount -t nfs 10.18.11.29:/usr/local/nginx/html /usr/local/nginx/htmlmount -t nfs 10.18.11.29:/usr/local/nginx/html /usr/local/nginx/html [[email protected] nginx]# df -h 文件系統 容量 已用 可用 已用% 掛載點 /dev/sda2 75G 4.6G 66G 7% / devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 25M 1.9G 2% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/sda1 477M 94M 354M 21% /boot /dev/mapper/vgdata-mylv 6.8G 23M 6.4G 1% /users tmpfs 380M 0 380M 0% /run/user/0 10.18.11.29:/usr/local/nginx/html 75G 8.7G 62G 13% /usr/local/nginx/html [[email protected] nginx]# ll /usr/local/nginx/html/ #wordpress工程文件已共享 總用量 28 -rw-r--r-- 1 root root 537 11月 16 17:22 50x.html -rw-r--r-- 1 root root 145 11月 26 23:14 inc.php -rw-r--r-- 1 root root 612 11月 16 17:22 index.html -rw-r--r-- 1 root root 20 11月 25 15:23 index.php -rw-r--r-- 1 root root 6 11月 21 17:39 test.html -rw-r--r-- 1 root root 145 11月 26 23:15 test.php drwxrwxrwx 5 root root 4096 11月 27 16:37 wordpress
安裝workpress
[[email protected] opt]# wget [[email protected] opt]# tar xzvf wordpress-4.5.3-zh_CN.tar.gz [[email protected] opt]# cp -r wordpress /usr/local/nginx/html/
在遊覽器中訪問http://10.18.11.29/wordpress/wp-admin/install.php進行數據庫配置
配置LVS
[[email protected] ~]# yum install keepalived #在兩臺LVS服務器上安裝keepalived [[email protected] ~]# vim /etc/keepalived/keepalived.conf #修改LVS-Master配置文件 ! Configuration File for keepalived global_defs { notification_email { [email protected] [email protected] [email protected] } notification_email_from [email protected] smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_1 } vrrp_instance VI_DNS1 { state MASTER interface ens192 #vip綁定的網卡 virtual_router_id 51 #虛擬路由標記ID,同一組vrrp一致 priority 100 ##優先級自定義,MASTER高於BACKUP即可 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.18.11.40 #VIP } } virtual_server 10.18.11.40 80 { #VIP和端口 delay_loop 6 lb_algo rr #負載調度算法,RR為輪詢 lb_kind DR #LVS負載工作模式為DR nat_mask 255.255.255.0 persistence_timeout 50 #會話保持時間,50秒內分配同一節點 protocol TCP #協議類型UDP real_server 10.18.11.29 80 { weight 100 #權值大小,越大權值越高 TCP_CHECK { #realserver 狀態檢測 connect_timeout 8 #連接超時時間8秒 nb_get_retry 3 #重試次數:3次 delay_before_retry 3 ##重試間隔3秒 connect_port 80 #檢測端口 } } real_server 10.18.11.30 80 { weight 100 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } 57,1 30% [[email protected] ~]# vim /etc/keepalived/keepalived.conf #修改LVS-BACKUP配置 ! Configuration File for keepalived global_defs { notification_email { [email protected] [email protected] [email protected] } notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_2 } vrrp_instance VI_DNS1 { state backup #狀態為backup interface ens192 virtual_router_id 51 priority 90 #優先級比master低 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.18.11.40 } } virtual_server 10.18.11.40 80 { delay_loop 6 lb_algo rr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 10.18.11.29 80 { 1,1 頂端 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.18.11.40 } } virtual_server 10.18.11.40 80 { delay_loop 6 lb_algo rr lb_kind DR nat_mask 255.255.255.0 # persistence_timeout 1 protocol TCP real_server 10.18.11.29 80 { weight 100 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 10.18.11.30 80 { weight 100 TCP_CHECK { connect_timeout 8 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } #在realserver服務器上執行該腳本 #!/bin/bash SNS_VIP=10.18.11.40 . /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP /sbin/route add -host $SNS_VIP dev lo:0 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce sysctl -p >/dev/null 2>&1 echo "RealServer Start OK" ;; stop) ifconfig lo:0 down route del $SNS_VIP >/dev/null 2>&1 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0
三、基於heartbeat v2 crm實現HA LAMP組合;要求,部署wordpress,用於編輯的文章中的任何數據在節點切換後都能正常訪問;
四、用Keepalived實現nginx與lvs的高可用集群;
第十二、十三周作業【Linux微職位】