一 . keepalived简介
keepalived是什么?
keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。
keepalived工作原理
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master(主)和多个backup(备份),master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播(224.0.0.18),当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级(priority)来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core(核心)、check(检测)和vrrp(虚拟路由冗余协议)。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件(keepalived.conf)的加载和解析。check负责健康检查,包括常见的各种检查方式(TCP、脚本检测进程状态等)。vrrp模块是来实现VRRP协议的。
keepalived的常见组合:
keepalived+LVS
keepalived+nginx
keepalived+mysql-proxy
keepalived+mycat
keepalived+LVS
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
二 . keepalived+LVS\DR的搭建
实验拓扑图
实验准备
客户端/服务器 | IP地址 |
Client | 192.168.11.1 |
Director master (node11) |
192.168.11.11/24 |
Director Backup (node12) | 192.168.11.12/24 |
Real Server (node13) | 192.168.11.13/24 |
Real Server (node14) | 192.168.11.14/24 |
四台服务器均关闭防火墙和selinux
systemctl stop firewalld #关闭防火墙
systemctl status firrewalld #查看防火墙
setenforce 0 #关闭selinux
getenforce #查看selinux是否关闭
服务部署流程
首先简单部署后端服务器(real server) , 后端web服务器可以是apache , nginx 等服务
在node13和node14上部署apache服务 , 并设置主页
node13(192.168.11.13)上的操作
yum install -y httpd #用yum安装httpd软件 echo 'www.node13.com' > /var/www/html/index.html #设置apache主页 , node13上做 systemctl start httpd #重启服务 curl 192.168.11.13 #内测httpd服务
vim lo.sh #编辑脚本,内容如下 #!/bin/bash ifconfig lo:1 192.168.11.100 netmask 255.255.255.255 echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce chmod +x lo.sh #给脚本执行权限 bash lo.sh #运行脚本,出现下图片中的IP则表示正确 scp lo.sh [email protected]:/root/ #把lo.sh上传到192.168.11.14的root家目录中
node14(192.168.11.14)上的操作
yum install -y httpd #用yum安装httpd软件 echo 'www.node14.com' > /var/www/html/index.html #设置apache主页 , node13上做 systemctl start httpd #重启服务 curl 192.168.11.13 #内测httpd服务 bash lo.sh
部署Master Director Server 服务(192.168.11.11)
yum install -y keepalived ipvsadm #安装keepalived软件和ipvsadm命令 cd /etc/keepalived cp -av keepalived.conf{,.bak} #备份keepalived主配置文件
vim keepalived.conf #编辑keepalived配置文件 , 如下图
配置文件详解:
配置好keepalived文件定义集群后 , 重启服务 , 查看IP和ipvsadm集群信息
systemctl restart keepalived #重启服务 ip a #此处查看ip信息 , 会多出一个vrrp的虚拟IP(VIP地址)
ipvsadm -Ln #查看ipvsadm集群VIP所对应的后端web服务器IP信息
把配置文件keepalived.conf配置文件传到192.168.11.12备服务器上
[root@node11 keepalived]# scp keepalived.conf [email protected]:/etc/keepalived/
部署Backup Director Server 服务(192.168.11.12)
yum install -y keepalived ipvsadm vim /etc/keepalived/keepalived.conf
systemctl restart keepalived #重启keepalived服务
修改好配置文件重启服务后 , 此时ip a 查看ip地址信息 , 发现VIP地址并为出现 , 原因是主服务器未down掉
配置好主备服务后 , 进行测试:
测试结果每访问3次192.168.11.14 , 再访问一次192.168.11.13 ,(LVS调度算法权重)成功负载均衡进行轮询
此时假装把主服务器192.168.11.11down掉 , 查看192.168.11.12的IP状态 ,并再次执行测试
关闭node11的keepalived服务
查看192.168.11.12上的IP信息 , 发现成功继承VIP:192.168.11.100,并继续承当起负载均衡器 , 实现高可用
再次测试:
抓包分析:
keepalived通过vrrp协议进行组播的作用:是为了竞选出由哪台keepalived主机接管业务(使用VIP的)。谁的priority优先级高(即票数多),谁就有VIP地址。
当master和backup都在运行keepalived服务时:在备服务器node12抓取vrrp包 , 发现是192.168.11.11在不间断发送vrrp组播node11(master)发送的组播信息:
node12(backup)接收的组播信息:
src:192.168.11.11
dest:224.0.0.18
keepalived集群中其他主机接收的组播信息:
src:192.168.11.11
dest:224.0.0.18
当192.168.11.11down掉后 , 192.168.11.12竞选 ,开始由192.168.11.11不间断发送vrrp包变成192.168.11.12开始不间断发送vrrp组播
node12发送的组播信息:
src:192.168.11.12
dest:224.0.0.18
keepalived集群中其他主机接收的组播信息:
src:192.168.11.12
dest:224.0.0.18