我這里使用的是suse系統安裝keepalived
1.keepalived 安裝包
鏈接:https://pan.baidu.com/s/15Hwqdmv_AKlNYjy-omh4tg
提取碼:714h
2.解壓、安裝keepalived
tar -xvf keepalived-2.2.0.tar.gz cd keepalived-2.2.0/ ./configure make & make install mkdir /etc/keepalived cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ whereis keepalived cp /root/project-kits/keepalived-2.2.0/keepalived/etc/init.d/keepalived /etc/init.d/ cp /root/project-kits/keepalived-2.2.0/keepalived/etc/sysconfig/keepalived /etc/sys cp /root/project-kits/keepalived-2.2.0/keepalived/etc/sysconfig/keepalived /etc/sysconfig cp /usr/local/sbin/keepalived /usr/sbin/ chkconfig --add keepalived chkconfig keepalived on cd /etc/keepalived/ cp ./keepalived.conf ./keepalived-blk.conf service keepalived start
修改master機器上 keepalived的配置文件 keepalived.conf
! Configuration File for keepalived global_defs { #故障時,主備切換通知到的email #notification_email { #acassen@firewall.loc #failover@firewall.loc #sysadmin@firewall.loc #} #email配置 #notification_email_from Alexandre.Cassen@firewall.loc #smtp_server 192.168.200.1 #smtp_connect_timeout 30 #路由ID,當前安裝keepalived的節點主機標識符,需保證全局唯一 router_id keep_101 #vrrp_skip_check_adv_addr #vrrp_strict #vrrp_garp_interval 0 #vrrp_gna_interval 0 } #基於vrrp協議的實例,可理解為一個服務器節點 vrrp_instance VI_1 { #表示狀態為主節點MASTER還是備用機BACKUP state MASTER #當前示例綁定的網卡,根據ip addr查出來的網卡 interface eth0 #虛擬路由id,保證主備節點該值一致 virtual_router_id 51 #優先級/權重,master權重一般高於backup,在master掛掉后誰的優先級高,誰就能成為master priority 100 #主備之間同步檢查的時間間隔(心跳),默認為1s advert_int 1 #認證授權的密碼,防止非法節點進入,主備需要一致 authentication { auth_type PASS auth_pass 1111 } #虛擬IP,可以有多個,根據自己實際情況修改 virtual_ipaddress { 192.168.51.200 } }
修改backup機器上 keepalived的配置文件 keepalived.conf
! Configuration File for keepalived global_defs { #故障時,主備切換通知到的email #notification_email { #acassen@firewall.loc #failover@firewall.loc #sysadmin@firewall.loc #} #email配置 #notification_email_from Alexandre.Cassen@firewall.loc #smtp_server 192.168.200.1 #smtp_connect_timeout 30 #路由ID,當前安裝keepalived的節點主機標識符,需保證全局唯一 router_id keep_103 #vrrp_skip_check_adv_addr #vrrp_strict #vrrp_garp_interval 0 #vrrp_gna_interval 0 } #基於vrrp協議的實例,可理解為一個服務器節點 vrrp_instance VI_1 { #表示狀態為主節點MASTER還是備用機BACKUP state BACKUP #當前示例綁定的網卡,根據ip addr查出來的網卡 interface eth0 #虛擬路由id,保證主備節點該值一致 virtual_router_id 51 #優先級/權重,master權重一般高於backup,在master掛掉后誰的優先級高,誰就能成為master priority 90 #主備之間同步檢查的時間間隔(心跳),默認為1s advert_int 1 #認證授權的密碼,防止非法節點進入,主備需要一致 authentication { auth_type PASS auth_pass 1111 } #虛擬IP,可以有多個,根據自己實際情況修改 virtual_ipaddress { 192.168.51.200 } }
3. ip addr 檢查虛IP配置情況
4.測試 當master機器關閉 keepalived(service keepalived stop)后 備機器拿到虛Ip 192.168.51.200
結束 最后用rabbitMQ測試了下效果
直接使用虛Ip鏈接MQ
當master存在時 使用的是master服務器的MQ
當master關閉時 使用的是backup機器的MQ
當master恢復時 使用的是master的MQ!
補充:配置檢測nginx腳本
keepalive配置:
! Configuration File for keepalived global_defs { #標識信息 router_id LVS_keep_1 } vrrp_script check_nginx{ #檢查nginx是否在線腳本 script "/usr/zmoon/server/check_nginx.sh" interval 10 } vrrp_instance VI_1 { state MASTER interface eth0 #MASTER 和 BACKUP 必須相同 virtual_router_id 51 #優先級MASTER大於BACKUP即可 priority 200 #心跳間隔時間 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { #虛擬ip(對外提供) 192.168.51.130 } track_script{ check_nginx } }
nginx腳本: check_nginx.sh
#!/bin/sh nginxId=$(ps -C nginx --no-header|wc -l) #1.判斷nginx是否存活,如果不存活嘗試啟動nginx if [ $nginxId -eq 0 ];then #啟動nginx /home/zmoon/nginx-1.5.12/sbin/nginx sleep 3 #2.等待3秒再次判斷nginx狀態 nginxId=$(ps -C nginx --no-header|wc -l) if [ $nginxId -eq 0 ];then #關閉keepalived service keepalived stop fi fi
默認日志存放在系統日志:/var/log/messages下