Ubuntu安装keepalive

前言

nginx使用docker部署;keepalived使用传统部署。 准备两台服务器:192.168.1.6 和192.168.1.7

部署keepalived

keepalived可以将多个无状态的单点通过虚拟IP(VIP)漂移的方式搭建成一个高可用服务

官网

下载

这里下载最新的版本V2.2.7:

  • 先决条件-安装基础依赖
  • 复制代码
    #RHEL/CentOS
    yum install curl gcc openssl-devel libnl3-devel net-snmp-devel

    # Ubuntu
    apt-get install curl gcc libssl-dev libnl-3-dev libnl-genl-3-dev libsnmp-dev

    tar -xzvf keepalived-2.2.7.tar.gz

    cd keepalived-2.2.7
    复制代码
./configure --prefix=/usr/local/keepalived-2.2.7 --sysconf=/etc

prefix:keepalived安装位置
sysconf:keepalived配置文件位置,默认/etc

编译

make

安装

sudo make install

配置

创建/etc/keepalived/keepalived.conf配置文件:

主节点(MASTER)的配置:
复制代码

global_defs {
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 1
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100
    }
}
复制代码

子节点(BACKUP)的配置:

复制代码
global_defs {
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 2
    priority 90
    advert_int 1
    nopreemt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100
    }
}
复制代码

解释:

state MASTER 表示该节点为主节点;

virtual_router_id 1 虚拟路由id,取值范围0-255,主节点(MASTER)和子节点(BACKUP)不要设置一致;

interface ens33 指定网卡名称,使用ip addr查看;

advert_int 1 主、子节点心跳频率,单位为秒

mcast_src_ip 192.168.1.6 指定节点的IP地址;

authentication 用户名密码,主节点(MASTER)和子节点(BACKUP)设置一致;

virtual_ipaddress { 192.168.1.100 }虚拟IP(VIP)地址,待会测试就是使用该IP地址访问;最好跟服务器同一个网段;主节点(MASTER)和子节点(BACKUP)设置一致;

添加到系统服务
创建 keepalived.service 文件
复制代码
[Unit]
Description=Keepalived
After=network.target

[Service]
ExecStart=/usr/local/keepalived-2.2.7/sbin/keepalived -D
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
Type=forking

[Install]
WantedBy=multi-user.target
复制代码
请确保将 ExecStart 的路径 /usr/local/keepalived-2.2.7/sbin/keepalived 替换为你 Keepalived 实际安装的路径
将创建的 keepalived.service 文件移动到 /etc/systemd/system/ 目录中:
sudo mv keepalived.service /etc/systemd/system/

重新加载 systemd 配置

sudo systemctl daemon-reload

启动 Keepalived 服务

sudo systemctl start keepalived

重启

systemctl restart keepalived  

停止

systemctl stop keepalived  

查看运行状态

systemctl status keepalived

开机自启

systemctl enable keepalived

 

主节点和子节点都启动keepalived通过VIP访问,默认访问到主节点

检测Nginx状态

设置检测Nginx状态防止一个NGINX不可用导致整个keepalive不可用

编写脚本,通过脚本来检测nginx的启用状态,nginx停止了则尝试重启nginx,若重启失败则停止keepalived

创建/etc/keepalived/nginx_check.sh脚本:

复制代码
#!/bin/bash

A=$(docker inspect --format='{{.State.Status}}' keep-nginx)

if [ "$A" == "exited" ]; then
    echo "nginx死掉了!正在重启"
    docker restart keep-nginx
    echo "重启完成,检测重启结果...."
    sleep 4
    B=$(docker inspect --format='{{.State.Status}}' keep-nginx)
    if [ "$B" == "exited" ]; then
        echo "nginx重启失败!正在停止keepalived...."
        systemctl stop keepalived
        echo "keepalived停止成功!"
    else
        echo "nginx重启成功!"
    fi
else
    echo "nginx正常运行!"
fi
复制代码

A=$(docker inspect --format='{{.State.Status}}' keep-nginx) 使用 docker inspect 命令获取名为 "keep-nginx" 的容器的状态,并将其赋值给变量 A

假设你的 Docker 容器名称为 "keep-nginx",请根据你实际的容器名称进行调整

修改nginx_check.sh权限

chmod +x nginx_check.sh

修改keepalived.conf配置文件

主节点(MASTER)的配置:

复制代码
global_defs {
   router_id LVS_DEVEL
}

vrrp_script chk_nginx {
   script "/etc/keepalived/nginx_check.sh"
   interval 2
   weight -20
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 1
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100
    }
    
    track_script {
        chk_nginx 
   }
}
复制代码

vrrp_script chk_nginx定义一个脚本名为chk_nginx, track_script 用于定义跟踪脚本

子节点(BACKUP)的配置:

复制代码
global_defs {
   router_id LVS_DEVEL
}

vrrp_script chk_nginx {
   script "/etc/keepalived/nginx_check.sh"
   interval 2
   weight -20
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 2
    priority 90
    advert_int 1
    nopreemt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        chk_nginx 
   }
}
复制代码

重启主、子节点的keepalived

 

 

 

posted @   Mr沈  阅读(951)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示

目录