高可用服务之Keepalived高可用LVS集群
优质文章,第一时间送达
作者 | Linux-1874
来源 | urlify.cn/JN7vim
环境说明
名称 | ip地址 | 端口 |
keepalived-node01(master) | 192.168.0.41 | \ |
keepalived-node02(backup) | 192.168.0.42 | \ |
LVS-RS1 | 192.168.0.43 | 80 |
LVS-RS2 | 192.168.0.44 | 80 |
VIP | 192.168.0.111 | 80 |
准备LVS集群RS1和RS2
1、安装webserver
1 |
|
提示:rs1和rs2上都要安装nginx服务,用于后端rs提供的服务;
2、提供测试页
3、启动rs1和rs2上的nginx服务
4、编写修改内核参数,并配置vip给RS1和RS2的脚本
#/bin/bash
#
vip='192.168.0.111'
mask='255.255.255.255'
interface='lo:0'
case $1 in
start)
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
ifconfig $interface $vip netmask $mask broadcast $vip up
route add -host $vip dev $interface
;;
stop)
ifconfig $interface down
echo 0 >/proc/sys/net/ipv4/conf/all/arp_announce
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/lo/arp_ignore
;;
*)
echo "Usage:bash $0 start|stop"
exit 1
;;
esac
提示:以上脚本主要实现了两个参数,给定start参数就把对应的内核参数修改以后,并把vip配置到指定的接口;给stop参数就把vip从指定的端口上删除,并还原内核参数的设定;
在rs1和rs2上执行设置内核参数的脚本
提示:到此后端两个RS的环境就准备好了;
配置keepalived,生成lvs规则
完整的配置
[root@node01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from node01_keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node01
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
vrrp_mcast_group4 224.0.12.132
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 12345678
}
virtual_ipaddress {
192.168.0.111/24 brd 192.168.0.255 dev ens33 label ens33:1
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
virtual_server 192.168.0.111 80 {
delay_loop 3
lb_algo wrr
lb_kind DR
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.0.43 80 {
weight 1
nb_get_retry 2
delay_before_retry 2
connect_timeout 30
HTTP_GET {
url {
path /index.html
status_code 200
}
}
}
real_server 192.168.0.44 80 {
weight 1
nb_get_retry 2
delay_before_retry 2
connect_timeout 30
HTTP_GET {
url {
path /index.html
status_code 200
}
}
}
}
[root@node01 ~]#
安装sorryserver,并配置测试页面
启动keepalived
提示:到此基于keepalived高可用LVS集群就配置完成了;
验证:用浏览器对VIP访问,看看是否能够访问到后端RS提供的页面?
提示:解决办法用iptables -F清空iptables规则;这种清空iptables规则的方式只是临时的方式,重启以后,或者vip飘逸后,对应的规则又会生成,永久解决办法是在keepalived的配置文件,禁用它自动生成iptabels规则;
提示:在/etc/keepalived/keepalived.conf的global_defs中加上vrrp_iptables这个配置,这个配置表示禁用自动生成iptables规则;当然我们也可配置不严格遵守vrrp协议,把vrrp_strict去掉也行;选择其中一种方式即可;
验证:重启keepalived,看看对应iptables规则是否还会生成?
提示:可以看到现在vip所在节点的iptables规则就没有在自动生成了,对于node02也是相同的配置,重启keepalived即可解决自动生成iptables规则的问题;
现在在用浏览器访问vip,看看是否能够访问到后端RS提供的页面?
提示:可以看到我们在浏览器上访问VIP是可以正常访问到后端rs提供的页面;
验证:把node01上的keepalived停掉,看看node02是否会自动将vip配置上对应的接口?用浏览器是否还会访问到rs提供的页面呢?
提示:可以看到当node01的keepalived宕机以后,对应vip会自动飘逸到node02上去,并且在客户端访问VIP几乎不受影响;
验证:在node01上查看ipvs规则,看看是否都生成了ipvs规则呢?
提示:可以看到node01上并没有生成ipvs规则,原因是keepalived停掉了,对应的ipvs规则也就删除了;node02上的keepalived是活跃状态,所以对应ipvs规则也是有keepalived自动生成;
验证:把rs1的web服务停掉,看看keepalived是否会检测到rs1不再线,从而把rs1自动从集群踢出去呢?
提示:可以看到当rs1故障以后,keepalived会检测到rs1故障,然后把rs1从集群中提出去,所以我们在ipvs规则表中就没有rs1;
验证:把rs2停掉,看看对应的sorryserver是否会被激活?
验证:用浏览器访问VIP看看对应相应的内容是否是vip所在节点的sorryserver提供的页面呢?
提示:可以看到当rs都宕机以后,再次访问VIP就会响应我们之前在配置文件中提供的sorryserver的页面;
验证:启动rs1或rs2看看对应sorryserver是否会下线呢?
提示:可以看到当rs2恢复以后,对应的sorryserver就从集群下线;
到此基于keepalived高可用LVS集群的配置,测试就结束了;
感谢点赞支持下哈