配置keepalived+LVS_DR

配置keepalived+LVS_DR

一、keepalived主備同時操作

1.檢查防火牆和selinux的狀態,最好都關了

2.安裝軟件

yum  install  -y   keepalived    ipvsadm
systemctl enable keepalived                                #設置開機自啓動
ipvsadm -C                                                                   #清空轉發規則

3.keepalived+lvs_DR,keepalived的主機不需要開啓路由轉發的功能也可正常工作。

4.Keepalived實現LVS-DR模式調度器的高可用

vim /etc/keepalived/keepalived.conf

global_defs {
  notification_email {
    [email protected]                //設置報警收件人郵箱
  }
  notification_email_from ka@localhost    //設置發件人
  smtp_server 127.0.0.1                //定義郵件服務器
  smtp_connect_timeout 30
  router_id  lvs1                        //設置路由ID號(實驗需要修改)
}
vrrp_instance VI_1 {
  state MASTER                             //主服務器爲MASTER,備用服務器爲BACKUP
  interface eth0                        //定義網絡接口
  virtual_router_id 50                    //主輔VRID號必須一致
  priority 100                         //服務器優先級,主備的優先級通常設置的不同
  advert_int 1
  authentication {
    auth_type pass
    auth_pass 1111                       //主輔服務器密碼必須一致
  }
  virtual_ipaddress {                   //配置VIP(按需修改)
192.168.4.15    //有的後面這裏有更詳細的寫法
 }   
}


virtual_server 192.168.4.15 80 {           //設置ipvsadm的VIP規則(按需修改)
  delay_loop 6
  lb_algo wrr                          //設置LVS調度算法爲wrr,還有別的算法
  lb_kind DR                               //設置LVS的模式爲DR
  #persistence_timeout 50
#注意這樣的作用是保持連接,開啓後,客戶端在一定時間內始終訪問相同服務器
  protocol TCP
  real_server 192.168.4.100 80 {         //通常real_server的端口跟vip的端口一致,否則可能會報錯
    weight 1                             //設置權重爲1
    TCP_CHECK {                            //對後臺real_server做健康檢查
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
  }
 real_server 192.168.4.200 80 {       //設置後端web服務器真實IP(實驗需要修改)
    weight 2                          //設置權重爲2
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
  }
}

5.開啓服務

systemctl start keepalived
ipvsadm -Ln                 #查看LVS規則
 ip  a   s                    #查看VIP設置

6.後續會用到的功能

6.1.更改keepalived的配置文件後,使配置生效的命令

kill -HUP $(cat /var/run/keepalived.pid)

6.2 systemctl stop keepalived.service幹不掉keepalived服務,vip也不會漂移的原因

當我們stop掉keepalived服務的時候,發現VIP並沒有漂移走,服務也沒停掉

ps aux | grep keep 查看keepalived的進程還在

於是我們查看keepalived的service文件
vim  /usr/lib/systemd/system/keepalived.service

KillMode=process的大致意思是當停止keepalived的時候只停掉主進程,而主進程產生的子進程是不會被幹掉的,SSH服務就是這個模式。

killmode的默認值是control-group,意思時所有進程都會被幹掉,我這裏選擇把這項註釋掉,使用默認參數。

即:註釋掉killMode這一行
#KillMode=process

改了service文件需要使用systemctl daemon-reload來重讀配置

然後就可以正常使用了。

廢了這麼多話,其實可以使用systemctl kill keepalived來停掉服務。

6.4腦裂問題的解決(主備機器同時操作)

寫一個while循環,每輪ping網關,累計連續失敗的次數,當連續失敗達到一定次數則運行service keepalived stop關閉keepalived服務。

如果發現又能夠ping通網關,再重啓keepalived服務。最後在腳本開頭再加上腳本是否已經運行的判斷邏輯,將該腳本加到crontab裏面。

#修改週期性計劃任務
crontab -e

#加入循環檢測腦裂是否發生的腳本(備註:週期性計劃任務服務器重啓後依然有效)
*/3 * * * * /bin/bash  檢測腳本的絕對路徑

check_keep.sh腳本舉例:

#!/bin/bash

#設置VIP
VIP=192.168.122.1

#檢測服務是否存在
keep_num=`ps aux | grep keepalive  | grep -v grep | wc -l`

#服務存在時,如果ping不通網關就關閉keepalived服務
if [ ${keep_num} -ge 2 ]
then
        ping_num=0
        for i in {1..10}
        do
                ping $VIP -c 3 &>/dev/null
                num=`echo $?`
                let ping_num=ping_num+num
                sleep 5
        done

        if [ ${ping_num} -ge 5 ]
        then
                #關閉keepalived服務
                echo '服務已關閉'
        fi

#服務不存在時,如果可以ping通網關就開啓keepalived服務
else
        ping_num=0
        for i in {1..10}
        do
                ping $VIP -c 3 &>/dev/null
                num=`echo $?`
                let ping_num=ping_num+num
                sleep 5
        done

        if [ ${ping_num} -eq 0 ]
        then
                #開啓keepalived服務
                echo '開啓服務'
        fi
fi

二.把VIP配置到lo:1(所有keepalived配置項裏的real_server都操作)

如果某個real_server出故障了會自動從LVS中被去掉,好了會自動加上,全程無需人爲處理。

1.檢查防火牆和selinux的狀態,最好都關了

2.加配置時(按實際修改,不需要創建lo:1的實際配置文件)

vim add_lo_1.sh #運行此腳本,lo:1會自動配置好

#!/bin/bash
VIP=192.168.1.5
echo 1 >  net.ipv4.conf.all.arp_ignore
echo 1 >  net.ipv4.conf.lo.arp_ignore
echo 2 >  net.ipv4.conf.lo.arp_announce
echo 2>  net.ipv4.conf.all.arp_announce
/sbin/ifconfig  lo:1  $VIP  netmask  255.255.255.255  broadcast  $VIP  up
/sbin/route add -host $VIP dev lo:1

ip a s 檢查結果

3.刪除lo:1的腳本

vim del_lo_1.sh

#!/bin/bash
echo 0 >  net.ipv4.conf.all.arp_ignore
echo 0 >  net.ipv4.conf.lo.arp_ignore
echo 0 >  net.ipv4.conf.lo.arp_announce
echo 0 >  net.ipv4.conf.all.arp_announce
/sbin/ifconfig  lo:1   down

ip a s 檢查結果

4.設置開機自動配置好lo:1

chmod +x  add_lo_1.sh

在腳本/etc/rc.d/rc.local(和/etc/rc.local是同一個文件,軟鏈)末尾添加add_lo_1.sh的絕對路徑

5.實時檢查lo:1,如果消失了自動給加上

ip_check_lo_1_up.sh

#!/bin/bash
VIP=192.168.1.5
check_num=`/usr/sbin/ip addr show | grep $VIP | grep -v grep | wc -l`
if [ $check_num -eq 0 ]
then
加上add_lo_1.sh的絕對路徑
fi

設置成週期性計劃任務

chmod +x ip_check_lo_1_up.sh

crontab -e

*/15 * * * *   寫上 ip_check_lo_1_up.sh的絕對路徑
如果對您有幫助,幫忙點個贊加個關注,謝謝!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章