理论部分
总结比较重要的点,万一面试的时候问道某个理论点了呢。尤其是Keepalived和VRRP工作原理,玩意面试问你个说说Keepalived是怎么工作的,这不就是理论部分了嘛,不过不面试也应该知道。
Keepalived介绍
- Keepalived软件起初是为管理及监控LVS集群中各节点状态而设计的,后来加入了VRRP功能,可以为其他服务解决高可用问题。
- Keepalived软件主要通过VRRP协议实现高可用功能。
- VRRP协议是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,目的是为解决静态路由单点故障。
- 官方网站:http://www.keepalived.org
Keepalived服务重要功能
- 管理LVS负载均衡软件
- 实现对LVS集群节点健康检查功能(healthcheck)
- 作为系统网络服务的高可用功能(failover)
Keepalived高可用故障切换转移原理
Keepalived高可用服务通过VRRP来实现故障切换转移。
VRRP协议工作原理
- VRRP协议是Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,目的是为解决静态路由单点故障。
- VRRP通过竞选协议机制来决定路有任务运行在哪台主机上。
- VRRP用IP多播方式(默认多播地址224.0.0.18)实现高可用对之间通信的。
- 工作时主节点向备节点发包,当某时刻备节点接收不到数据包的时候,会启动接管程序接管主节点资源。
- 备节点可以有多个,通过优先级竞选,但在工作中通常还是一对居多。
Keepalived服务工作原理
- Keepalived高可用服务通过VRRP协议进行通讯,通过竞选机制确定主备。
- 工作时主节点优先获得资源,备节点等待,当主节点出现故障时,备节点主动接管主节点资源,继续对外提供服务。
- 主节点向备节点发送VRRP广播包,告诉备节点自己的存活,当备节点接收不到来自主节点的广播包时,就会主动接管资源,继续提供服务,接管速度最快可以小于1秒。
实践部分
实践部分从Keepalived的搭建、配置文件、高可能配置上说明。
环境搭建及讲解
环境搭建
这里先用一台主机搭建Keepalived服务
- 环境准备
cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) uname -r 3.10.0-693.el7.x86_64
- 安装Keepalived服务(采用yum安装方式)
yum -y install keepalived
- 启动服务及查看状态(默认启动三个进程三个VIP)
systemctl start keepalived ps -ef | grep keepalived | grep -v grep root 1662 1 0 09:53 ? 00:00:00 /usr/sbin/keepalived -D root 1663 1662 0 09:53 ? 00:00:00 /usr/sbin/keepalived -D root 1664 1662 0 09:53 ? 00:00:00 /usr/sbin/keepalived -D
- 关闭服务
systemctl stop keepalived
配置文件说明
yum安装的keepalived版本为v1.3.5,如果想要更新的版本甚至2.x版本的话请使用编译安装
Keepalived服务高可用功能的配置文件包含两个重要模块:全局定义部分和VRRP实例定义区块部分
yum安装的配置文件位置为/etc/keepalived/keepalived.conf
这部分内容为全局定义模块:
1 ! Configuration File for keepalived 2 3 global_defs { 4 notification_email { 5 acassen@firewall.loc 6 failover@firewall.loc 7 sysadmin@firewall.loc 8 } 9 notification_email_from Alexandre.Cassen@firewall.loc 10 smtp_server 192.168.200.1 11 smtp_connect_timeout 30 12 router_id LVS_DEVEL 13 vrrp_skip_check_adv_addr 14 vrrp_strict 15 vrrp_garp_interval 0 16 vrrp_gna_interval 0 17 }
以上内容含义分别为:
- 第一行:注释,定义这个keepalived服务配置文件
- 第四~八行:定义服务故障报警的邮箱地址(基本不用)
- 第九行:指定邮箱的发件人
- 第十行:指定发送邮箱的SMTP服务区
- 第十一行:连接SMTP的超时时间
第十二行:Keepalived的服务标识,同一局域网,标识唯一
第十三行:检查收到的 VRRP 广告中的所有地址
第十四行:强制执行严格的 VRRP 协议合规性
第十五行:接口上发送的免费 ARP 消息之间的延迟
第十六行:在接口上发送的未经请求的 NA 消息之间的延迟
这部分内容为VRRP实例定义区块:
19 vrrp_instance VI_1 { 20 state MASTER 21 interface eth0 22 virtual_router_id 51 23 priority 100 24 advert_int 1 25 authentication { 26 auth_type PASS 27 auth_pass 1111 28 } 29 virtual_ipaddress { 30 192.168.200.16 31 192.168.200.17 32 192.168.200.18 33 } 34 }
以上内容含义分别为:
- 第十九行:定义这是一个vrrp_instance实例,名字为VI_1
- 第二十行:表示角色状态为MASTER,备机为BACKUP
- 第二十一行:表示对外提供服务的网络端口,注意多网卡时要选对网卡
- 第二十二行:虚拟路由ID标识,一个高可用集群中标识相同
- 第而十三行:优先级,数字越大优先级越高
- 第二十四行:MASTER与BACKUP之间通信检查的时间间隔,默认1秒
- 第二十五~八行:权限认证配置,一个实例中主备认证相同,密码建议4位数字
- 第二十九~三十三行:定义虚拟ip,可以有多个,最好指明子网掩码和绑定网卡
更多配置说明请访问官方文档地址:https://www.keepalived.org/manpage.html
Keepalived服务单实例配置
- 准备两台装着相同Keepalived服务的主机,安装方式上面有
- lb01主机上的配置(MASTER)
! Configuration File for keepalived global_defs { router_id lb01 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.100.100/24 dev eth0 label eth0:3 } }
- lb02主机配置,由于配置类似,只说不同点(BACKUP)
4 router_id lb02 8 state BACKUP 11 priority 50
- 两台主机启动服务
systemctl start keepalived
- 此时MASTER节点能看到VIP,BACKUP节点看不到为正常
inet 192.168.100.100/24 scope global eth0:3
- 测试:关闭MASTER节点服务,VIP是否漂移到BACKUP节点
- 当MASTER节点恢复后,VIP会重新回到主节点
关于Keepalived“脑裂”问题
脑裂一般是因为某些原因两台高可用服务器无法检测对方的心跳消息,各自取得资源及服务的所有权,同时运行服务。这样导致ip或服务在两端同时存在而发生冲突。
可能导致脑裂的原因:
- 心跳链路故障,无法正常通信
- 开启防火墙导致心跳消息拦截
- 配置信息不正确
- 其他
常用解决方案:
- 同时使用串行电缆和以太网电缆连接,同时使用两条心跳线
- 做好对脑裂的监控报警
- 检测到脑裂问题强行关闭一个心跳节点
Keepalived服务双实例双主模式
基于单实例的环境,进行配置双实例。
- lb01配置文件修改
! Configuration File for keepalived global_defs { router_id lb01 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.100.100/24 dev eth0 label eth0:3 } } vrrp_instance VI_2 { state BACKUP interface eth0 virtual_router_id 52 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.100.150/24 dev eth0 label eth0:4 } }
- lb02配置文件修改:
! Configuration File for keepalived global_defs { router_id lb02 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.100.100/24 dev eth0 label eth0:3 } } vrrp_instance VI_2 { state MASTER interface eth0 virtual_router_id 52 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.100.150/24 dev eth0 label eth0:4 } }
- 两台主机重启keepalived服务,然后观察VIP状态
- 正常情况下双主存活如下图:
- 模拟故障,当其中一个节点关闭服务后,VIP变化(关闭lb02节点服务)
- 可以发现,故障主机的VIP会漂向可用节点上继续工作,不影响业务,当故障节点恢复后进行重新选举后VIP会回到优先级高的节点上工作。
Keepalived配合其他如Nginx、LVS、haproxy等软件工作
这部分内容后续会单独写出相应的文章,到时候会把其他文章的链接放在这里形成一整套的内容集合,大家可以关注。
对于keepalived服务高可用部分的单独讲解就先到这了。