keepalived基于VRRP协议,组件免费,可以解决单点故障,实现高可用HA机制。keepalived可以用于解决Nginx高可用问题。
- 云服务器不采用keepalived,云服务厂商可能不提供虚拟IP服务,可以直接使用云负载均衡服务。
1 keepalived
1.1 VRRP协议与原理
虚拟路由冗余协议 VRRP,是解决内网单机故障的路由协议,构建有多个路由器MASTER BACKUP,采用虚拟IP机制(用户访问虚拟ip,渲染出主节点;当主节点故障,心跳检测到故障,虚拟IP指向备用节点)。
配置高可用主备节点,机器配置需要相同。备用节点配置过低,大量请求进来会瞬间宕机,无法保证高可用。
VRRP原理
VRRP将局域网内的一组路由器划分在一起,称为一个备份组。备份组由一个Master路由器和多个Backup路由器组成,功能上相当于一台虚拟路由器。
VRRP备份组具有以下特点:
- 虚拟路由器具有IP地址,称为虚拟IP地址。局域网内的主机仅需要知道这个虚拟路由器的IP地址,并将其设置为缺省路由的下一跳地址。
- 网络内的主机通过这个虚拟路由器与外部网络进行通信。
- 备份组内的路由器根据优先级,选举出Master路由器,承担网关功能。其他路由器作为Backup路由器,当Master路由器发生故障时,取代Master继续履行网关职责,从而保证网络内的主机不间断地与外部网络进行通信。
2 安装keepalived与配置双机主备
官网下载https://www.keepalived.org/download.html
# 解压缩
cd keepalived-2.0.18/
# 安装依赖
yum -y install libnl libnl-devel
# 初始配置路径
./configure --prefix=/usr/local/keepalived --sysconf=/etc
# 编译,安装
make && make install
- prefix: 安装位置
- sysconf:核心配置文件位置,固定位置。改为其它,启动报错。
配置192.168.233.130/131两台机器的核心配置
global_defs {
# 路由id, 当前安装keepalived节点的主机标识符,保证全局唯一
router_id LVS_130
}
vrrp_instance VI_1 {
# 表示节点是MASTER,还是BACKUP
state MASTER
# 该实例绑定的网卡
interface ens33
# 保证主备节点一致即可
virtual_router_id 51
# 权重,主节点挂掉后,选举出优先级更高的节点作为主节点
priority 100
# 心跳间隔,主备节点之间同步检查时间间隔,默认1s
advert_int 1
# 认证权限密码,防止非法节点进入
authentication {
auth_type PASS
auth_pass 1111
}
# 设置虚拟ip,可以多个
virtual_ipaddress {
192.168.233.120
}
}
- 131节点的配置文件与主节点配置基本一致,需要修改路由id、state改为BACKUP、调低权重。
启动keepalived,查看ip addr可以看到虚拟网卡信息。ps查看进程信息。
inet 192.168.233.120/32 scope global ens33
ps -ef | grep keepalived
将keepalived注册为服务
# 将源码目录下文件拷贝到启动目录
cp init.d/keepalived /etc/init.d/
cp sysconfig/keepalived /etc/sysconfig/
systemctl daemon-reload
systemctl start keepalived.service
当主节点MASTER和备用节点BACKUP同时运行起来,只有MASTER的网卡信息中有虚拟IP。当MASTER宕机(主机keepalived挂掉)时,BACKUP启用,网卡中出现虚拟IP;在MASTER修复重新启动后,运行主机切换为原MASTER。
针对于访问哪台节点,可以监控nginx访问日志:tail access.log -f 。