【LVS高可用】Keepalived配置详解
keepalived
1. keepalived概念
Keepalived是一个用于实现高可用性和负载均衡的软件。它基于VRRP协议,可以用于管理多个服务器的故障转移。
2. 功能
- 负载均衡:通过集成LVS(Linux Virtual Server)实现。
- 高可用性:通过VRRP协议实现故障转移。
- 健康检查:对真实服务器进行健康检查,自动移除或恢复节点。
3. VRRP 选举机制
- 优先级:0-255,值越大优先级越高
- 抢占模式:高优先级节点恢复后自动成为Master
- 通告间隔:默认1秒发送一次心跳
4. Nginx + keepalived 高可用配置
一、基础环境
# 共两台服务器 ng-master *1 ng-backup *1ng-master ng-backupvip : 192.168.65.100
# 安装nginx和keepalived
yum install -y nginx keepalived
二、ng-master服务器配置
# 修改ng-master服务器中的keeplaived 配置文件:
vi /etc/keepalived/keepalived.conf
global_defs {# 检测脚本运行的用户script_user root enable_script_security
}
vrrp_script check_nginx {# 检测本机nginx进程是否开启script "/data/keepalived/etc/keepalived/script/chk_nginx_pid.sh" #检测间隔5秒interval 5 # 检测两次失败将实例定义为故障,移除vipfall 2 # 检测一次成功后将状态改为正常(设置不抢占后不会抢占vip)rise 1 # 权重#weig
}
vrrp_instance NGINX {# 主节点为MASTER,备节点BACKUP state MASTER # 需要绑定的网卡,通常该主机的通信网卡interface ens33 # 同一个网络不能和其它vip重复,同一组vip必须相同,可自定义数值virtual_router_id 42# 数值越大优先级越高priority 90 # 设置不抢占模式#nopreempt advert_int 1authentication {# 通过密码授权auth_type PASS auth_pass abc123}track_script {check_nginx}virtual_ipaddress {#VIP地址192.168.65.100 }
}
# 定义check_nginx检测脚本
mkdir -p/data/keepalived/etc/keepalived/script/vim chk_nginx_pid.sh#!/bin/bash
#判断 Nginx 是否存活
countng=`ps -C nginx --no-header | wc -l`
if [ $countng -eq 0 ]; then
#如果不存活则尝试启动 Nginx
#/data/nginx/sbin/nginx -c /etc/nginx.conf
sleep 3
#等待 3 秒后再次获取一次 Nginx 状态
counter=`ps -C nginx --no-header | wc -l`
#再次进行判断,如 Nginx 还不存活则停止 Keepalived,让地址进行漂移
if [ $counter -eq 0 ]; then
systemctl stop keepalived #停用keepalived服务
fi
fi# 添加权限
chmod +x chk_nginx_pid.sh
systemctl start nginx keepalived #使用ip a查看vip地址
ip a
# 配置/etc/hosts DNS映射,调整nginx 配置文件
vim /etc/hosts
# 指向VIP地址
192.168.65.100 www.cat.com vi /usr/local/nginx/conf/nginx.conf
....server {listen 80;server_name www.cat.com;
.....location / {root html;index index.html index.htm;}
....#重启nginx 服务、curl 访问www.cat.com
三、ng-backup服务器配置
# 修改ng-backup服务器中的keeplaived 配置文件:
vi /etc/keepalived/keepalived.conf
global_defs {# 检测脚本运行的用户script_user root enable_script_security
}
vrrp_script check_nginx {# 检测本机nginx进程是否开启script "/data/keepalived/etc/keepalived/script/chk_nginx_pid.sh" #检测间隔5秒interval 5 # 检测两次失败将实例定义为故障,移除vipfall 2 # 检测一次成功后将状态改为正常(设置不抢占后不会抢占vip)rise 1 # 权重#weig
}
vrrp_instance NGINX {# 主节点为MASTER,备节点BACKUP state BACKUP # 需要绑定的网卡,通常该主机的通信网卡interface ens33 # 同一个网络不能和其它vip重复,同一组vip必须相同,可自定义数值virtual_router_id 42# 数值越大优先级越高priority 80 # 设置不抢占模式#nopreempt advert_int 1authentication {# 通过密码授权auth_type PASS auth_pass abc123}track_script {check_nginx}virtual_ipaddress {#VIP地址192.168.65.100 }
}
# 定义check_nginx检测脚本
mkdir -p/data/keepalived/etc/keepalived/script/vim chk_nginx_pid.sh#!/bin/bash
#判断 Nginx 是否存活
countng=`ps -C nginx --no-header | wc -l`
if [ $countng -eq 0 ]; then
#如果不存活则尝试启动 Nginx
#/data/nginx/sbin/nginx -c /etc/nginx.conf
sleep 3
#等待 3 秒后再次获取一次 Nginx 状态
counter=`ps -C nginx --no-header | wc -l`
#再次进行判断,如 Nginx 还不存活则停止 Keepalived,让地址进行漂移
if [ $counter -eq 0 ]; then
systemctl stop keepalived #停用keepalived服务
fi
fi[root@nginx-server script]# chmod +x chk_nginx_pid.sh
# 启动nginx、keepalived服务
systemctl start nginx keepalived #使用ip a查看vip地址
ip a
# 配置/etc/hosts DNS映射,调整nginx 配置文件
vim /etc/hosts
# 指向VIP地址
192.168.65.100 www.cat.com vi /usr/local/nginx/conf/nginx.conf
....server {listen 80;server_name www.cat.com;
.....location / {root html;index index.html index.htm;}
....#重启nginx 服务、curl 访问www.cat.com
四、故障模拟测试
# 关闭nginx-master的nginx 服务,等待keepalived 进行故障切换、vip飘逸
systemctl stop nginx # 查看到vip消失了
ip a #在另一个节点查看ip a,发现vip出现了
ip a#重新curl www.cat.com 发现可以正常访问

