一.拓撲圖
目標:實現lvs的dr模式+keepalived高可用web集羣架構
圖1 拓撲圖
本次高可用集羣實驗的節點有四個,分別是lvs-master,lvs-slave,lvs-webserver1,lvs-webserver2。
四個節點使用Vmware Pro 12的四臺虛擬機實現,虛擬機操作系統全部採用CentOS 6.8 64位。
四個節點都在一個局域網中,網卡全部採用僅主機模式,網段192.168.80.0/24,VIP爲192.168.80.20。
lvs-master和lvs-slave擔任調度器(DirectorServer,DS)角色, lvs-webserver1和lvs-webserver2擔任真實服務器(Real Server, RS)角色。
兩臺調度器安裝keepalived提供高可用,兩臺真實服務器安裝httpd提供web服務。
二.節點規劃
圖2 節點規劃
三.各節點配置
3.1.各節點基本配置
1)各節點都關閉防火牆,命令:
service iptables stop
chkconfig iptables off
2)各節點都編輯/etc/hosts,添加如下內容:
192.168.80.11 lvs-master
192.168.80.12 lvs-slave
192.168.80.13 lvs-webserver1
192.168.80.14 lvs-webserver2
3)各節點都編輯/etc/sysconfig/network,把主機名HOSTNAME按照節點信息表裏面的更改。主機名更改後需運行命令reboot重啓系統生效。
4)各節點都編輯/etc/sysconfig/network-scripts/ifcfg-eth0,把IP地址按照節點信息表裏面的更改。IP地址更改後需運行命令service network restart重啓網絡生效。
5)各節點都設置好時區和時間同步。
6)各節點都關閉selinux。(視情況而定,一般都關閉。)
3.2. 調度器DS配置
1)lvs
兩臺調度器採用lvs做負載均衡,lvs模塊是centos內核自帶,只需要運行modprobe ip_vs命令即可激活lvs。
2)keepalived安裝
lvs-master是主調度器,lvs-slave是備調度器,採用DR模式,並安裝keepalived提供高可用服務。
Centos6.8編譯安裝keepalived-1.3.5步驟,參考此文: http://blog.csdn.net/shile/article/details/77896937
3)keepalived配置
keepalived的默認配置文件爲/etc/keepalived/keepalived.conf
主負載均衡器配置:
global_defs {
notification_email {
admin@localhost
}
notification_email_from notify@localhost
smtp_server 192.168.80.1
smtp_connection_timeout 30
router_id LVS_01 # 設置lvs的id,在一個網絡內應該是唯一的
}
vrrp_instance VI_1 {
state MASTER #指定Keepalived的角色,MASTER爲主,BACKUP爲備
interface eth0 #指定HA監測網絡的接口
virtual_router_id 51 #虛擬路由編號,主備要一致
priority 100 #定義優先級,數字越大,優先級越高,主DR必須大於備用DR
advert_int 1 #檢查間隔,默認爲1s
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.80.20 #定義虛擬IP(VIP)爲192.168.80.20,可多設,每行一個
}
}
# 定義對外提供服務的LVS的VIP以及port
virtual_server 192.168.80.20 80{
delay_loop 6 # 設置健康檢查時間,單位是秒
lb_algo wlc # 設置負載調度的算法爲wlc
lb_kind DR # 設置LVS實現負載的機制,有NAT、TUN、DR三個模式
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.80.13 80 { # 指定real server1的IP地址
weight 3 # 配置節點權值,數字越大權重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.80.14 80 { # 指定real server2的IP地址
weight 3 # 配置節點權值,數字越大權重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
從負載均衡器配置:
從負載服務器與主負載服務器大致相同,只是在keepalived的配置文件中需要改以下三處:
(1)將router_id由LVS_01改成LVS_02
(2)將state由MASTER改爲BACKUP
(3)將priority由100改爲80
(1)將router_id由LVS_01改成LVS_02
(2)將state由MASTER改爲BACKUP
(3)將priority由100改爲80
4)啓動keepalived
keepalived安裝和配置完成後,添加到自啓動並啓動keepalived高可用服務:
service keepalived start
chkconfig --add keepalived
chkconfig keepalived on
chkconfig --add keepalived
chkconfig keepalived on
3.3.真實服務器RS配置
1)兩臺真實服務器(Real Server, RS)都安裝httpd,提供web服務。lvs-webserver1配置httpd:
yum install -y httpd
vi /etc/httpd/conf/httpd.conf #把ServerName那一行改成ServerName lvs-webserver1:80
service httpd start
echo "lvs-webserver1: 192.168.80.13" >/var/www/html/index.html
service httpd start
echo "lvs-webserver1: 192.168.80.13" >/var/www/html/index.html
lvs-webserver2配置httpd:
yum install -y httpd
vi /etc/httpd/conf/httpd.conf #把ServerName那一行改成ServerName lvs-webserver2:80
service httpd start
echo "lvs-webserver2: 192.168.80.14" >/var/www/html/index.html
yum install -y httpd
vi /etc/httpd/conf/httpd.conf #把ServerName那一行改成ServerName lvs-webserver2:80
service httpd start
echo "lvs-webserver2: 192.168.80.14" >/var/www/html/index.html
2)兩臺真實服務器RS都運行realserver腳本來添加VIP,並抑制arp, 步驟如下。
進入指定文件夾:cd /etc/init.d/ , 編輯腳本文件:vi realserver , 內容如下:
VIP=192.168.80.20
. /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
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
這裏我們設置虛擬IP爲:192.168.80.20
保存腳本文件後更改該文件權限:chmod 755 realserver
開啓realserver服務:service realserver start
保存腳本文件後更改該文件權限:chmod 755 realserver
開啓realserver服務:service realserver start
四.測試
測試主機: 同一局域網的電腦,比如vmware的宿主機(IP:192.168.80.1)。
測試方法: 使用瀏覽器打開http://192.168.80.20測試。刷新頁面,顯示的頁面會在兩臺webserver中循環。