centos 7 LVS+keepalived實現nginx的高可用以及負載均衡

一、準備工作:關閉防火牆,selinux以免對實驗結果造成影響,準備虛機,設置IP地址、主機名


hostname:Nginx01


IP:192.168.1.87


Role:Nginx Server


hostname:Nginx02


IP: 192.168.1.88


Role:Nginx Server


hostname:LVS01


IP: 192.168.1.89


Role:LVS+Keepalived


hostname:LVS02


IP: 192.168.1.90


Role:LVS+Keepalived


VIP:192.168.1.253

二、安裝相關軟件、以及配置文件修改:LVS、keepalived、nginx 該文檔軟件安裝全部使用yum

    1、nginx01 以及nginx02 都執行

yum install -y nginx

#安裝以後啓動nginx

systemctl start nginx.service

修改測試頁面內容便於區分,根據主機名修改index.html文件

 vim /usr/share/nginx/html/index.html

wKiom1jmCKHCDBQZAAApR4mlvKQ096.jpg-wh_50

修改完訪問頁面如下:

wKioL1jmCLPRql3SAAD09GPUxK8545.jpg-wh_50


nginx兩臺服務器準備完成,在LVS01、LVS02上安裝LVS以及keepalived

yum install -y ipvsadm
#安裝keepalived依賴的軟件
yum install -y gcc openssl openssl-devel
yum install -y keepalived


安裝完成以後,LVS01上先清空keepalived的配置文件

:>/etc/keepalived/keepalived.conf
複製下面內如到 /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lvs_clu_1
}
virrp_sync_group Prox {
group {
mail
}
}
vrrp_instance mail {
state MASTER
interface eno16777736
lvs_sync_daemon_interface eno16777736
virtual_router_id 50
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.253
}
}
virtual_server 192.168.1.253 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 0
protocol TCP
nat_mask 255.255.255.0 
real_server 192.168.1.87 80 {
weight 1 
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.88 80 {
weight 1  
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}

在LVS02上也先清空keepalived的配置文件

:>/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lvs_clu_1
}
virrp_sync_group Prox {
group {
mail
}
}
vrrp_instance mail {
state BACKUP
interface ens33
lvs_sync_daemon_interface ens33
virtual_router_id 50
priority 60
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.253
}
}
virtual_server 192.168.1.253 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 192.168.1.87 80 {
weight 1 
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.88 80 {
weight 1 
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}

配置完成以後在兩臺機器上啓動 keepalived

注意 interface 需要修改爲自己電腦的網卡

systemctl start keepalived

三、測試結果

1、正常情況下

wKioL1jmCNODWkloAAJcytLzp6I808.jpg-wh_50

2、當nginx01宕機以後(在nginx01上執行命令),結果如圖:

systemctl stop nginx.service

wKioL1jmCRqA39WAAAKQYA9R7R4359.jpg-wh_50


nginx01啓動以後,在nginx02上停止nginx,效果雷同,不在貼圖。

3、當LVS01上keepalived死掉以後,LVS02上的keepalived會啓動配置VIP到自己機器上

systemctl stop keepalived

wKiom1jmCVaDCTCIAAFv_v2JAfM274.jpg-wh_50

wKiom1jmCVeCvY5iAAGRPf9kaTY450.jpg-wh_50

wKioL1jmCViTj7mcAAKAqkkCopI888.jpg-wh_50



結果顯示正常,LVS01上keepalived啓動以後會把VIP配置到自己的網卡。


四、問題總結:

關於keepalived配置文件中相關參數說明

persistence_timeout 0 #保持客戶端的請求在這個時間段內全部發到同一個真實服務器,單位秒,動態
網站此參數很重要。
router_id LVS_DEVEL    # 設置lvs的id,在一個網絡內應該是唯一的
vrrp_instance VI_1 {    #vrrp實例定義部分
    state MASTER     #設置lvs的狀態,MASTER和BACKUP兩種,必須大寫
    interface eno16777736    #設置對外服務的接口
    lvs_sync_daemon_inteface     #負載均衡器之間的監控接口,類似於 HA HeartBeat的心跳線。但它的機制優於 Heartbeat,因爲它沒有“裂腦”這個問題,它是以優先級這個機制來規避這個麻煩的。在DR 模式中,lvs_sync_daemon_inteface 與服務接口 interface 使用同一個網絡接口。 
    virtual_router_id 60  #設置虛擬路由標示,這個標示是一個數字,同一個vrrp實例使用唯一標示
    priority 80    #定義優先級,數字越大優先級越高,在一個vrrp——instance下,master的優先級必須大於backup
    advert_int 1    #設定master與backup負載均衡器之間同步檢查的時間間隔,單位是秒
    authentication {  #設置驗證類型和密碼
        auth_type PASS  #主要有PASS和AH兩種
        auth_pass 1111  #驗證密碼,同一個vrrp_instance下MASTER和BACKUP密碼必須相同
    }
    virtual_ipaddress {  #設置虛擬ip地址,可以設置多個,每行一個
        192.168.1.253
    }
}

virtual_server 192.168.1.253 80 {  #設置虛擬服務器,需要指定虛擬ip和服務端口
    delay_loop 3    #健康檢查時間間隔
    lb_algo rr     #負載均衡調度算法
    lb_kind DR    #負載均衡轉發規則
    persistence_timeout 50    #設置會話保持時間,對動態網頁非常有用
    protocol TCP    #指定轉發協議類型,有TCP和UDP兩種

    real_server 192.168.1.87 80 {  #配置服務器節點1,需要指定real server的真實IP地址和端口
    weight 1    #設置權重,數字越大權重越高
    TCP_CHECK {     #realserver的狀態監測設置部分單位秒
            connect_timeout 3    #超時時間
            nb_get_retry 3      #重試次數
            delay_before_retry 3    #重試間隔
            connect_port 80      #監測端口
    }



歡迎打算使用阿里雲服務器的小夥伴,加我私聊!!QQ:3533470970  或直接領取阿里雲幸運券:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=b6h928qb&utm_source=b6h928qb

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