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會自動被加進叢集中