1. 程式人生 > >第十二、十三周作業【Linux微職位】

第十二、十三周作業【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-BACKUP10.18.11.32
LVS-VIP10.18.11.40
wordpress110.18.11.29
wordpress210.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微職位】