1. 程式人生 > >LVS健康檢查及keepalived實現高可用叢集

LVS健康檢查及keepalived實現高可用叢集

LVS健康檢查

我們前面做的那些LVS的各種模式部署,都沒有健康檢查這一功能,就是說在我們搭建的負載均衡叢集中,如果後端伺服器RS全部宕掉了,客戶端就無法訪問到服務端的資料,這時我們應該給客戶端一些提示,說明伺服器暫時無法訪問。

配置(搭建好LVS-DR模式負載均衡的前提下)

在排程機server1中
1:下載並安裝監控軟體(下載地址:http://rpm.pbone.net/index.php3/stat/4/idpl/23860919/dir/centos_6/com/ldirectord-3.9.5-3.1.x86_64.rpm.html)
ldirectord-3.9.5-3.1.x86_64.rpm
yum install ldirectord-3.9.5-3.1.x86_64.rpm -y
在這裡插入圖片描述


2:rpm -ql ldirectord #查詢配置檔案
在這裡插入圖片描述
我們需要把上圖中紅框中的檔案複製到/etc/ha.d目錄下
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d
cd /etc/ha.d
vim ldirectord.cf
在這裡插入圖片描述
3:編輯配置檔案

virtual=172.25.66.100:80              #vip指定
        real=172.25.66.2:80 gate      #RS指定
        real=172.25.66.3:80 gate
        fallback=127.0.0.1:80 gate   #server2、3服務down後,訪問本機80埠
        service=http
        scheduler=rr         #輪詢
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp
        checktype=negotiate
        checkport=80         #埠
        request="index.html"          #訪問檔案
        #receive="Test Page"
        #virtualhost=www.x.y.z

在這裡插入圖片描述
/etc/init.d/ldirectord start #開啟服務
在這裡插入圖片描述
4:修改server1的apache預設釋出檔案內容
#注意:當安裝 php 模組後,預設優先讀取 index.php,應將index.php刪除
在這裡插入圖片描述
5:不支援埠轉發,修改httpd預設埠80.
因為之前做過varnish實驗,varnish預設埠為80,所以我們可能修改過httpd的預設埠,現在我們將他改回80
在這裡插入圖片描述
/etc/init.d/httpd start
#若無法重啟檢視是否關閉了varnish(埠衝突,varnish之前埠為80)
/etc/init.d/varnish stop
6:在排程機server1進行測試。
curl localhost
在這裡插入圖片描述

測試

1:關閉所有後端伺服器的httpd服務
[[email protected] ~]# /etc/init.d/httpd stop
[[email protected] ~]# /etc/init.d/httpd stop
2:在排程機server1中檢視ipvs規則
在這裡插入圖片描述
3:用客戶端訪問VIP172.25.66.100
在這裡插入圖片描述

高可用叢集的搭建

一臺RS掛掉後,它不會將掛掉的那臺機器踢除,而是繼續向那臺機器傳送請求,而keepalived剛好能解決這個問題.keepalived同樣可以對lvs後端主機實現健康檢查,同樣也可以實現排程器高可用,架設多個keepalived可以實現高可用。
應該注意的是ldirectord和keepalived只能開啟一個,開啟兩個會衝突

keepalived原理

keepalived的作用是檢測伺服器的狀態,如果有一臺web伺服器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的伺服器 從系統中剔除,同時使用其他伺服器代替該伺服器的工作,當伺服器工作正常後Keepalived自動將伺服器加入到伺服器群中,這些工作全部自動完成

實驗環境

1:同樣在搭建好LVS-DR模式的前提下
2:新增一臺虛擬機器server4,作為排程機備機
機器及軟體:
server1: 172.25.66.1 VS(虛擬主機) 主 ipvsadm keepalived
server4: 172.25.66.4 VS(虛擬主機) 備 ipvsadm keepalived
server2: 172.25.66.2 RS(真正主機) arptables
server3: 172.25.66.3 RS(真正主機) arptables
3:軟體包
keepalived軟體包下載:
1.2.24版本本次實驗所用版本
其他版本下載地址

配置

一、在主排程機server1中
1:停用ldirectord
/etc/init.d/ldirectord stop
chkconfig ldirectord off
在這裡插入圖片描述
2:下載keepalived-1.2.24.tar.gz包
3:原始碼安裝keepalived
解壓安裝包
tar zxf keepalived-1.2.24.tar.gz
cd keepalived-1.2.24
在這裡插入圖片描述
解決依賴性
yum install gcc openssl-devel -y
4:原始碼編譯三部曲(依次執行)
制定安裝位置
(1):./configure --prefix=/usr/local/keepalived
(2):make
(3):make install
在這裡插入圖片描述
5:編譯結束後,對keepalived進行配置
cd /usr/local/keepalived/etc/rc.d/init.d/
chmod +x keepalived
生成軟連結
ln -s /usr/local/keepalived/etc/keepalived/ /etc
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
在這裡插入圖片描述
6:修改keepalived配置檔案
vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
   notification_email {
        [email protected]          ##接受警報的 email 地址,可以新增多個
   }
   notification_email_from [email protected] ##設定郵箱的傳送地址
   smtp_server 127.0.0.1    ##設定 smtp server 地址
   smtp_connect_timeout 30  ##設定連線smtp伺服器超時時間
   router_id LVS_DEVEL      ##load balancer 的標識 ID,用於 email 警報
}

vrrp_instance VI_1 {
    state MASTER            ##備機改為 BACKUP,此狀態是由 priority 的值來決定的,當前priority 的值小於備機的值,那麼將會失去 MASTER 狀態
    interface eth0          #HA 監測網路介面
    virtual_router_id 66   #主、備機的 virtual_router_id 必須相同,取值 0-255
    priority 100            ##主機的優先順序,備份機改為 50,主機優先順序一定要大於備機
    advert_int 1            #主備之間的通告間隔秒數
    authentication {        #主備切換時的驗證
        auth_type PASS      #設定驗證型別,主要有 PASS 和 AH 兩種
        auth_pass 1111      #設定驗證密碼,在一個 vrrp_instance 下,MASTER 與 BACKUP 必須使用相同的密碼才能正常通訊
    }
    virtual_ipaddress {     #設定虛擬 IP 地址,可以設定多個虛擬 IP 地址,每行一個
        172.25.66.100/24
    }
}

virtual_server 172.25.66.100 80 {   #定義虛擬伺服器
    delay_loop 3                    #每隔 3 秒查詢 realserver 狀態
    lb_algo rr                      #lvs 排程演算法,這裡使用輪叫
    lb_kind DR                      #LVS 是用 DR 模式
#    persistence_timeout 50
    protocol TCP                    #指定轉發協議型別,有 tcp 和 udp 兩種

    real_server 172.25.66.2 80 {    #配置服務節點
        weight 1                    #配置服務節點的權值,權值大小用數字表示,數字越大,權值越高,設定權值的大小可以為不同效能的伺服器分配不同的負載,可以對效能高的伺服器設定較高的權值,而對效能較低的伺服器設定相對較低的權值,這樣就合理的利用和分配了系統資源
        TCP_CHECK {                 #realserve 的狀態檢測設定部分,單位是秒
            connect_timeout 3       #3 秒無響應超時
            nb_get_retry 3          #重試次數
            delay_before_retry 3    #重試間隔
        }
    }
    real_server 172.25.66.3 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
7:刪除vip,開啟服務
ip addr del 172.25.66.100/24 dev eth0
/etc/init.d/keepalived start #開氣後會自動新增VIP到eth0
8:將主排程機server1的配置檔案複製給備排程機server4
scp -r /usr/local/keepalived/ server4:/usr/local/
scp -r /etc/keepalived/keepalived.conf server4:/etc/keepalived/
二、在備排程機server4中
1:安裝ipvsadm服務
將server1中的yum原始檔複製給server4
yum install ipvsadm -y
2:配置keepalived服務。
同樣先生成相同的軟連結
ln -s /usr/local/keepalived/etc/keepalived/ /etc
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
3:修改keepalived配置檔案
在這裡插入圖片描述

其他不變,修改此段:
vrrp_instance VI_1 {
    state BACKUP        ###狀態為備用
    interface eth0
    virtual_router_id 66
    priority 50        ###修改優先順序
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.66.100
    }
}

在這裡插入圖片描述
4:開啟服務
/etc/init.d/keepalived start
5:檢視日誌server1
cat /var/log/message
在這裡插入圖片描述
可以看到,開啟服務後,server1成為master
在server4中檢視日誌
在這裡插入圖片描述
server4為backup備機

測試

高可用負載均衡測試

1:停止 master (server1)上的 keepalived 服務,看 backup 是否接管(客戶端測試是否會出現輪詢)
在server1中:
/etc/init.d/keepalived stop
在server4中檢視日誌,可以看到,server4已經切換到master狀態,並且VIP會自動轉移到server4
在這裡插入圖片描述
在這裡插入圖片描述
然後到客戶端使用curl命令訪問VIP172.25.66.100
在這裡插入圖片描述
當我們將server1上的keepalived服務重新開啟後,server1可以直接切換為master,因為server1的優先順序比server4的高
在這裡插入圖片描述

故障切換測試

任意關閉 RS 上的 httpd 服務,Keepalived 監控模組是否能及時發現,然後遮蔽故障節點,同時將服務轉移到正常節點來執行。
關閉server2上的httpd服務
在客戶端curl訪問VIP
在這裡插入圖片描述
可以看到,keepalived已經自動將宕掉的RS踢除叢集當中,當我們將server2的httpd服務開啟後,server2會自動被加進叢集中
在這裡插入圖片描述