背景:為什么做這個事情,寫這個文章
我們項目的域名指向的是172.22.90.239,但實際上我們沒這台機器,這是個虛擬ip,只有172.22.90.230,請求239為什么實際指向的是230機器?
和之前的運維溝通過,他們也不記得了。幾年前的老運維做的。只聽他們口中說出一名詞:keepalived&VIP,百度了一波學習。
實操過程
物理機准備:172.22.90.171和172.22.90.170兩台
1.安裝keepalived(兩台都要裝):
yum install keepalived
2.修改配置文件,刪除掉/etc/keepalived/keepalived.conf,然后重新創建一個/etc/keepalived/keepalived.conf
vi /etc/keepalived/keepalived.conf
172.22.90.171配置:
global_defs { notification_email { rdg_datahub@xxx.com #故障聯系人 } notification_email_from rdg_datahub@xxx.com #故障發送人 smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_MASTER #BACKUP上修改為LVS_BACKUP } vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" # 檢測nginx狀態的腳本路徑 interval 1 # 檢測時間間隔1s weight -2 # 如果腳本的條件成立,權重-2 } vrrp_instance VI_1 { state MASTER # 服務狀態;MASTER(工作狀態)BACKUP(備用狀態) interface bond0 # VIP綁定網卡 virtual_router_id 74 # 虛擬路由ID,主、備節點必須一致 mcast_src_ip 172.22.90.171 # 本機IP nopreempt # 優先級高的設置,解決異常回復后再次搶占的問題 priority 100 # 優先級;取值范圍:0~254;MASTER > BACKUP advert_int 1 # 組播信息發送間隔,主、備節點必須一致,默認1s authentication { # 驗證信息;主、備節點必須一致 auth_type PASS # VRRP驗證類型,PASS、AH兩種 auth_pass 1111 # VRRP驗證密碼,在同一個vrrp_instance下,主、從必須使用相同的密碼才能正常通信 } track_script { # 將track_script塊加入instance配置塊 chk_nginx # 執行Nginx監控的服務 } virtual_ipaddress { # 虛擬IP池,主、備節點必須一致,可以定義多個VIP 172.22.90.237 # 虛擬IP } }
172.22.90.170配置:
global_defs { notification_email { rdg_datahub@xxx.com #故障聯系人 } notification_email_from rdg_datahub@xxx.com #故障發送人 smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_BACKUP #BACKUP上修改為LVS_BACKUP } vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" # 檢測nginx狀態的腳本路徑 interval 1 # 檢測時間間隔1s weight -2 # 如果腳本的條件成立,權重-2 } vrrp_instance VI_1 { state BACKUP # 服務狀態;MASTER(工作狀態)BACKUP(備用狀態) interface bond0 # VIP綁定網卡,先ifconfig查看下當前使用的網卡 virtual_router_id 74 # 虛擬路由ID,主、備節點必須一致,表示在一個集群內 mcast_src_ip 172.22.90.170 # 本機IP nopreempt # 優先級高的設置,解決異常回復后再次搶占的問題 priority 90 # 優先級;取值范圍:0~254;MASTER > BACKUP,如果都是BACKUP,那就是數值大的是主 advert_int 1 # 組播信息發送間隔,主、備節點必須一致,默認1s authentication { # 驗證信息;主、備節點必須一致 auth_type PASS # VRRP驗證類型,PASS、AH兩種 auth_pass 1111 # VRRP驗證密碼,在同一個vrrp_instance下,主、從必須使用相同的密碼才能正常通信 } track_script { # 將track_script塊加入instance配置塊 chk_nginx # 執行Nginx監控的服務 } virtual_ipaddress { # 虛擬IP池,主、備節點必須一致,可以定義多個VIP 172.22.90.237 # 虛擬IP } }
3.修改好配置文件之后,重啟兩台機器的keepalived:
systemctl restart keepalived
4、最后可以測試一波
停掉主的keepalived服務:systemctl stop keepalived 切關閉nginx測試一波
最后再強調一點:如果域名綁定的是一個nginx,單點故障不安全,可以用keepalived做高可用,綁定2台機器。
備注:centos6機器不支持systemctl 、可以使用/etc/init.d/keepalived restart
結束!