Keepalived介绍
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件。
Keepalived高可用原理
搭建主、备服务器一样的配置,在Keepalived中配置相同的VIP;主服务器发送“心跳消息”给备服务器,那么备服务器的VIP配置就不生效,一旦主服务器宕机,“心跳消息”停止发送,备份服务器会让VIP生效,产生“IP漂移”,备服务器就会变成主服务器;
-
注意不能同时有两个主服务器;
-
抢占模式(默认模式):主服务器优先级高于备份服务器,主服务器恢复后会重新“抢回”VIP;
-
非抢占模式:(加上nopreempt参数才能开启):主服务器恢复后成为新的备份服务器,只有当原备份服务器宕机时,才会发生IP漂移;
keepalived通过vrrp协议实现高可用架构,vrrp是路由灾备的实现基础。
Keepalived三大功能
-
高可用:VIP漂移,基于VRRP协议
-
健康检测:通过执行检测脚本或网络请求等方式检测服务是否正常;
-
负载均衡:内置LVS管理器,通过Keepalived配置LVS负载均衡功能;
Keepalived是基于VRRP协议来实现高可用的:
VRRP协议(Virtual Router Redundancy Protocol虚拟路由冗余协议)是一种解决局域网网关单点故障的标准化协议(IETF标准,RFC5798)。
其核心作用是:将多台物理路由器“虚拟”成一个统一的“虚拟路由器”,让终端设备(如PC、服务器)仅需配置该虚拟路由器的IP作为网关,即可实现网关的“无缝冗余”——即使其中一台物理路由器故障,网络也能自动切换到备用路由器,避免断网。
Keepalived高可用实验:
## 两个服务器的准备工作
# 首先先给主从设置默认页面的内容
yum install httpd -y
echo "<h1>这是192.168.221.30!!</h1>" > /var/www/html/index.html
systemctl start httpd
# 然后安装Keepalived
# CentOS7
yum install -y keepalived
# Ubuntu
apt install -y keepalived
## 以下是可以省略的步骤(省略)
# 查看keepalived版本
keepalived -v
会出现Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2
# 启动keepalived
systemctl start keepalived.service
或者
service keepalived start
# 重启:
systemctl restart keepalived
# 停止:
systemctl stop keepalived
# 状态:
systemctl status keepalived
# 开机重启:
systemctl enable keepalived
# 查看keepalived状态
systemctl status keepalived
# 查看keepalived进程
ps -ef | grep keepalived
# 查看ip列表
ip add show
主节点(192.168.221.30)
vim /etc/keepalived/keepalived.conf
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
! Configuration File for keepalived
global_defs {
router_id server~30 # 标识本节点的字符串,设置为hostname即可
}
vrrp_instance VI_1 {
state MASTER # 标识主节点服务(只有MASTER和BACKUP两种,大写)
interface ens33 # VIP板顶的网卡接口
virtual_router_id 51 # 虚拟路由id,和备节点保持一致
priority 100 # 优先级,高于备节点的即可。
# nopreempt # 禁止MASTER宕机恢复后抢占服务
# smtp_alert # 激活故障时发送邮件告警
mcast_src_ip 192.168.221.30 # 本机IP地址
advert_int 1 # MASTER和BACKUP节点之间的同步检查时间间隔,单位为秒
authentication { # 验证类型和验证密码
auth_type PASS # PAAS(默认),HA
auth_pass 1234 # MASTER和BACKUP使用相同明文才可以互通
}
virtual_ipaddress { # 虚拟IP地址池,可以多个IP
192.168.221.100 # 虚拟IP1(VIP)
}
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
从节点(192.168.221.40)
vim /etc/keepalived/keepalived.conf
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
! Configuration File for keepalived
global_defs {
router_id server~40 # 标识本节点的字符串,设置为hostname即可
}
vrrp_instance VI_1 {
state BACKUP # 标识主节点服务(只有MASTER和BACKUP两种,大写)
interface ens33
virtual_router_id 51
priority 99 # 优先级,低于主节点的即可。
mcast_src_ip 192.168.221.40 # 本机IP地址
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.221.100
}
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
最后用浏览器访问192.168.221.100即可出现主服务器的页面
主服务器宕机后,从服务器的ip a 会多一个192.168.221.100/32,然后再从浏览器就可以访问到从服务器的页面了。
配置文件说明
[root@lvs1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { #全局配置
notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个
acassen@firewall.loc #指定收件人邮箱
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc #指定发件人
smtp_server 192.168.200.1 #指定smtp服务器地址
smtp_connect_timeout 30 #指定smtp连接超时时间
router_id LVS_DEVEL #此处注意router_id为负载均衡标识,在局域网内应该是唯一的。
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 { #虚拟路由的标识符
state MASTER #状态只有MASTER和BACKUP两种,并且要大写,MASTER为工作状态,BACKUP是备用状态
interface eth0 #通信所使用的网络接口
virtual_router_id 51 #虚拟路由的ID号,是虚拟路由MAC的最后一位地址
priority 100 #此节点的优先级,主节点的优先级需要比其他节点高
advert_int 1 #通告的间隔时间
authentication { #认证配置
auth_type PASS #认证方式
auth_pass 1111 #认证密码
}
virtual_ipaddress { #虚拟ip地址,可以有多个地址,每个地址占一行,不需要子网掩码,同时这个ip 必须与我们在lvs 客户端设定的vip 相一致!
192.168.200.16
192.168.200.17
192.168.200.18
}
}
virtual_server 192.168.200.100 443 { #集群所使用的VIP和端口
delay_loop 6 #健康检查间隔,单位为秒
lb_algo rr #lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh
nat_mask 255.255.255.0 #VIP掩码
lb_kind NAT #负载均衡转发规则。一般包括DR,NAT,TUN 3种
persistence_timeout 50 #会话保持时间,会话保持,就是把用户请求转发给同一个服务器,不然刚在1上提交完帐号密码,就跳转到另一台服务器2上了
protocol TCP #转发协议,有TCP和UDP两种,一般用TCP,没用过UDP
real_server 192.168.200.100 443 { #真实服务器,包括IP和端口号
weight 1 #权重
TCP_CHECK { #通过tcpcheck判断RealServer的健康状态
connect_timeout 3 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
connect_port 23 #健康检查的端口的端口
bindto <ip>
}
HTTP_GET { #健康检测方式,可选有 SSL_GET、TCP_CHECK、HTTP_GET
url { #检查url,可以指定多个
path / #检查的url路径
digest ff20ad2481f97b1754ef3e12ecd3a9cc #需要检查到的内容。检查后的摘要信息。
}
url {
path /mrtg
digest 9b3a0c85a887a256d6939da88aabd8cd
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3 #连接超时时间
nb_get_retry 3 #检测尝试几次
delay_before_retry 3 #检测的时间间隔
}
}
}
Keepalived高可用裂脑
什么是裂脑?
由于某些原因,导致两台高可用服务器对在指定时间内,无法检测到对方的心跳消息,各自取得资源及服务的所有权,而此时的两台高可用服务器对都还活着并在正常运行,这样就会导致同一个IP或服务在两端同时存在而发生冲突,最严重的是两台主机占用同一个VIP地址,当用户写入数据时可能会分别写入到两端,这可能会导致服务器两端的数据不一致或造成数据丢失,这种情况就被称为裂脑。
裂脑的原因
1)高可用服务器对之间心跳线链路故障,导致无法正常通信。
2)高可用服务器对上开启了iptables防火墙阻挡了心跳消息传输。
3)高可用服务器对上心跳网卡地址等信息配置不正确,导致发送心跳失败。
4)keepalived配置问题。
解决裂脑的常见方案
1)同时使用串行电缆和以太网电缆连接,同时用两条心跳线路
2)当检测到裂脑时强行关闭一个心跳节点(这个功能需特殊设备支持,如Stonith 、fence)。相当于备节点接收不到心跳消息,发送关机命令通过单独的线路关闭主节点的电源。 fence和Stonith设备其实就是一个智能电源。
Keepalived高可用与裂脑解析
532

被折叠的 条评论
为什么被折叠?



