最近在研究伺服器高可用集群 (HA)……
Keepalived 是用C寫的軟路由。 提供負載均衡與高可用特性。
負載均衡利用IPVS技術
高可用通過VRRP協議實現
更難能的貴的是, 一直到最近還在更新
最近版本 Release 1.3.5 發佈於 2017-03-19
安裝過程官方推薦從源碼編譯, 當然, 負載均衡部分基於LVS,所以LVS部分直接YUM安裝。
目標:
實現一個如下圖所示的高可用伺服器集群。
集群由兩台調度器(DirectorServer, DS), 三台真實伺服器(RealServer, RS)構成。 調度器一主一備, 三台真實伺服器進行負載均衡提供服務。
配置完成後只要能保證至少一台DS和一台RS工作正常, 即可對外提供服務。 並且管理員可以在郵箱收到相關伺服器啟停的郵件彙報。
準備:
伺服器使用Oracle VM VirtualBox虛擬實現, 虛擬機器網路使用橋接, 所有虛擬機器(五台伺服器)均在統一內網中, 負載均衡工作在LVS的DR模式下。
虛擬機器信息:
DS1 - master(CentOS-6.8-x86_64-minimal) : 192.168.0.201
DS2 - backup(CentOS-6.8-x86_64-minimal): 192.168.0.202
RS1 (CentOS-6.8-x86_64-minimal): 192.168.0.203
RS2 (CentOS-6.8-x86_64-minimal): 192.168.0.204
RS3 (CentOS-6.8-x86_64-minimal): 192.168.0.205
VIP: 192.168.0.200
keepalived編譯與安裝(兩台DS上進行)
1)安裝依賴庫, 配置防火牆開放埠。
yum install gcc openssl-devel libnl3-devel ipset-devel iptables-devel libnfnetlink-devel net-snmp-devel -y
iptables -I INPUT -i eth0 -d 224.0.0.0/8 -p vrrp -j ACCEPT
iptables -I OUTPUT -o eth0 -d 224.0.0.0/8 -p vrrp -j ACCEPT
service iptables save
2)獲取最近版本原始程式碼。
wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz
tar -zxvf keepalived-1.3.5.tar.gz
3)進入目錄, 編譯。
cd keepalived-1.3.5
./configure make && make install
4)配置系統服務和開機啟動:
cp ./keepalived/etc/init.d/keepalived /etc/init.d/
cp ./keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
chkconfig keepalived on
service keepalived status #驗證系統服務安裝成功
5)一些清理工作:
cd ..rm -rf keepalived-1.3.5
keepalived配置
1)配置RS, 提供WEB服務
三台RS使用Nginx對外提供服務, 三個RS提供伺服器的埠必須一致, 例如80.
為了驗證負載均衡效果, 可以讓三台伺服器返回的頁面略有區別, 比如返回的頁面中帶上自己的hostname
計畫配置LVS負載均衡工作在DR模式下。 所以需要對RS進行ARP抑制配置。
配置腳本 realserver.sh 如下:
#!/bin/bash VIP=192.168.0.200 source /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP /sbin/route add -host $VIP dev lo:0 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Start OK" ;; stop) ifconfig lo:0 down route del $VIP >/dev/null 2>&1 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0執行時使用 /path/to/realserver.sh start
三台RS均需要執行。
2)配置DS, 實現HA與負載調度。
Keepalived的負載均衡功能直接利用了LVS, 所以使用Keepalived自帶的virtual_server配置方式配置負載均衡前, 需要為兩台DS均安裝LVS:
yum install ipvsadm -y
LVS的DR模式沒有埠轉發功能。 調度器對包暴漏的埠和伺服器對外提供的服務使用的埠必須是一致的(本案為80埠)。
兩台DS均需要開放80埠, 以對外提供服務:
iptables -I INPUT -p tcp --dport 80 -j ACCEPTservice iptables save
在DS-Master創建keepalived設定檔:
mkdir /etc/keepalivedvi /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { notification_email { guang384@qq.com } notification_email_from guang384@163.com smtp_server 127.0.0.1 #使用本地STMP服務, 配置方式參考另一篇文章(主備狀態依靠心跳維持)(是的, keepalived健康檢查也是輪詢模式)
同樣設定檔複製到 DS-BACKUP
修改3個地方(很多文章說只需要配置vrrp_instance中的 狀態 和 優先順序 兩處即可, 但是為了郵件提示的準確性, 需要將 global_defs.route_id 配置不一樣, 當然, 如果沒有配置郵件提示而使用其他方式如nagios對伺服器進行監控, 這裡配置什麼其實無所謂)
keepalived.conf修改三個地方
1) router_id LVS_DR_DS2
2) state BACKUP
3 ) priority 50
keepalived 啟動和停止:
service keepalived start|stop
keepalived執行日誌預設位置:
tail -f /var/log/messages
測試
略…… _(:3」∠)_ -