- keepalived简介
keepalived起初为LVS设计的,用来监控集群系统中各个服务点的状态,解决单点故障。如果某个服务节点出现异常,或工作中出现故障,keepalived将检测到,并将出现故障的服务节点剔除,而在故障节点恢复正常后,又将该节点重新添加到服务器集群中,这些工作全部是自动完成,不需要人工干涉,人工干涉的部分是修复出现故障的节点。
后来,keepalived引入了VRRP的功能,VRRP(虚拟路由器冗余协议)的出现解决了静态路由的单点故障问题。
- VRRP协议与工作原理
VRRP可以将两台或多台物理路由器设备虚拟成一个虚拟路由器,这个虚拟路由器通过一个虚拟IP对外提供服务。在虚拟路由器的内部是多个物理路由器协同工作,且在同一时间只有一个物理路由器在工作,这台工作的物理路由器称为主路由器(处于MASTER状态),其他路由器为备份路由器(处于BACKUP状态)。当主路由器失效时,备份路由器由选举算法重新选举,产生新的主路由器,整个切换过程对用户来说是透明的,几乎不影响用户体验。
- VRRP的工作过程
(1)虚拟路由器中的路由器根据优先级选举出Master。Master路由器通过发送免费ARP报文,将自己的虚拟MAC地址通知给与它连接的设备或者主机,从而承担报文转发任务;
(2)Master路由器周期性发送VRRP报文,以公布其配置信息(优先级等)和工作状况;
(3) 如果Master路由器出现故障,虚拟路由器中的Backup路由器将根据优先级重新选举新的Master;
(4)虚拟路由器状态切换时,Master路由器由一台设备切换为另外一台设备,新的Master路由器只是简单地发送一个携带虚拟路由器的MAC地址和虚拟IP地址信息的免费ARP报文,这样就可以更新与它连接的主机或设备中的ARP相关信息。网络中的主机感知不到Master路由器已经切换为另外一台设备。
(5)Backup路由器的优先级高于Master路由器时,由Backup路由器的工作方式(抢占方式和非抢占方式)决定是否重新选举Master。
- keepalived工作原理
keepalived工作在TCP/IP参考模型的第三、第四和第五层,也就是网络层、传输层和应用层。其运行机制为:
(1)网络层
在网络层中,keepalived通过ICMP协议向服务器集群中的每个节点发送ICMP包,若是某个节点没有返回响应数据包,那么认为该节点发生了故障,keepalived便认为该节点为无效节点,从服务器集群中剔除。第三层的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。
(2)传输层
在传输层中,keepalived利用TCP协议的端口连接和扫描技术判断集群节点是否正常。如,对常见的WEB服务默认的80端口和SSH服务默认的22端口等,keepalived一旦在传输层没有检测到这些端口有响应数据传回,就默认这些端口发生了异常,将这些端口对应的节点强制从服务器集群中删除。
(3)应用层
在应用层中,keepalived的运行方式更加全面化和复杂化,用户可以自定义keepalived的工作方式。
- Nginx+keepalived 主从配置(双机主从热备)
| 用途 | IP |
| MASTER | 192.168.85.133 |
| BACKUP | 192.168.85.132 |
这种方案,需要2台机器:一台主,一台备,但只有一台机器工作,另一台备份机器在主机器不出现故障的时候,永远处于闲置。其拓扑图(网上找来)如图所示。

nginx安装部署
1.安装依赖环境
yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
2.下载安装包
官网下载地址:https://nginx.org/en/download.html
3.解压
tar xzvf nginx-1.21.0.tar.gz
4.配置
cd nginx-1.21.0 #进入该目录下 ./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_ssl_module
5.编译安装
make && make install
6.服务起停
cd /usr/local/nginx/sbin 启动:./nginx 停止:./nginx –s stop 重新加载:./nginx –s reload
7.防火墙关闭
查看防火墙状态:iptables -L 关闭防火墙:systemctl stop firewalld 开启防火墙:systemctl start firewalld
- keepalived安装部署
1.下载安装包
官网下载地址:https://www.keepalived.org/download.html
2.解压
tar zxvf keepalived-1.2.19.tar.gz
3.配置
cd keepalived-1.2.19 ./configure
4.编译
make && make install
5.拷贝系统配置文件至系统etc文件
cp init.d/keepalived /etc/init.d/ cp sysconfig/keepalived /etc/sysconfig/ #注意:找到文件路径,进入该路径下复制文件
6.修改配置
主服务器(MASTER)配置
cat /etc/keepalived/keepalived.conf
... ! Configuration File for keepalived global_defs { router_id LVS_DEVEL script_user root enable_script_security } vrrp_script check_haproxy { script "/etc/keepalived/check_nginx.sh" # 检测脚本路径 interval 3 weight -2 fall 10 rise 2 } vrrp_instance VI_1 { state MASTER # 第一台是MASTER,其他几台master是BACKUP interface ens33 # 本机网卡名 virtual_router_id 51 priority 100 # 权重后一台要比前一台小100,99,98 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.85.113 # 虚拟IP,修改为自己网段中的IP } track_script { check_nginx
# 模块 } }
...
vim /etc/keepalived/check_nginx.sh
...
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
echo "$counter"
if [ "${counter}" = "0" ]; then
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
sleep 2
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
/etc/init.d/keepalived stop
fi
fi
...
启动主服务器keepalived
cd /usr/sbin ./keepalived
查看keepalived的状态
ip addr

备服务器(BACKUP)配置
cat /etc/keepalived/keepalived.conf
...
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
script_user root
enable_script_security
}
vrrp_script check_haproxy {
script "/etc/keepalived/check_nginx.sh" # 检测脚本路径
interval 3
weight -2
fall 10
rise 2
}
vrrp_instance VI_1 {
state BACKUP # 备服务器
interface ens33 # 本机网卡名
virtual_router_id 51
priority 51 # 备服务器要比主服务器小
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.85.113 # 虚拟IP,修改为自己网段中的IP
}
track_script {
check_nginx
# 模块 } }
...
vim /etc/keepalived/check_nginx.sh
...
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
echo "$counter"
if [ "${counter}" = "0" ]; then
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
sleep 2
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
/etc/init.d/keepalived stop
fi
fi
...
启动备服务器keepalived
cd /usr/sbin ./keepalived
查看keepalived的状态
ip addr

浙公网安备 33010602011771号