docker搭建keepalived双机热备

docker-compose.yaml文件内容如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
keepalived:
    image: openeuler/keepalived:latest
    container_name: keepalived
    restart: always
    network_mode: host
    cap_add:
      - NET_ADMIN  # 需要网络管理权限
      - NET_BROADCAST
      - NET_RAW
    volumes:
      - /data/docker/keepalived/conf:/etc/keepalived
    command: keepalived -f /etc/keepalived/keepalived.conf --dont-fork --log-console --log-detail

keepalived.conf 配置文件如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
vrrp_script chk_nginx {
    script "/etc/keepalived/check.sh"  # Nginx检测脚本路径
    interval 2                               # 检测间隔(秒)
    weight -20                               # 检测失败时优先级降低20
    fall 2                                   # 连续2次失败才切换状态
    rise 1                                   # 1次成功即恢复状态
}

vrrp_instance VI_1 {
    state BACKUP        # 初始状态,主节点设为 MASTER,备节点设为BACKUP
    interface enp125s0f0      # 网卡名,可通过 ip a 命令查看实际网卡
    virtual_router_id 51    # 路由 ID,取值 0 - 255,主备节点需相同
    priority 90        # 优先级,主节点数值要高于备节点
    advert_int 1        # 心跳间隔,单位为秒

    authentication {
        auth_type PASS  # 认证类型,采用密码认证
        auth_pass Maxvision # 主备节点需设置相同密码
    }

    track_script {
        chk_nginx  # 关联Nginx检测脚本
    }

    virtual_ipaddress {
        172.16.2.16/24 # VIP(虚拟 IP ),子网掩码与物理 IP 保持一致
    }
}

check.sh脚本如下

1
2
3
4
5
6
7
8
9
#!/bin/bash
# Nginx健康检查脚本

# 请求检查
if ! curl -s --head --request GET http://127.0.0.1:8085/ | grep "200 OK" > /dev/null; then
    exit 1  # 无法访问,返回失败
fi

exit 0  # 一切正常
使用 Hugo 构建
主题 StackJimmy 设计