使用keepalived搭建高可用LVS叢集
Linux Cluster
使用keepalived搭建高可用LVS
一般比較常用於搭建高可用叢集的有:heartbeat、keepalived、piranha。
常見的高可用叢集有:高可用LVS叢集、高可用web叢集(keepalived+nginx)、高可用mysql叢集。
keepalived是一個類似於layer3, 4 & 7交換機制的軟體,也就是我們平時說的第3層、第4層和第7層交換。只需要簡單配置keepalived的配置檔案即可實現自動生成ipvsadm規則,還可以監控後端realserver主機的健康狀態,出現故障時自動剔除叢集,恢復後自動新增,以及MASTER與BACKUP之間的故障切換。
本次實驗使用keepalived+Apache,搭建高可用LVS叢集。
DIP=director IP
RIP=realserverIP
VIP=virtual server IP
realserver=rs
ha=director
1.實驗概況
1.1實驗拓撲圖
1.2簡介
本次實驗使用virtualbox建立一臺最小化安裝的centos5.5配置yum源,完成後再複製出三臺剛才已安裝好的centos5.5,共四臺虛擬機器, 只需要啟用一張網絡卡,選擇橋接模式。採用LVS的DR直接路由工作模式,wlc排程演算法,後端伺服器健康狀態監測方式為HTTP, 此外後端伺服器健康狀態監測方式還有SSL、HTTPS、TCP_CHECK等。 hostname ip 角色 作用 ha1 VIP:eth0:0 192.168.8.30 LVS負載均衡器MASTER 接收使用者請求, 轉發給後端realserver處理 DIR:eth0 192.168.8.31 用於與後端realserver進行通訊 ha2 VIP:eth0:0 192.168.8.30 LVS負載均衡器BACKUP 備用的LVS排程器 DIR:eth0 192.168.8.32 用於與後端realserver、 LVS負載均衡器MASTER進行通訊 rs1 RIP:192.168.8.33 WEB伺服器 與director通訊,提供web服務 VIP:lo:0 192.168.8.30 用於處理director分配的請求後 以此地址返回給使用者 rs2 RIP:192.168.8.34 WEB伺服器 與director通訊,提供web服務 VIP:lo:0 192.168.8.30 用於處理director分配的請求後 以此地址返回處理結果給使用者
1.3實驗步驟
1.3.1MASTER配置
1).單網絡卡、橋接模式啟動ha1,並配置ip地址為192.168.8.31 2).關閉防火牆與selinux service iptable stop service ip6table stop vim /etc/selinux/conf 修改為SELINUX=disabled 3).安裝keepalived前的準備 由於一開始centos5.5是最小化安裝,所以需要提前安裝編譯工具以及其他安裝keepalived的元件 安裝openssl yum install -y openssl openssl-devel #安裝openssl以及openssl開發包未安裝核心開發也可以使keepalived安裝成功,但無法自動生成ipvsadm規則 yum install -y kernel-devel 安裝編譯工具gcc-c++ yum install -y gcc-c++ 安裝ipvs管理工具ipvsadm yum install -y ipvsadm 4).安裝keepalived wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz tar xvf keepalived-1.2.7.tar.gz cd keepalived-1.2.7 ./configure --sysconf=/etc --with-kernel-dir=/usr/src/kernels/2.6.18-417.el5-i686 #注意/usr/src/kernels/2.6.18-417.el5-i686,為題主自己的核心版本, 讀者自己操作是使用tab補全,萬一照抄或許會失敗。
配置檢測結束後會出現如下結果,為三個yes,其中IPVS use libnl: No,對後續的安裝配置執行無影響。
Keepalived configuration
Keepalived version : 1.2.7
Compiler : gcc
Compiler flags : -g -O2 -DETHERTYPE_IPV6=0x86dd
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
IPVS use libnl : No
Use VRRP Framework : Yes
Use VRRP VMAC : No
SNMP support : No
Use Debug flags : No
make
make install
ln -s /usr/local/sbin/keepalived /sbin
至此keepalived安裝完成
5).配置keepalived
keepalived的配置檔案在 /etc/keepalived/keepalived.conf
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.confbk #先備份一下
vim /etc/keepalived/keepalived.conf
以下為題主自己的配置檔案,後端伺服器健康狀態使用HTTP
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost #用於接受郵件報警,當服務異常時發郵件到郵箱提醒
}
notification_email_from admin@localhost #郵件傳送地址
smtp_server 127.0.0.1 #郵件伺服器本機
smtp_connect_timeout 30 #smtp sever 超時時間
router_id LVS_DEVEL #服務標識,郵件主題
}
vrrp_instance VI_1 {
state MASTER #指定本伺服器為主伺服器
interface eth0
virtual_router_id 51 #虛擬路由標識,MASTER與BACKUP需一致
priority 100 #定義優先順序,需大於BACKUP的priority值
advert_int 1
authentication { #設定驗證型別與驗證密碼
auth_type PASS
auth_pass abcd #驗證密碼MASTER與BACKUP需一致
}
virtual_ipaddress {
192.168.8.30 #設定VIP,既配置在MASTER排程器上由於接受使用者請求的地址
}
}
virtual_server 192.168.8.30 80 { #虛擬伺服器定義部分既MASTER排程器
delay_loop 6 #執行情況監測時間6s一次
lb_algo wlc #設定排程演算法為wlc
lb_kind DR #設定LVS的工作模式為DR模式
nat_mask 255.255.255.0 #虛擬伺服器子網掩碼
persistence_timeout 50 #session保持時間
protocol TCP #指定轉發的協議型別
real_server 192.168.8.33 80 { #後端真實伺服器節點配置realserver1
weight 3 #該節點伺服器權重
HTTP_GET { #後端伺服器情況檢查方式HTTP_GET,向後端伺服器傳送http請求,無迴應即為該節點伺服器異常,剔除ipvsadm規則
url {
path /
status_code 200
}
connect_timeout 3 #3秒無響應超時
nb_get_retry 3 #重試次數
delay_before_retry 3 #重試時間間隔
}
}
real_server 192.168.8.34 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
6).將改配置檔案複製到BACKUP主機
scp /etc/keepalived/keepalived.conf 192.168.8.32:/etc/keepalived/
7).啟動keepalived服務
service keepalived start
至此MASTER的配置完成
1.3.2BACKUP配置
0).單網絡卡、橋接模式啟動ha2,並配置ip地址為192.168.8.32
1).與MASTER的配置相差不大
關閉iptables與selinux
安裝openssl openssl-dev gcc-c++ kernel-devel ipvsadm keepalived。安裝步驟參考MASTER的配置
2).修改MASTER傳過來的keepalived.conf
vim /etc/keepalived/keepalived.conf
將 state MASTER 改為state MBACKUP
priority 100 改為priority 80
即可
3).啟動keepalived服務
service keepalived start
至此BACKUP的配置完成
1.3.3Realserver1配置
1).單網絡卡、橋接模式啟動rs1,並配置ip地址為192.168.8.33,關閉iptables與selinux
2).安裝httpd服務
yum install httpd
3).配置測試頁,啟動httpd服務
echo "this is realserver1 test web" > /var/www/html/index.html
service httpd start
4).配置arptable調整網絡卡的響應/通告級別
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
5).配置網路別名及新增路由
ifconfig lo:0 192.168.8.30 broadcast 192.168.8.30 netmask 255.255.255.255 up
route add -host 192.168.8.30 dev lo:0
1.3.4Realserver2配置
1).與realserver1的配置差別不大,同樣的 單網絡卡、橋接模式啟動rs2,並配置ip地址為192.168.8.34,關閉iptables與selinux
安裝httpd,建立測試頁為與realserver1區別echo "this is realserver2 test web" > /var/www/html/index.html
啟動httpd服務
配置arptable
配置網路別名新增路由
可使用curl http://192.168.8.33 檢測realserver1的測試頁是否正常
至此所有的配置結束
1.4檢測
1.4.1實驗結果檢測
1).在MASTER輸入ipvsadm -l -n 檢查是否自動建立的了叢集服務及新增的叢集主機
輸入ip addr 檢查192.168.8.30 這個提供使用者請求的ip地址是否存在本機
存在及正常
1.4.1LVS故障切換檢測
1).假設MASTER出現異常,在MASTER輸入service keepalived stop 停止keepalived服務,
使用ipvsadm -l -n 檢視本機的ipvsadm是否清空
使用ip addr 檢視VIP 192.168.8.30是否還存在本機
在BACKUP輸入ipvsadm -l -n 檢視BACKUP是否繼承了MASTER的ipvsadm規則
輸入ip addr 檢視VIP 192.168.8.30是否存在本機
若有即為LVS故障切換成功。
假設MASTER解除異常 service keepalived start 重新啟用
則ipvsadm規則與VIP都應該存在MASTER上
1.4.1後端伺服器realserver健康狀況檢測
1).假設realserver1出現異常service httpd stop
則在LVS上的使用ipvsadm -l -n檢視ipvsadm規則,ipvsadm將rs1剔除,顯示為叢集節點伺服器中無rs1 192.168.8.33
假設realserver1解除異常service httpd start
則ipvsadm的規則上重新出現rs1 192.168.8.33
2其他情況
2.1當兩個realserver節點,都出現異常
解決:將WEB服務重定向在MASTER與BACKUP上,顯示錯誤頁面。
1).yum install httpd
2).echo "404,Not Found" > /var/www/html/index.html
3).修改vim /etc/keepalived/keepalived.conf,新增sorry_server 127.0.0.1 80,修改後內容如下
virtual_server 192.168.8.30 80 {
delay_loop 6
lb_algo wlc
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.8.33 80 {
weight 3
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
4).重啟keepalived服務
service keepalived restart
5).手動將兩臺realserver的httpd服務stop,再訪問http://192.168.8.30進行測試
測試