keepalived概述
keepalived软件就是通过vrrp协议来实现高可用功能。
VRRP通信原理
VRRP就是虚拟路由冗余协议,它的出现就是为了解决静态路由的单点故障。
VRRP是通过一种竞选一种协议机制来将路由交个某台VRRP路由器。
VRRP 用IP多播的方式(多播地址224.0.0.18)实现高可用之间的通信工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管主节点的资源,备节点可以有多个,通过优先级来进行竞选,但一般keepalived系统运维工作时对VRRP使用加密协议加密数据,但keepalived官方目前还是推荐用明文的方式认证类型和密码。
keepalived的体系,模块及作用
故障自动切换(failover)
实现LVS集群中节点健康检查
节点服务器高可用性(HA)、
keepalived体系架构中主要有三个模块,分别是core、check和vrrp。
core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
vrrp模块:是来实现VRRP协议的。
check模块:负责健康检查,常见的方式有端口检查及URL检查。
keepalived的工作原理
keepalived高可用之间是通过VRRP进行通信,VRRP是通过竞选的来确定主备,主优先级高于备,因此,工作时主优先获得所有资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点资源,然后顶替主节点对外提供服务。
keepalived服务之间,只有作为主的服务器一直发送VRRP广播包,告诉备我还活着,此时备不会去抢占主,当主不可用的时候,即备要监听不到主发送的广播包时,它就会启动相关服务来去接管资源,保证业务的连续性,接管速度最快小于1秒。
脑裂
在高可用( HA )系统中,当联系 2 个节点的 “ 心跳线 ” 断开时,本来为一整体、动作协调的 HA 系统, 就分裂成为 2 个独立的个体。 由于相互失去了联系,都以为是对方出了故障。两个节点上的 HA 软件会争抢 “ 共享资源 ” 、争起 “ 应用服务 ” ,就会发生严重后果。共享资源被瓜分、两边 “ 服务 ” 都起不来了;或者两边“ 服务 ” 都起来了,但同时读写 “ 共享存储 ” ,导致数据损坏。
实例
1.配置负载调度器(主、备相同)
systemctl stop firewalld.service
setenforce 0
yum -y install ipvsadm keepalived
modprobe ip_vs
#配置keeplived
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
配置vip(虚拟IP)
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yesifcon
IPADDR=192.168.10.188
NETMASK=255.255.255.255
systemctl restart network
ifup ens33:0
#启动 ipvsadm 服务
systemctl start ipvsadm
ipvsadm -C
ipvsadm -A -t 192.168.11.180:80 -s rr
ipvsadm -a -t 192.168.11.180:80 -r 192.168.11.33:80 -g
ipvsadm -a -t 192.168.11.180:80 -r 192.168.11.11:80 -g
ipvsadm -ln
ipvsadm-save > /etc/sysconfig/ipvsadm
调整 proc 响应参数,关闭Linux 内核的重定向参数响应
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
2、配置节点服务器
#配置vip
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.188
NETMASK=255.255.255.255
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
3.测试验证
在客户端访问 http://192.168.11.180/