基礎環境:Centos 7.3 最小化安裝四臺 關閉防火墻及selinux
簡單原理:
keepalived是以VRRP協議為實現基礎的,VRRP全稱Virtual
Router Redundancy Protocol,即虛擬路由冗余協議。
虛擬路由冗余協議,可以認為是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在局域網內其他機器的默認路由為該vip),master會發組播,當backup收不到vrrp包時就認為master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。
LVS是Linux Virtual
Server的簡寫,意即linux虛擬服務器,是一個虛擬的服務器集群系統。
通過keepalives+lvs實現負載均衡及高可用。
主機名 |
IP |
提供的服務 |
客戶機CIP |
172.10.32.0 |
測試服務使用 |
lvs-1 |
172.10.32.1 |
主負載均衡器 |
lvs-2 |
172.10.32.2 |
備用負載均衡器 |
http-1 |
172.10.32.3 |
群集web1 |
http-2 |
172.10.32.4 |
群集web2 |
實驗模型為:lvs-DR模型,對外提供的虛擬IP為 172.10.32.200 , LVS-1為主,LVS_2為備 |
||
實驗模型為:lvs-DR模型,對外提供的虛擬IP為 172.10.32.201 , LVS-1為備,LVS_2為主 |
http組:
#yum install net-tools httpd –y
#echo $ip > /var/www/html/index.html //$ip為IP地址,如httpd-1為172.10.32.3
#systemctl start httpd.service
#curl $ip //查看對應web服務是不是正常訪問
#vim web.sh
#!/bin/bash
#
vip=172.10.32.200
vic=172.10.32.201
mask=’255.255.255.255′
case $1 in
start)
echo
1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo
1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo
2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo
2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig
lo:0 $vip netmask $mask broadcast $vip up
route
add -host $vip dev lo:0
ifconfig
lo:1 $vic netmask $mask broadcast $vic up
route
add -host $vic dev lo:1
;;
stop)
ifconfig
lo:0 down
ifconfig
lo:1 down
echo
0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo
0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo
0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo
0 > /proc/sys/net/ipv4/conf/lo/arp_announce
;;
*)
echo
“Usage $(basename $0) start|stop”
exit
1
;;
esac
#bash bash start
#ifconfig //查看對外虛擬ip綁定在lo網卡上
Lvs組:
#yum install ipvsadm.x86_64
keepalived.x86_64 httpd.x86_64 –y
#systemctl start httpd.server
Lvs-1:#vi /etc/keepalived/keepalived.conf
! Configuration File for
keepalived
global_defs {
notification_email {
root@node1.localhost.localdomain
}
notification_email_from
Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id abd
vrrp_mcast_group4 224.0.100.71
}
vrrp_instance web1 {
state MASTER
interface ens33
virtual_router_id 88
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111ACSD
}
virtual_ipaddress {
172.10.32.200
dev ens33 label ens33:0
}
}
virtual_server
172.10.32.200 80 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP
sorry_server
127.0.0.1 80
real_server 172.10.32.3 80 {
weight 10
HTTP_GET {
url {
path /
status_code
200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.10.32.4 80 {
weight 10
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
vrrp_instance web2 {
state BACKUP
interface ens33
virtual_router_id 89
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass ANXLazsw
}
virtual_ipaddress {
172.10.32.201 dev ens33 label ens33:1
}
}
virtual_server
172.10.32.201 80 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP
sorry_server 127.0.0.1 80
real_server 172.10.32.3 80 {
weight 10
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.10.32.4 80 {
weight 10
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
Lvs-2:# vi /etc/keepalived/keepalived.conf
! Configuration File for
keepalived
global_defs {
notification_email {
root@node2.localhost.localdomain
}
notification_email_from
Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id abd
vrrp_mcast_group4 224.0.100.71
}
vrrp_instance web1 {
state BACKUP
interface ens32
virtual_router_id 88
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass 1111ACSD
}
virtual_ipaddress {
172.10.32.200
dev ens32 label ens32:0
}
}
virtual_server
172.10.32.200 80 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP
sorry_server
127.0.0.1 80
real_server 172.10.32.3 80 {
weight 10
HTTP_GET {
url {
path /
status_code
200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.10.32.4 80 {
weight 10
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
vrrp_instance web2 {
state MASTER
interface ens32
virtual_router_id 89
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass ANXLazsw
}
virtual_ipaddress {
172.10.32.201 dev ens32 label ens32:1
}
}
virtual_server
172.10.32.201 80 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP
sorry_server 127.0.0.1 80
real_server 172.10.32.3 80 {
weight 10
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.10.32.4 80 {
weight 10
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
提示:兩個配置文件相差不大,但需要注意網卡名、主備模式、虛擬路由的id。
Lvs組
#systemctl start
keepalived.service
在CIP進行測試
# for i in {1..14} ; do curl
172.10.32.201 ;done
# for i in {1..14} ; do curl
172.10.32.200 ;done
查看結果是不是為web服務器組ip并輪詢
關閉web服務器組中一個web服務器,并運用上面命令測試,查看結果是不是顯示未關閉服務器ip地址
關閉lvs服務器組,并運用上面命令測試,查看結果是不是顯示為當前綁定對外虛擬ip的服務器ip
在關閉lvs服務器組中的一個,測試,查看結果是不是為當前綁定對外虛擬ip的服務器ip
然后重啟web服務器進行測試。
原創文章,作者:chenbin,如若轉載,請注明出處:http://www.www58058.com/75799