天天看點

keepalived+haproxy實作nginx高可用負載均衡一、keepalived簡介二、配置簡介三、配置keepalived三、配置haproxy四、配置nginx五、配置前端iptables規則六、通路測試

一、keepalived簡介

Keepalived是基于vrrp協定的一款高可用軟體。Keepailived有一台主伺服器和多台備份伺服器,在主伺服器和備份伺服器上面部署相同的服務配置,使用一個虛拟IP位址對外提供服務,當主伺服器出現故障時,虛拟IP位址會自動漂移到備份伺服器。

VRRP(Virtual Router Redundancy Protocol,虛拟路由器備援協定),VRRP是為了解決靜态路由的高可用。VRRP的基本架構

虛拟路由器由多個路由器組成,每個路由器都有各自的IP和共同的VRID(0-255),其中一個VRRP路由器通過競選成為MASTER,占有VIP,對外提供路由服務,其他成為BACKUP,MASTER以IP多點傳播(多點傳播位址:224.0.0.18)形式發送VRRP協定包,與BACKUP保持心跳連接配接,若MASTER不可用(或BACKUP接收不到VRRP協定包),則BACKUP通過競選産生新的MASTER并繼續對外提供路由服務,進而實作高可用。

二、配置簡介

主機架構:

keepalived+haproxy實作nginx高可用負載均衡一、keepalived簡介二、配置簡介三、配置keepalived三、配置haproxy四、配置nginx五、配置前端iptables規則六、通路測試

系統環境:CentOS6.8

前端兩台主機承擔負載均衡任務,ip分别為192.168.10.137和192.168.10.138,對外暴露ip代理後端nginx的内容。

後端兩台主機為實際通路内容,ip分别為192.168.10.145和192.168.10.146,隻允許前端兩台主機對80端口的通路。

實驗步驟:

1.配置keepalived

2.配置haproxy

3.配置nginx

4.配置iptables規則

三、配置keepalived

配置之前關閉selinux

# setenforce 0 

為實驗簡潔,我這裡直接采用yum安裝

# yum -y install epel-release #安裝epel拓展源

# yum -y install keepalived #安裝keepalived

更改配置檔案内容

# mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak #更改初始設定檔案,可以直接删除

# vim /etc/keepalived/keepalived.conf #更改配置内容

ip為192.168.10.137的配置内容如下:

! Configuration File for keepalived

global_defs { #global_defs區域,主要是配置故障發生時的通知對象以及機器辨別

    notification_email { #notification_email 故障發生時給誰發郵件通知。

        [email protected]

}

    notification_email_from [email protected]  #notification_email_from 通知郵件從哪個位址發出。

    smtp_server 127.0.0.1 #smpt_server 通知郵件的smtp位址。

    smtp_connect_timeout 30 #smtp_connect_timeout 連接配接smtp伺服器的逾時時間。

    router_id nginx1  #router_id 辨別本節點的字條串,通常為hostname,但不一定非得是hostname。故障發生時,郵件通知會用到。

}

vrrp_instance VI_1 { #vrrp_instance用來定義對外提供服務的VIP區域及其相關屬性。

    state BACKUP  #可以是MASTER或BACKUP,不過當其他節點keepalived啟動時會将priority比較大的節點選舉為MASTER,是以該項其實沒有實質用途。

    virtual_router_id 102 #virtual_router_id 取值在0-255之間,用來區分多個instance的VRRP多點傳播。

    interface eth2 #節點固有IP(非VIP)的網卡,用來發VRRP包。

    mcast_src_ip 192.168.10.137 #mcast_src_ip 修改vrrp多點傳播包的源位址,預設源位址為master的IP。(由于是多點傳播,是以即使修改了源位址,該master還是能收到回應的)

    priority 100 #用來選舉master的,要成為master,那麼這個選項的值最好高于其他機器50個點,該項取值範圍是1-255(在此範圍之外會被識别成預設值100)。

    advert_int 1 #advert_int 發VRRP包的時間間隔,即多久進行一次master選舉(可以認為是健康查檢時間間隔)。

    nopreempt  #nopreempt 允許一個priority比較低的節點作為master,即使有priority更高的節點啟動。故障恢複時不搶占。

    authentication {  #authentication 認證區域,認證類型有PASS和HA(IPSEC),推薦使用PASS(密碼隻識别前8位)。

        auth_type PASS

        auth_pass 1234

    }

virtual_ipaddress { #vip,虛拟IP位址池,可以有多個IP,每個IP占一行,不需要指定子網路遮罩。注意:這個IP必須與我們的設定的vip保持一緻。

    192.168.10.101

    }

}

ip為192.168.10.138的配置内容如下:

! Configuration File for keepalived

global_defs {

    notification_email {

        [email protected]

}

    notification_email_from [email protected]

    smtp_server 127.0.0.1

    smtp_connect_timeout 30

    router_id nginx2

}

vrrp_instance VI_1 {

    state BACKUP

    virtual_router_id 102 #同一多點傳播中的id相同

    interface eth2

    mcast_src_ip 192.168.10.138 #本機位址

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1234

    }

virtual_ipaddress {

    192.168.10.101

    }

}

兩台主機之間的iptables通路規則配置

192.168.10.137上

# iptables -I INPUT -s 192.168.10.138/24 -d 224.0.0.18 -j ACCEPT  #允許多點傳播位址通信

# iptables -I INPUT -s 192.168.10.138/24 -p vrrp -j ACCEPT   #允許VRRP(虛拟路由器備援協)通信

192.168.10.138上

# iptables -I INPUT -s 192.168.10.137/24 -d 224.0.0.18 -j ACCEPT  #允許多點傳播位址通信

# iptables -I INPUT -s 192.168.10.137/24 -p vrrp -j ACCEPT   #允許VRRP(虛拟路由器備援協)通信

如果沒設定好容易腦裂,要注意哦!

設定好之後可以兩台主機都啟動keepalived檢視配置是否正确

192.168.10.137先啟動keepalived,否則另一台主機會先搶占VIP

# service keepalived start 

192.168.10.137的eth2網卡已經綁定VIP

keepalived+haproxy實作nginx高可用負載均衡一、keepalived簡介二、配置簡介三、配置keepalived三、配置haproxy四、配置nginx五、配置前端iptables規則六、通路測試

192.168.10.138的eth2網卡未搶占VIP

keepalived+haproxy實作nginx高可用負載均衡一、keepalived簡介二、配置簡介三、配置keepalived三、配置haproxy四、配置nginx五、配置前端iptables規則六、通路測試

當192.168.10.137上關閉keepalived服務時

# service keepalived stop

192.168.10.137的eth2網卡VIP消失

keepalived+haproxy實作nginx高可用負載均衡一、keepalived簡介二、配置簡介三、配置keepalived三、配置haproxy四、配置nginx五、配置前端iptables規則六、通路測試

192.168.10.138的eth2網卡搶占VIP

keepalived+haproxy實作nginx高可用負載均衡一、keepalived簡介二、配置簡介三、配置keepalived三、配置haproxy四、配置nginx五、配置前端iptables規則六、通路測試

三、配置haproxy

詳細參數說明請看本人的HAProxy安裝與配置(實作nginx負載均衡)

兩台主機安裝haproxy

# yum -y install haproxy 

配置檔案路徑為/etc/haproxy/haproxy.cfg

配置檔案内容除global和defaults下的設定其餘的都可以注釋掉

192.168.10.137添加以下内容

############WEB服務配置##################

listen webha80 #監聽名稱自定義

bind 0.0.0.0:80 #監聽80端口

mode http #模式為http

option httplog #記錄通路日志

log global #日志記錄為全局的設定

maxconn 3000 #最大的連接配接數為3000

balance roundrobin #負載均衡模式為輪詢

server nginx1 192.168.10.145:80 weight 2 rise 2 fall 3 #nginx1權重為2, 連續2次請求正常加入負載,失敗3次即判定伺服器當機

server nginx2 192.168.10.146:80 weight 1 rise 2 fall 3 #nginx2權重為1, 連續2次請求正常加入負載,失敗3次即判定伺服器當機

192.168.10.138添加以下内容

############WEB服務配置##################

listen webha80 #監聽名稱自定義

bind 0.0.0.0:80 #監聽80端口

mode http #模式為http

option httplog #記錄通路日志

log global #日志記錄為全局的設定

maxconn 3000 #最大的連接配接數為3000

balance roundrobin #負載均衡模式為輪詢

server nginx1 192.168.10.145:80 weight 1 rise 2 fall 3 #nginx1權重為1, 連續2次請求正常加入負載,失敗3次即判定伺服器當機

server nginx2 192.168.10.146:80 weight 2 rise 2 fall 3 #nginx2權重為2, 連續2次請求正常加入負載,失敗3次即判定伺服器當機

配置差别以便在發生故障時切換辨認主機,實際生産環境配置一般情況下請保持一緻。

啟動haproxy

# service haproxy start

啟動完畢後檢視端口監聽狀态,确定配置正确

# netstat -tnlp #80端口被haproxy占用

keepalived+haproxy實作nginx高可用負載均衡一、keepalived簡介二、配置簡介三、配置keepalived三、配置haproxy四、配置nginx五、配置前端iptables規則六、通路測試

四、配置nginx

# yum -y install epel-release 

# yum -y install nginx 

# service nginx start

nginx1上 

# echo "this is nginx111111111111111" > /usr/share/nginx/html/index.html  #修改index.html以便驗證輪詢效果

#  iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 80 -j ACCEPT #允許haproxy對80端口的通路

nginx2上

# echo "this is nginx22222222222222" > /usr/share/nginx/html/index.html 

# iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 80 -j ACCEPT

五、配置前端iptables規則

192.168.10.137和192.168.10.138上添加規則

# iptables -I INPUT -p tcp --dport 80 -j ACCEPT #允許所有的80端口請求

前端代理主機iptables規則表:

keepalived+haproxy實作nginx高可用負載均衡一、keepalived簡介二、配置簡介三、配置keepalived三、配置haproxy四、配置nginx五、配置前端iptables規則六、通路測試

後端nginx主機iptables規則表:

keepalived+haproxy實作nginx高可用負載均衡一、keepalived簡介二、配置簡介三、配置keepalived三、配置haproxy四、配置nginx五、配置前端iptables規則六、通路測試

六、通路測試

當正常情況下,192.168.10.137因為優先級高于192.168.10.138,此時它的eth2網卡綁定VIP,用浏覽器對VIP--192.168.10.101進行通路,每三次通路頁面出現“this is nginx111111111111111”為2次,“this is nginx22222222222222”為1次。而當關閉137主機上的keepalived時(模拟伺服器故障),138主機搶占VIP--192.168.10.101,則每三次通路頁面出現“this is nginx111111111111111”為1次,“this is nginx22222222222222”為2次。

繼續閱讀