lvs DR模式+keepalived+nginx實現高可用負載

注意:
1.某個keepalived服務所在的機器作爲當前master時,是無法訪問VIP的(crul VIP)
2.出現腦裂會導致無法ping通VIP,腦裂是一種主被互相不能通信導致各自爲政的情況
 

1.環境配置:
keepalived-master:192.168.8.8
keepalived-backup:192.168.8.9
nginx1:192.168.8.10
nginx2:192.168.8.11
配置VIP:192.168.8.6
# 系統均爲CentOS Linux release 7.7.1908 (Core) 5.6.6-1.el7.elrepo.x86_64
2.部署軟件:
都是用yum安裝,比較方便


部署nginx0,192.168.8.10

# 關閉防火牆,也可以配置允許端口訪問
systemctl stop firewalld && systemctl disable firewalld 
yum install epel-release -y
yum install nginx net-tools -y
systemctl start nginx && systemctl enable nginx
ps aux | grep "nginx"
echo "nginx0 192.168.8.10" > /usr/share/nginx/html/index.html

# ifconfig命令由上面net-tools安裝包內所帶,設置虛擬ip比較方便容易。
# 應該也可以使用最新的ip命令
# 增加VIP,路由
ifconfig lo:0 192.168.8.6 netmask 255.255.255.255 broadcast 192.168.8.6
/sbin/route add -host 192.168.8.6 dev lo:0

# 查看lo設備商有沒有設置的VIP
ip a

# 抑制ARP
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

部署nginx1,192.168.8.11

# 關閉防火牆,也可以配置允許端口訪問
systemctl stop firewalld && systemctl disable firewalld 
yum install epel-release -y
yum install nginx net-tools -y
systemctl start nginx && systemctl enable nginx
ps aux | grep "nginx"
echo "nginx1 192.168.8.11" > /usr/share/nginx/html/index.html

# ifconfig命令由上面net-tools安裝包內所帶,設置虛擬ip比較方便容易。
# 應該也可以使用最新的ip命令
# 增加VIP,路由
ifconfig lo:0 192.168.8.6 netmask 255.255.255.255 broadcast 192.168.8.6
/sbin/route add -host 192.168.8.6 dev lo:0

# 查看lo設備商有沒有設置的VIP
ip a

# 抑制ARP
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

 

 

部署keepalived0+ipvsadm,192.168.8.8

systemctl stop firewalld && systemctl disable firewalld 
yum install keepalived ipvsadm -y

修改keepalived配置文件

vi /etc/keepalived/keepalived.conf

配置文件如下:

global_defs {
   notification_email {
         [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.8.1
   smtp_connection_timeout 30
   router_id LVS_DEVEL  # 設置lvs的id,在一個網絡內應該是唯一的
}
vrrp_instance VI_1 {
    state MASTER   #指定Keepalived的角色,MASTER爲主,BACKUP爲備 記得大寫
    interface ens32  #網卡id 不同的電腦網卡id會有區別 可以使用:ip a查看
    virtual_router_id 51  #虛擬路由編號,主備要一致
    priority 100  #定義優先級,數字越大,優先級越高,主DR必須大於備用DR
    advert_int 1  #檢查間隔,默認爲1s
    authentication {   #這裏配置的密碼最多爲8位,主備要一致,否則無法正常通訊
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.8.6  #定義虛擬IP(VIP)爲192.168.7.6,可多設,每行一個
    }
}
# 定義對外提供服務的LVS的VIP以及port
virtual_server 192.168.8.6 80 {
    delay_loop 6 # 設置健康檢查時間,單位是秒
    lb_algo rr # 設置負載調度的算法爲rr
    lb_kind DR # 設置LVS實現負載的機制,有NAT、TUN、DR三個模式
    nat_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP
    real_server 192.168.8.10 80 {  # 指定real server0的IP地址
        weight 3   # 配置節點權值,數字越大權重越高
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.8.11 80 {  # 指定real server1的IP地址
        weight 3  # 配置節點權值,數字越大權重越高
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}

部署keepalived1+ipvsadm,192.168.8.9

systemctl stop firewalld && systemctl disable firewalld 
yum install keepalived ipvsadm -y

修改keepalived配置文件

vi /etc/keepalived/keepalived.conf

配置文件如下:

global_defs {
   notification_email {
         [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.8.1
   smtp_connection_timeout 30
   router_id LVS_DEVEL  # 設置lvs的id,在一個網絡內應該是唯一的
}
vrrp_instance VI_1 {
    state BACKUP #指定Keepalived的角色,MASTER爲主,BACKUP爲備 記得大寫
    interface ens32  #網卡id 不同的電腦網卡id會有區別 可以使用:ip a查看
    virtual_router_id 51  #虛擬路由編號,主備要一致
    priority 50  #定義優先級,數字越大,優先級越高,主DR必須大於備用DR
    advert_int 1  #檢查間隔,默認爲1s
    authentication {   #這裏配置的密碼最多爲8位,主備要一致,否則無法正常通訊
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.8.6  #定義虛擬IP(VIP)爲192.168.1.200,可多設,每行一個
    }
}
# 定義對外提供服務的LVS的VIP以及port
virtual_server 192.168.8.6 80 {
    delay_loop 6 # 設置健康檢查時間,單位是秒
    lb_algo rr # 設置負載調度的算法爲rr
    lb_kind DR # 設置LVS實現負載的機制,有NAT、TUN、DR三個模式
    nat_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP
    real_server 192.168.8.10 80 {  # 指定real server0的IP地址
        weight 3   # 配置節點權值,數字越大權重越高
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
    real_server 192.168.8.11 80 {  # 指定real server1的IP地址
        weight 3  # 配置節點權值,數字越大權重越高
        TCP_CHECK {
        connect_timeout 10
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
     }
}


啓動兩個keepalived服務

systemctl start keepalived && systemctl enable keepalived


查看VIP狀態和LVS轉發狀態

#查看兩臺keepalived服務器上的VIP情況
# 當前MASTER節點網卡上會出現VIP,BACKUP上沒有VIP
# 關閉MASTER節點keepalived服務後,VIP會漂移到BACKUP節點網卡上
ip a

# 查看轉發狀態
# 會看到設置的VIP轉發到後端的nginx上
ipvsadm -Ln


測試服務成功與否
在宿主機瀏覽器地址欄鍵入VIP進行瀏覽
#chrome可能需要瀏覽一次清除緩存,火狐可以強制刷新。可以看到出現的結果不一樣

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章