【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 *1
  ng-master 
  ng-backup
  vip : 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		 
    # 检测两次失败将实例定义为故障,移除vip
    fall 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 1
    authentication {
        # 通过密码授权
        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		 
    # 检测两次失败将实例定义为故障,移除vip
    fall 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 1
    authentication {
        # 通过密码授权
        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 发现可以正常访问
相关推荐
邪恶喵喵2 小时前
集群和LVS-NAT模式
lvs
xingyue_S1 天前
LVS负载均衡群集(一) -- NAT模式
运维·负载均衡·lvs
zz-zjx2 天前
LVS三种模式及调度算法解析
网络·lvs
weixin_537765803 天前
【负载均衡】LVS原理与配置
服务器·负载均衡·lvs
初学者_xuan8 天前
零基础新手小白快速了解掌握服务集群与自动化运维(十六)集群部署模块——LVS-DR&TUN模式配置
运维·自动化·lvs
zz-zjx8 天前
云原生LVS+Keepalived高可用方案(二)
开发语言·php·lvs
zz-zjx8 天前
LVS/IPVS与Keepalived在云原生环境中的深度学习与实践(一)
运维·lvs
ZYMFZ12 天前
LVS 负载
lvs
哦你看看12 天前
LVS-NAT、DR、TUN模式配置
lvs