最近在研究服務器高可用集群 (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 ACCEPT
service iptables save
在DS-Master創建keepalived配置文件:
mkdir /etc/keepalived
vi /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服務,配置方式參考另一篇文章
smtp_connect_timeout 30
#服務器全局屬性,在收到提醒郵件的時候會用來作為當前服務器的標識,所以每台服務器都要唯一
router_id LVS_DR_DS1
}
vrrp_instance VI_1 {
state MASTER #指定Keepalived的角色, MASTER 為主機服務器, BACKUP 為備用服務器 interface eth0
virtual_router_id 51
priority 100 #定義優先級,數字越大,優先級越高,主DR必須大於備用DR。
advert_int 1 #心跳間隔,MASTER每隔1秒發送報文告知組內其他機器自己還活着。(主備狀態依靠心跳維持) authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.200 #設置主DR的虛擬IP地址(virtual IP),可多設,但必須每行1個
}
smtp_alert #使用郵件通知
}
virtual_server 192.168.0.200 80 { #注意IP地址與端口號之間用空格隔開
delay_loop 1 #設置健康檢查時間,單位是秒 (是的,keepalived健康檢查也是輪詢模式)
lb_algo rr #設置負載調度算法,默認為rr,即輪詢算法,最優秀是wlc算法
lb_kind DR #設置LVS實現LB機制,有NAT、TUNN和DR三個模式可選
#persistence_timeout 50 #保持客戶端的請求在這個時間段內全部發到同一個真實服務器,單位為秒
protocol TCP #指定轉發協議類型,有TCP和UDP兩種
real_server 192.168.0.203 80 {
weight 1 #配置節點權值,數字越大權值越高
TCP_CHECK {
connect_timeout 2 #表示2秒無響應,則超時
retry 2 #表示重試次數
delay_before_retry 1 #表示重試間隔
}
}
real_server 192.168.0.204 80 {
weight 1
TCP_CHECK {
connect_timeout 2
retry 2
delay_before_retry 1
}
}
real_server 192.168.0.205 80 {
weight 1
TCP_CHECK {
connect_timeout 2
retry 2
delay_before_retry 1
}
}
}
同樣配置文件復制到 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
直接前台模式啟動(for 調試) :
keepalived -l -D -n -d
測試
略…… _(:3」∠)_ -