keepalive
- 一、keepalive简介
- 二、实现步骤
- 1. 环境准备
- 2. 安装 Keepalived
- 3. 配置 Keepalived 双机主备集群架构
- 4. 配置 Nginx
- 5. 启动Keepalived
- 6. 测试高可用性
- 7. 配置keepalived 双主热备集群架构
一、keepalive简介
-
目前互联网主流的实现WEB网站及数据库服务高可用软件包括:
keepalived
、heartbeat
等。
Heartbeat
是比较早期的实现高可用软件,而keepalived
是目前轻量级的管理方便、易用的高可用软件解决方案,得到互联网公司IT人的青睐。 -
Keepalived是一个类似于工作在layer 3, 4 & 7交换机制的软件,Keepalived软件有两种功能,分别是健康检查、VRRP冗余协议,keepalived是模块化设计,不同模块负责不同的功能。
-
Keepalived的
作用
是检测服务器的状态,如果有一台web服务器、Mysql服务器宕机,或工作出现故障,Keepalived将检测到后,会将有故障的web服务器或者Mysql服务器从系统中剔除,当服务器工作正常后Keepalived自动将web、Mysql服务器加入到服务器群中。
keepalived + nginx 实现双机主备高可用:
在使用 Nginx 实现双机主备高可用(HA)架构时,结合 Keepalive,可以有效地提高系统的可靠性和可用性。以下是实现这一架构的基本步骤和要点:
架构概述
-
主备节点:有两台 Nginx 服务器,一台作为主节点,另一台作为备节点。当主节点出现故障时,流量会自动切换到备节点。
-
Keepalived:通过 Keepalived 机制维持主备节点之间的心跳检测,确保在主节点故障时能够及时切换。
二、实现步骤
1. 环境准备
确保两台 Nginx 服务器已经安装并配置好,并且网络可以互通。
2. 安装 Keepalived
在两台服务器上安装 Keepalived,Keepalived 是一种用于实现高可用性的工具,能够通过 VRRP 协议管理主备节点的 IP 地址。
1、下载链接: https://www.keepalived.org/download.html
2、上传后,进行解压
tar -zxvf keepalived-2.0.20.tar.gz
3、先进入Keepalived目录,然后输入配置命令进行配置(--prefix
:指明Keepalived的安装位置,--sysconf
:指明Keepalived配置文件存放位置,必须放在/etc下面,为了后续Keepalived启动关闭不报错)
cd keepalived-2.0.20
./configure --prefix=/usr/local/keepalived --sysconf=/etc
如果出现了下面的错误,运行
yum -y install libnl libnl-devel
yum -y install openssl-devel
4、编译和安装
make && make install
3. 配置 Keepalived 双机主备集群架构
在主节点和备节点上配置 Keepalived。
1、建立check_nginx脚本
如上配置还需要建立check_nginx脚本,用于检查本地Nginx是否存活,如果不存活,则kill keepalived实现切换。其中check_nginx.sh脚本内容如下
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
#判断nginx是否宕机,如果宕机了,尝试重启
if [ $A -eq 0 ]; then
/usr/local/nginx/sbin/nginx
#等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
2、主节点配置(/etc/keepalived/keepalived.conf):
global_defs {
#路由id:当前安装keepalived节点主机的标识符,全局唯一
router_id keep_129
}
vrrp_script check_nginx_alive {
script "/etc/keepalived/check_nginx.sh"
interval 10 #每隔10秒运行上一行的脚本
weight -10 # 如果脚本运行成功,则权重-10
}
vrrp_instance VI_1 {
# 表示的状态,当前的129服务器为nginx的主节点,MASTER/BACKUP
state MASTER
# 当前实例绑定的网卡
interface ens33
# 保证主备节点一致
virtual_router_id 51
# 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
priority 100
# 主备之间同步检查的时间间隔,默认1s
advert_int 1
# 认证授权的密码,防止非法节点的进入
authentication {
auth_type PASS
auth_pass 123456
}
track_script {
check_nginx_alive # 追踪 nginx脚本
}
virtual_ipaddress {
192.168.121.120
}
}
3、备节点配置(/etc/keepalived/keepalived.conf):
global_defs {
#路由id:当前安装keepalived节点主机的标识符,全局唯一
router_id keep_128
}
vrrp_instance VI_1 {
# 表示的状态,当前的128服务器为nginx的主节点,MASTER/BACKUP
state BACKUP
# 当前实例绑定的网卡
interface ens33
# 保证主备节点一致
virtual_router_id 51
# 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
priority 80
# 主备之间同步检查的时间间隔,默认1s
advert_int 1
# 认证授权的密码,防止非法节点的进入
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.121.120
}
}
4. 配置 Nginx
在两台 Nginx 上配置相同的站点,以确保在主节点故障时备节点可以无缝接管。
示例 Nginx 配置(/etc/nginx/nginx.conf):
http {
upstream backend {
server 127.0.0.1:8080; # 假设应用运行在本地的8080端口
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
}
}
}
访问原ip
5. 启动Keepalived
cd /usr/local/keepalived/sbin/
# 启动命令
./keepalived
6. 测试高可用性
- 确保主节点正常工作,访问虚拟 IP 地址(192.168.121.120)。
- 停止主节点上的 Nginx 或 Keepalived,检查流量是否自动切换到备节点。
- 重新启动主节点,确认其恢复后是否接管虚拟 IP 地址。
访问虚拟ip 192.168.121.120
7. 配置keepalived 双主热备集群架构
Nginx+keepalived主备模式,始终存在一台服务器处于空闲状态,如何更好的把两台服务器利用起来呢,可以借助Nginx+keepalived双主架构来实现,如图23-2所示,将架构改成双主架构,也即同时两台对外两个VIP地址,同时接收用户的请求。
1、192.168.2.128的keepalived.conf配置文件代码:
global_defs {
#路由id:当前安装keepalived节点主机的标识符,全局唯一
router_id keep_128
}
vrrp_instance VI_1 {
# 表示的状态,当前的128服务器为nginx的主节点,MASTER/BACKUP
state MASTER
# 当前实例绑定的网卡
interface ens33
# 保证主备节点一致
virtual_router_id 51
# 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
priority 100
# 主备之间同步检查的时间间隔,默认1s
advert_int 1
# 认证授权的密码,防止非法节点的进入
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.120
}
}
vrrp_instance VI_2 {
# 表示的状态,当前的128服务器为nginx的主节点,MASTER/BACKUP
state BACKUP
# 当前实例绑定的网卡
interface ens33
# 保证主备节点一致
virtual_router_id 52
# 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
priority 80
# 主备之间同步检查的时间间隔,默认1s
advert_int 1
# 认证授权的密码,防止非法节点的进入
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.121
}
}
2、192.168.2.129的keepalived.conf配置文件代码:
! Configuration File for keepalived
global_defs {
#路由id:当前安装keepalived节点主机的标识符,全局唯一
router_id keep_129
}
vrrp_instance VI_1 {
# 表示的状态,当前的129服务器为nginx的主节点,MASTER/BACKUP
state BACKUP
# 当前实例绑定的网卡
interface ens33
# 保证主备节点一致
virtual_router_id 51
# 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
priority 80
# 主备之间同步检查的时间间隔,默认1s
advert_int 1
# 认证授权的密码,防止非法节点的进入
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.120
}
}
vrrp_instance VI_2 {
# 表示的状态,当前的129服务器为nginx的主节点,MASTER/BACKUP
state MASTER
# 当前实例绑定的网卡
interface ens33
# 保证主备节点一致
virtual_router_id 52
# 优先级/权重,谁的优先级高,在MASTER挂掉以后,就能成为MASTER
priority 100
# 主备之间同步检查的时间间隔,默认1s
advert_int 1
# 认证授权的密码,防止非法节点的进入
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.121
}
}
注意点:
- Keepalived主配置文件必须设置不同的VRRP名称,同时优先级和VIP设置也各不相同;
- Nginx网站总访问量为两台Nginx服务器之和,可以写脚本自动统计访问量;
- 两台Nginx为Master,存在两个VIP地址,用户从外网访问VIP,
需配置域名映射到两个VIP上方
。 - 通过外网DNS映射不同VIP的方法也称为DNS负载均衡模式;