基于keepalived的VRRP協議實現DR模型下的高可用集群
環境及配置前提說明
4臺虛擬服務器都為centos6.8.
主機1,ip:192.168.25.140 做后端RS1,80端口向外部提供web服務
主機2,ip:192.168.25.141 做后端RS2,80端口向外部提供web服務
ip:192.168.25.142為lo:0接口的VIP地址,80端口定義為集群服務端口
注意:兩臺作為DR模型的RS主機需要先配置其內核參數
主機3,ip:192.168.25.138 做keepalived集群主機1,做主模型的,負責調度,192.168.25.142為VIP地址,80端口定義為集群服務端口
主機4,ip:192.168.25.139 做keepalived集群主機2,做備模型的,負責調度,192.168.25.142為VIP地址,80端口定義為集群服務端口
1、給兩臺后端RS主機安裝webserver,這里以httpd為例,并且為其編輯測試主頁,并且配置兩臺RS主機的內核參數,定義其arp級別,以及為其lo:0接口設置vip地址
]# yum install httpd -y ]# vim /var/www/html/index.html <h1>RS 1</h1> <h1>RS 2</h1> ]# vim set_arp.sh 使用腳本的方式來配置內核參數和lo接口的vip地址 #/!bin/bash # vip='192.168.25.142' #vip地址 vport='80' #vip端口 netmask='255.255.255.255' #vip掩碼 iface='lo:0' #vip接口 case $1 in start) echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce ifconfig $iface $vip netmask $netmask broadcast $vip up #添加vip地址到lo:0接口 route add -host $vip dev $iface #添加路由 ;; stop) ifconfig $iface down echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce ;; esac ]# ./set_arp.sh start
2、為兩臺keepalived主機編輯配置文件
]# yum install keepalived -y 安裝keepalived ]# cp -a keepalived.conf{,.bak} 先備份 ]# vim keepalived.conf 編輯配置文件 ]# openssl rand -hex 4 生成8位密碼
2.1節點1配置如下
! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from keepalived@localhost smtp_server 172.0.0.1 smtp_connect_timeout 30 router_id node1 vrrp_mcast_group4 224.0.100.19 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 1 priority 100 advert_int 1 authentication { auth_type PASS auth_pass cb77b8da } virtual_ipaddress { 192.168.25.142/32 dev eth0 #此處寫DR模型中的VIP地址 } notify_master "/etc/keepalived/notify.sh master" notify_backup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" } vrrp_instance VI_2 { state BACKUP interface eth0 virtual_router_id 2 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 020c3694 } virtual_ipaddress { 192.168.25.142/32 dev eth0 #此處寫DR模型中的VIP地址 } } virtual_server 192.168.25.142 80 { #此處寫DR模型中的VIP地址 delay_loop 3 lb_algo rr lb_kind DR protocol TCP real_server 192.168.25.140 80 { #此處寫DR模型中的RS1地址 weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 1 nb_get_retry 3 delay_before_retry 1 } } real_server 192.168.25.141 80 { #此處寫DR模型中的RS2地址 weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 1 nb_get_retry 3 delay_before_retry 1 } } }
2.2節點2配置如下;
! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from root@localhost smtp_server 172.0.0.1 smtp_connect_timeout 30 router_id node2 vrrp_mcast_group4 224.0.100.19 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 1 priority 99 advert_int 1 authentication { auth_type PASS auth_pass cb77b8da } virtual_ipaddress { 192.168.25.142/32 dev eth0 #此處寫DR模型中的VIP地址 } notify_master "/etc/keepalived/notify.sh master" notify_backup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" } vrrp_instance VI_2 { state MASTER interface eth0 virtual_router_id 2 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 020c3694 } virtual_ipaddress { 192.168.25.142/32 dev eth0 #此處寫DR模型中的VIP地址 } } virtual_server 192.168.25.142 80 { #此處寫DR模型中的VIP地址 delay_loop 3 lb_algo rr lb_kind DR protocol TCP real_server 192.168.25.140 80 { #此處寫DR模型中的RS1地址 weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 1 nb_get_retry 3 delay_before_retry 1 } } real_server 192.168.25.141 80 { #此處寫DR模型中的RS2地址 weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 1 nb_get_retry 3 delay_before_retry 1 } } }
3進行訪問測試
curl http://192.168.25.142
如上環境進行單主配置如下;
節點1配置
! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from keepalived@localhost smtp_server 172.0.0.1 smtp_connect_timeout 30 router_id node1 vrrp_mcast_group4 224.0.100.19 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 1 priority 100 advert_int 1 authentication { auth_type PASS auth_pass cb77b8da } virtual_ipaddress { 192.168.25.142/32 dev eth0 #此處寫DR模型中的VIP地址 } notify_master "/etc/keepalived/notify.sh master" notify_backup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" } virtual_server 192.168.25.142 80 { #此處寫DR模型中的VIP地址 delay_loop 3 lb_algo rr lb_kind DR protocol TCP real_server 192.168.25.140 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 1 nb_get_retry 3 delay_before_retry 1 } } real_server 192.168.25.141 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 1 nb_get_retry 3 delay_before_retry 1 } } }
節點2配置
! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from root@localhost smtp_server 172.0.0.1 smtp_connect_timeout 30 router_id node2 vrrp_mcast_group4 224.0.100.19 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 1 priority 99 advert_int 1 authentication { auth_type PASS auth_pass cb77b8da } virtual_ipaddress { 192.168.25.142/32 dev eth0 } notify_master "/etc/keepalived/notify.sh master" notify_backup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" } virtual_server 192.168.25.142 80 { delay_loop 3 lb_algo rr lb_kind DR protocol TCP real_server 192.168.25.140 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 1 nb_get_retry 3 delay_before_retry 1 } } real_server 192.168.25.141 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 1 nb_get_retry 3 delay_before_retry 1 } } }
測試
為兩種模型添加sorry_server
前提條件,keepalived主機需要安裝web服務,使得sorry_server運行在keepalived主機上
]# yum install httpd -y 下載web服務 ]# vim /var/www/html/index.html 編輯sorry_server主頁 <h1>這是sorry_server1</h1> <h1>這是sorry_server2</h1> ]# service keepalived stop 停止keepalived服務 ]# vim keepalived.conf 編輯keepalived主機配置文件,定義sorry_server,在virtual_server的各real_server之外添加 sorry_server 127.0.0.1 80 ]# service keepalived start 啟動服務 ]# service httpd start 啟動sorry_server服務 ]# curl http://192.168.25.142 在兩個RS都處于停機狀態下進行訪問測試,此時哪一個keepalived節點處于master地位則哪個節點響應
注意:此時如果一個keepalived主機掛了 只有另外一臺在線的話 可是可以正常進行調度工作的
keepalived調用外部的輔助腳本進行資源監控,并根據監控的結果狀態能實現優先動態調整示例;
]# service keepalived start 啟動服務 ]# touch down | rm -f down 在當前的主節點上的/etc/keepalived目錄下創建名為down的文件就可實現動態切換
注意:節點1和節點2都需要配置
原創文章,作者:M20-1馬星,如若轉載,請注明出處:http://www.www58058.com/58161