keepalived-高可用性故障转移的首选方案
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keepalived-高可用性故障转移的首选方案相关的知识,希望对你有一定的参考价值。
keepalived——高可用性故障转移的首选方案
名词:
failaver(故障转移)
failback(回复)
内核态 用户态
224-239的网段是组播网段 可以 多个机器共用一个IP
要使用keepalived需要开启VRRP协议 将会自动加入224.0.0.18组
优先级0-255.越高越优先
*************************首先设置RS (real server)*********************************
首先配置好网站服务,测试一下所有的RS服务器 //real server 真实服务器
[[email protected] ~]# ip addr add dev lo 10.18.42.144/32 //在lo接口上绑定VIP (就是在LB上配置的第二个IP)
[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore //忽视;不支声
[[email protected] ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce // 宣布;宣告
[[email protected] ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[[email protected] ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
*********************************设置LB (负载均衡)*********************************
yum install ipvsadm keepalived // 首先安装
[[email protected] ~]# ipvsadm -C //删除以前设置
[[email protected] ~]# ipvsadm -S //永久保存
[[email protected] ~]# cd /etc/keepalived/
[[email protected] ~]# cp keepalived.conf{,.backup} //以防万一
*************************设置 master+backup LB (负载均衡)****************************
★★★★★★这个是mastrt设置★★★★★★
[[email protected] ~]# vim /etc/keepalived/keepalived.conf //修改成下面这样
! Configuration File for keepalived
global_defs {
router_id wang #名字是不能一样的,随便起
}
vrrp_instance web { # 这个名字要一致,随便起
state MASTER # MASTER 或 BACKUP
interface ens33
virtual_router_id 44 # 虚拟路由IP 相当于组 要一致
priority 150 #优先级0-255 越高越优先
advert_int 1 #检查间隔,默认1秒
authentication {
auth_type PASS #设置密码
auth_pass 123 #密码要一致
}
virtual_ipaddress {
10.18.42.145 #VIP(虚拟IP)
}
}
virtual_server 10.18.42.145 80 {
delay_loop 6 #健康检查时间间隔
lb_algo rr #lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh
lb_kind DR #负载均衡转发规则NAT|DR|RUN
persistence_timeout 5 #5秒会话保持时间
protocol TCP #使用的协议
real_server 10.18.42.164 80 {
weight 1 #默认为1,0为失效
TCP_CHECK {
connect_port 80 #健康检查的端口
connect_timeout 3 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
}
}
real_server 10.18.42.45 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
★★★★★★这个是backup设置★★★★★★
[[email protected] keepalived]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id wang
}
vrrp_instance web {
state BACKUP
interface ens33
virtual_router_id 44
priority 100
# nopreempt #设置为不抢占 注:这个配置只能设置在backup主机上,而且这个主机优先级要比另外一台高
advert_int 1
authentication {
auth_type PASS
auth_pass 123
}
virtual_ipaddress {
10.18.42.145
}
}
virtual_server 10.18.42.145 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 5
protocol TCP
real_server 10.18.42.164 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 10.18.42.45 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
这样就实现了LB的高可用性,坏掉一个还有另一个。keepalived之间会有一个master,keepalived之间要单独享用一个交换机一个网段,设置之好后keepalived会进行心跳检测,默认好像是3秒一次,连不上就自动剔除。
但是这样master+backup 的组合,会出现一个问题就是,假如master宕机了,然后在修复好之后重新工作后,它会抢占master身份,这样会造成多切一次。就会产生多余的延迟、数据等待、等一些不必要的事情。
解决办法:
在 vrrp_instance web { 下 添加 nopreempt
如图:
nopreempt #设置为不抢占 注:这个配置只能设置在backup主机上,而且这个主机优先级要比另外一台高
但是!!!!master不能设置nopreempt
所以解决方案是:不设置master,全部设置成backup,这样大家都是backup,就都能添加nopreempt,即使原本成为master的LB坏掉重新修好之后也不会抢占master。
keepalive的 nopreempt 非抢占
通常如果master服务死掉后backup会变成master,但是当master服务又好了的时候 master此时会抢占VIP,这样就会发生两次切换对业务繁忙的网站来说是不好的。所以我们要在配置文件加入 nopreempt 非抢占,但是这个参数只能用于state 为backup,故我们在用HA的时候最好master 和backup的state都设置成backup 让其通过priority来竞争。
后面附一个:关于keepalived配置文件的详细说明:https://blog.csdn.net/jibcy/article/details/7826158
以上是关于keepalived-高可用性故障转移的首选方案的主要内容,如果未能解决你的问题,请参考以下文章
MySQL 高可用:mysql+Lvs+Keepalived 负载均衡及故障转移