【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 发现可以正常访问
相关推荐
小宇的天下16 小时前
Calibre nmDRC 高级边缘处理与输出控制(17)
linux·运维·lvs
小宇的天下3 天前
Calibre DESIGNrev DRC/LVS启动和准备文件(10-2)
linux·运维·lvs
yunson_Liu5 天前
EC2创建逻辑卷lvs
lvs
yunson_Liu5 天前
分别从横向和纵向两种方法扩充lvs空间
lvs
yunson_Liu5 天前
彻底删除逻辑卷lvs
lvs
Hui Baby6 天前
LVS+Nginx实现高负载均衡框架(四层负载LVS+七层应用负载Nginx)
nginx·负载均衡·lvs
rain bye bye6 天前
calibre lvs rule 的更改(添加器件)
lvs
云和数据.ChenGuang11 天前
F5 Big-IP 和 LVS负载均衡.运维免费技术教程
运维·负载均衡·lvs·运维工程师·运维技术·数据库运维工程师·运维教程
CrazyClaz12 天前
LVS:Linux Virtual Server
lvs
Red丶哞12 天前
LVS+Keepalived+HAProxy
lvs·keepalived·haproxy