Nginx利用Keepalived提供標準的主備形式的高可用(HA)。在主機發生問題的時候這提供了故障冗餘。咱們能使用額外節點擴展該功能並配置改變Keepalived提供的額外冗餘和可伸縮性選項。nginx
注意:在公共雲部署Nginx,推薦使用4層或TCP負載均衡器服務雲提供商提供的分配流量爲雙主NGINX功能。安全
許多組織有冗餘級別的嚴格要求,兩個節點的主備系統可能不能知足需求。添加第三個節點配置其它兩個節點宕機的接管事件,提供進一步的冗餘並保證配置簡單。這也容許維護節點不丟失冗餘。服務器
你能以雙主模式運行Nginx,在兩個或更多的節點同時處理通訊。使用多個活躍IP地址達到。每一個IP地址託管一個Nginx實例,Keepalived配置確保,這些IP地址分佈在兩個或更多活躍節點。cookie
當託管多個服務,每一個服務的DNS名稱解析爲其中一個IP地址。共享服務之間的IP地址。負載均衡
使用DNS輪詢映射單個DNS名到多個IP地址。性能
使用3層負載均衡設備,例如數據中心邊緣負載均衡器分發3層通訊在IP地址之間。測試
雙主可使用你的負載均衡集羣的能力遞增,但要注意,若是雙主中的一個節點失效,能力將減半。你可使用雙主做爲安全的一種形式,當兩個節點是活動的時,提供足夠的資源來吸取意料以外的通訊高峯,你能使用雙主在較大的集羣中提供更多冗餘。spa
注意,Nginx實例在負載均衡集羣中不共享配置或狀態。最佳性能是雙主場景,確保鏈接從相同客戶端路由到相同活躍IP地址,使用回話持久方法,例如sticky cookie,不依賴於服務器端狀態。router
爲了給主備HA添加額外備用節點,執行如下步驟:事件
一、新安裝一個Nginx+Keepalived
二、從以前的備用節點複製/etc/keepalived/keepalived.conf到新節點的相同位置。
三、編輯新節點的keepalived.conf文件:
下降priority,小於其它節點
改變unicast_src_ip匹配新節點的主機IP
在unicast_peer添加備用節點的IP,列出其它全部節點,額外節點192.168.10.12,其它兩個節點192.168.10.十、192.168.10.11。VIP是192.168.10.100。
vrrp_script chk_nginx_service {
script "/usr/lib/keepalived/nginx-ha-check"
interval 3
weight 50
}
vrrp_instance VI_1 {
interface eth0
state BACKUP
priority 99
virtual_router_id 51
advert_int 1
unicast_src_ip 192.168.10.12
unicast_peer {
192.168.10.10
192.168.10.11
}
authentication {
auth_type PASS
auth_pass 22a2fb02fb4bc6114ef361ef3925692f
}
virtual_ipaddress {
192.168.10.100
}
track_script {
chk_nginx_service
}
notify "/usr/lib/keepalived/nginx-ha-notify"
}
unicast_peer {
192.168.10.11
192.168.10.12
}
重啓全部節點的Keepalived
依次中止Nginx服務進行測試
爲了兩個節點同時通訊,必須使用額外的虛擬IP。這個新VIP將活躍在以前的備用節點,所以,每一個節點活躍節點使用它們本身的VIP。爲了配置一個Nginx雙主HA,執行如下步驟:
一、編輯備用節點的keepalived.conf文件:
複製整個vrrp_instance block VI_1並粘貼如下塊
在新的vrrp_instance塊中:
重命名vrrp_instance爲VI_2或其它惟一名稱
改變virtual_router_id爲61或其它惟一值
改變virtual_ipaddress爲一個在相同子網中有效的IP,在該例子中是192.168.10.101
改變priority值爲100
vrrp_script chk_nginx_service {
script "/usr/lib/keepalived/nginx-ha-check"
interval 3
weight 50
}
vrrp_instance VI_1 {
interface eth0
state BACKUP
priority 101
virtual_router_id 51
advert_int 1
unicast_src_ip 192.168.10.10
unicast_peer {
192.168.10.11
}
authentication {
auth_type PASS
auth_pass 22a2fb02fb4bc6114ef361ef3925692f
}
virtual_ipaddress {
192.168.10.100
}
track_script {
chk_nginx_service
}
notify "/usr/lib/keepalived/nginx-ha-notify"
}
vrrp_instance VI_2 {
interface eth0
state BACKUP
priority 100
virtual_router_id 61
advert_int 1
unicast_src_ip 192.168.10.10
unicast_peer {
192.168.10.11
}
authentication {
auth_type PASS
auth_pass 22a2fb02fb4bc6114ef361ef3925692f
}
virtual_ipaddress {
192.168.10.101
}
track_script {
chk_nginx_service
}
notify "/usr/lib/keepalived/nginx-ha-notify"
}
重複執行備用節點的步驟
重啓全部節點