1.keepalived简介
vrrp
协议的软件实现,原生设计目的为了
高可用
ipvs
服务
功能:
基于
vrrp
协议完成地址流动
为
vip
地址所在的节点生成
ipvs
规则
(
在配置文件中预先定义
)
为
ipvs
集群的各
RS
做健康状态检测
基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持
nginx
、
haproxy
等服务
健康检查和失败切换是keepalived的两大核心功能
- 健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活
- 而失败切换主要是应用于配置了主备模式的服务器,利用VRRP协议维持主备服务器的心跳,当主服务器出现问题时,由备服务器承载对应的业务,从而在最大限度上减少损失,并提供服务的稳定性
2.选举机制
既然有主备就会有选举机制,那么我们keepalived的选举机制如下
非抢占模式(默认),只要Master不挂掉,优先级高的路由器只能等待
vrrp_instance VI_1 {
state MASTER #主服务器 BACKUP 对应是从服务器
interface eth0 #对应网卡
virtual_router_id 51 #每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一
priority 100 #当前物理节点在此虚拟路由器的优先级,范围:1-254
#值越大优先级越高,每个keepalived主机节点此值不同
advert_int 1 #vrrp通告的时间间隔,默认1s
authentication {
auth_type PASS #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
auth_pass 1111 #预共享密钥,仅前8位有效
#同一个虚拟路由器的多个keepalived节点必须一样
}
virtual_ipaddress {#虚拟IP,生产环境可能指定上百个IP地址
192.168.200.16
192.168.200.17
192.168.200.18
}
}
抢占模式,一旦有优先级高的路由器加入,立即成为Master,
priority 100 #优先级高
nopreempt #非抢占模式 加入
3.配置解析
3.1全局配置
#全局配置
global_defs {
notification_email { #keepalived 发生故障切换时邮件发送的目标邮箱
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc #发邮件地址
smtp_server 192.168.200.1#邮件服务器地址
smtp_connect_timeout 30 #邮件服务器连接timeout
router_id LVS_DEVEL #每个keepalived主机唯一标识
vrrp_skip_check_adv_addr #对所有通告报文都检查,会比较消耗性能,收到的通告报文和上一
个路由器一样则跳过检查
vrrp_strict
#严格遵循vrrp协议
#启用此项后以下状况将无法启动服务:
#1.无VIP地址
#2.配置了单播邻居
#3.在VRRP版本2中有IPv6地址
#建议不加此项配置
vrrp_garp_interval 0 #报文发送延迟,0表示不延迟
vrrp_gna_interval 0 #消息发送延迟
#vrrp_mcast_group4 224.0.0.18 #指定组播IP地址范围:
}
3.2 虚拟路由配置
vrrp_instance VI_1 {
state MASTER
interface eth0 #绑定为当前虚拟路由器使用的物理接口,如:eth0,可以和VIP不在一
个网卡
virtual_router_id 51 #每个虚拟路由器惟一标识,范围:0-255,每个虚拟路由器此值必须唯一
#否则服务无法启动
#同属一个虚拟路由器的多个keepalived节点必须相同
#务必要确认在同一网络中此值必须唯一
priority 100 #当前物理节点在此虚拟路由器的优先级,范围:1-254
#值越大优先级越高,每个keepalived主机节点此值不同
advert_int 1 #vrrp通告的时间间隔,默认1s
authentication { #认证机制
auth_type AH|PASS #AH为IPSEC认证(不推荐),PASS为简单密码(建议使用)
auth_pass 1111 #预共享密钥,仅前8位有效
#同一个虚拟路由器的多个keepalived节点必须一样
}
virtual_ipaddress { #虚拟IP,生产环境可能指定上百个IP地址
<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
172.25.254.100 #指定VIP,不指定网卡,默认为eth0,注意:不指定/prefix,默认32
172.25.254.101/24 dev eth1
172.25.254.102/24 dev eth2 label eth2:1
}
}
4.keepalived 单主架构
4.1 配置环境
后面环境通用
主机 | ip | 服务 |
client | 172.25.254.10 | 客户端 |
keepalived1 | 172.25.254.20 | |
keepalived2 | 172.25.254.30 | </ |