基础环境: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.178linux.com/75799