登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
签到
每天签到奖励2-10圆
导读
排行榜
TG频道
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
VIP申请
VIP网盘
网盘
联系我们
发帖说明
每日签到
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
Docker Swarm Keepalived Operator:高可用集群虚拟 IP ...
Docker Swarm Keepalived Operator:高可用集群虚拟 IP 管理方案
[ 复制链接 ]
判涔
2025-9-28 12:23:19
在生产环境中,服务的高可用性往往是一个必要但复杂的需求。传统的容器化高可用部署面临着不少挑战,今天来介绍一个针对 Docker Swarm 设计的 Keepalived Operator,看看它如何简化虚拟 IP 的管理工作。
传统部署方式的挑战
在 Docker 和 Docker Swarm 环境下,实现高可用通常会遇到以下问题:
原生 Docker 部署的不足
手动配置复杂
:需要在每个节点单独配置 Keepalived
配置文件管理困难
:多节点间配置同步容易出错
缺乏动态感知
:节点变化时需要手动修改所有相关配置
监控分散
:各节点日志和状态检查需要逐一处理
Docker Swarm 原生限制
服务发现局限
:Swarm 内建的负载均衡无法提供固定的外部 IP
故障切换不透明
:依赖外部负载均衡器,增加架构复杂度
跨主机网络复杂
:需要额外配置 overlay 网络和路由规则
Operator 方案的改进
Docker Swarm Keepalived Operator 采用了 Operator 模式来解决这些问题:
自动节点发现
:通过 Docker 标签识别目标节点
配置自动生成
:根据集群状态自动生成 Keepalived 配置
动态服务管理
:节点变化时自动创建或删除服务
集中化监控
:统一的日志和状态管理
架构设计
整个系统采用控制器模式,分为两个主要组件:
控制层(Operator)
运行在 Swarm Manager 节点,负责:
节点监控
:持续监控节点标签和状态变化
服务管理
:根据标签变化创建、更新或删除 Keepalived 服务
配置生成
:自动生成集群拓扑对应的 Keepalived 配置
异常处理
:检测到服务异常时进行恢复
执行层(Keepalived 实例)
分布在标记的工作节点上:
VRRP 协议
:处理虚拟 IP 的选举和切换
健康检查
:监控本地服务状态
故障转移
:在检测到故障时快速切换
这种分层设计的优势是职责分离,便于维护和扩展。
三步完成部署
步骤一:系统环境检查
部署前先确认系统环境,主要是检查内核模块支持:
# 检查是否已加载 ip_vs 模块
lsmod | grep -P '^ip_vs\s'
# 如果没有输出,需要手动加载
echo "modprobe ip_vs" >> /etc/modules
modprobe ip_vs
# 验证加载成功
lsmod | grep ip_vs
复制代码
注意
:ip_vs 模块是 Linux 虚拟服务器的核心模块,Keepalived 需要它来实现负载均衡功能。
步骤二:给节点"贴标签"
这一步是整个方案的核心 —— 通过 Docker 节点标签来告诉 Operator 哪些节点需要参与高可用:
# 基础标签配置:标记参与高可用的节点
docker node update web-01 --label-add keepalived_group=production
docker node update web-02 --label-add keepalived_group=production
docker node update web-03 --label-add keepalived_group=production
复制代码
进阶配置
:如果要精确控制 VRRP 优先级(推荐):
# 数值越高,成为 Master 的概率越大
docker node update web-01 --label-add KEEPALIVED_PRIORITY=102 # 首选主节点
docker node update web-02 --label-add KEEPALIVED_PRIORITY=101 # 备选主节点
docker node update web-03 --label-add KEEPALIVED_PRIORITY=100 # 普通备节点
复制代码
标签说明
:
keepalived_group=production:指定节点所属的高可用组
KEEPALIVED_PRIORITY=102:设置 VRRP 优先级,数值越大优先级越高
步骤三:编写部署配置
创建 keepalived-stack.yaml 配置文件,这是整个部署的"蓝图":
version: '3.8'
services:
keepalived_operator:
image: pubimgs/keepalived-swarm-operator:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- host
deploy:
mode: replicated
replicas: 1
placement:
constraints: [node.role == manager]
environment:
# 必需配置
KEEPALIVED_GROUP: "production"
KEEPALIVED_VIRTUAL_IPS: "192.168.1.100,192.168.1.101"
# 可选配置
KEEPALIVED_INTERFACE: "eth0"
KEEPALIVED_PASSWORD: "MySecurePassword123"
KEEPALIVED_ROUTER_ID: "51"
networks:
host:
external: true
name: host
复制代码
一键部署启动
# 部署 Keepalived Operator
docker stack deploy -c keepalived-stack.yaml keepalived
# 查看部署状态
docker service ls --filter name=keepalived
# 查看 Operator 工作日志
docker service logs -f keepalived_keepalived_operator
复制代码
部署完成后
,Operator 会自动执行以下操作:
发现所有带 keepalived_group=production 标签的节点
为每个节点创建对应的 Keepalived 服务
生成集群配置和节点通信列表
开始持续监控服务状态
进阶使用技巧
多环境部署
在同一个集群中可以通过不同的组标签实现环境隔离:
# 生产环境集群
docker node update prod-01 --label-add keepalived_group=production
docker node update prod-02 --label-add keepalived_group=production
# 测试环境集群
docker node update test-01 --label-add keepalived_group=staging
docker node update test-02 --label-add keepalived_group=staging
# 开发环境集群
docker node update dev-01 --label-add keepalived_group=development
docker node update dev-02 --label-add keepalived_group=development
复制代码
然后部署不同的 Operator 实例,每个管理对应的环境,使用独立的虚拟 IP 段实现隔离。
动态扩缩容
Operator 的一个重要特性是支持动态扩缩容,集群节点变化时无需手动干预:
# 集群扩容:新节点加入高可用组
docker node update new-web-04 --label-add keepalived_group=production
# Operator 会发现新节点,自动创建 Keepalived 服务
# 集群缩容:节点退出高可用组
docker node update old-web-01 --label-rm keepalived_group
# Operator 会自动清理对应的 Keepalived 服务
# 临时维护:暂时移除节点
docker node update web-02 --label-rm keepalived_group
# 维护完成后重新加入
docker node update web-02 --label-add keepalived_group=production
复制代码
整个过程中,其他节点的服务不受影响,虚拟 IP 会自动重新选举。
优先级策略最佳实践
合理的优先级设计能让故障切换更加符合业务预期:
** 按数据中心分层**:
主数据中心
:优先级 110-120(优先承载流量)
同城灾备
:优先级 100-110(次优选择)
异地灾备
:优先级 90-100(最后选择)
** 按性能分层**:
高性能节点
:优先级 110-120
标准节点
:优先级 100-110
低配节点
:优先级 90-100
# 实例:三地三中心部署
docker node update beijing-web-01 --label-add KEEPALIVED_PRIORITY=115 # 主中心
docker node update shanghai-web-01 --label-add KEEPALIVED_PRIORITY=105 # 同城备份
docker node update guangzhou-web-01 --label-add KEEPALIVED_PRIORITY=95 # 异地备份
复制代码
建议
:优先级差距保持 5-10 比较合理,既能体现优先顺序,又避免过度集中。
监控运维
日常状态检查
建立日常巡检习惯,及时发现问题:
# 1. 检查 Operator 运行状态和日志
docker service logs -f keepalived_keepalived_operator
# 2. 查看集群中所有 Keepalived 服务
docker service ls --filter name=keepalived-node
# 3. 检查具体节点服务详情
docker service logs keepalived-node-web-01-1 --tail 50
# 4. 查看服务分布情况
docker service ps $(docker service ls --filter name=keepalived-node -q)
复制代码
虚拟 IP 健康验证
确保虚拟 IP 正常工作的检查清单:
# 基础连通性测试
ping -c 3 192.168.1.100
# 查看虚拟 IP 当前绑定在哪个节点
ip addr show | grep "192.168.1.100"
# 从集群外部测试虚拟 IP 服务
curl -I http://192.168.1.100
# 检查 VRRP 协议状态
docker exec $(docker ps -q -f name=keepalived-node | head -1) ip addr show
复制代码
典型应用场景
场景一:电商网站前端高可用
某电商公司有 3 台 Web 服务器,需要对外提供统一访问入口:
# 步骤 1:节点标签配置
docker node update web-server-01 --label-add keepalived_group=frontend
docker node update web-server-02 --label-add keepalived_group=frontend
docker node update web-server-03 --label-add keepalived_group=frontend
# 步骤 2:优先级设置(主机房优先)
docker node update web-server-01 --label-add KEEPALIVED_PRIORITY=110 # 主机房
docker node update web-server-02 --label-add KEEPALIVED_PRIORITY=105 # 主机房
docker node update web-server-03 --label-add KEEPALIVED_PRIORITY=100 # 备机房
# 步骤 3:部署配置
KEEPALIVED_GROUP: "frontend"
KEEPALIVED_VIRTUAL_IPS: "192.168.1.200" # 用户访问的统一入口
复制代码
效果
:用户始终通过 192.168.1.200 访问服务,任意一台服务器故障都不影响用户访问。
场景二:数据库集群高可用
MySQL 主从集群需要提供统一的写入入口:
# 配置数据库集群节点
docker node update mysql-master --label-add keepalived_group=database
docker node update mysql-master --label-add KEEPALIVED_PRIORITY=120 # 主库最高优先级
docker node update mysql-slave-01 --label-add keepalived_group=database
docker node update mysql-slave-01 --label-add KEEPALIVED_PRIORITY=110 # 首选备库
docker node update mysql-slave-02 --label-add keepalived_group=database
docker node update mysql-slave-02 --label-add KEEPALIVED_PRIORITY=100 # 备选备库
# 部署配置
KEEPALIVED_GROUP: "database"
KEEPALIVED_VIRTUAL_IPS: "192.168.1.210" # 数据库统一写入入口
复制代码
效果
:应用程序连接 192.168.1.210 进行数据库操作,主库故障时自动切换到备库。
场景三:API 网关集群
微服务架构下的 API 网关高可用部署:
# 多地域 API 网关部署
docker node update gateway-beijing-01 --label-add keepalived_group=api-gateway
docker node update gateway-beijing-01 --label-add KEEPALIVED_PRIORITY=115
docker node update gateway-shanghai-01 --label-add keepalived_group=api-gateway
docker node update gateway-shanghai-01 --label-add KEEPALIVED_PRIORITY=105
# 部署配置支持多个虚拟 IP
KEEPALIVED_GROUP: "api-gateway"
KEEPALIVED_VIRTUAL_IPS: "192.168.1.220,192.168.1.221" # 内外网双入口
复制代码
总结
Docker Swarm Keepalived Operator 提供了一种相对简化的高可用部署方案,通过 Operator 模式自动化了传统 Keepalived 的配置和管理工作。
主要优势
与传统部署方式相比:
减少了手动配置工作量
支持集群动态变化
提供统一的管理界面
降低了配置出错的可能性
适用场景
这个方案比较适合:
需要快速部署高可用服务的团队
希望简化 Keepalived 运维工作的场景
Docker Swarm 环境下的虚拟 IP 管理需求
使用建议
在测试环境先熟悉操作流程
了解 VRRP 协议和 Keepalived 的工作原理
根据实际网络环境调整配置参数
建立相应的监控和告警机制
总体来说,这是一个实用的工具,可以在一定程度上简化 Docker Swarm 环境下的高可用部署工作。
相关资源
项目地址
:https://github.com/isqiao/keepalived-docker-swarm-operator
Docker 镜像
:pubimgs/keepalived-swarm-operator:latest
问题反馈
:https://github.com/isqiao/keepalived-docker-swarm-operator/issues
如果这篇文章对你有帮助,别忘了给项目点个 ⭐ Star!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
Docker
Swarm
Keepalived
Operator
高可用
相关帖子
搭建docker虚拟机测试服
容器云后端存储NFS高可用适配
docker-compose部署gitlab
轻量级实时容器Docker查看日志工具实践
Centos7.x系统中Docker安装及简单使用
gitlab-runner 中的 Docker-in-Docker
Centos7安装Docker
PostgreSQL patroni 高可用 4:HAProxy和Keepalived实现读写分离
macOS上优雅运行Docker容器
PostgreSQL pg_auto_failover 高可用 1:pg_auto_failover集群搭建
vip免费申请,1年只需15美金$
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
搭建docker虚拟机测试服
0
876
谲脾
2025-09-28
业界
容器云后端存储NFS高可用适配
0
839
高小雨
2025-09-28
业界
docker-compose部署gitlab
0
925
姥恫
2025-09-28
安全
轻量级实时容器Docker查看日志工具实践
0
151
高小雨
2025-09-28
安全
Centos7.x系统中Docker安装及简单使用
0
274
飧沾
2025-09-29
安全
gitlab-runner 中的 Docker-in-Docker
0
521
锷稠
2025-09-30
安全
Centos7安装Docker
0
627
赴忽
2025-10-01
安全
PostgreSQL patroni 高可用 4:HAProxy和Keepalived实现读写分离
0
106
诉称
2025-10-06
业界
macOS上优雅运行Docker容器
0
785
奄蜊
2025-10-06
安全
PostgreSQL pg_auto_failover 高可用 1:pg_auto_failover集群搭建
0
983
濮阳雅爱
2025-10-09
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
科技
签约作者
程序园优秀签约作者
发帖
判涔
2025-9-28 12:23:19
关注
0
粉丝关注
18
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
富账慕
10013
孙淼淼
9995
匝抽
9986
4
柴古香
9993
5
凌彦慧
9994
6
染悄
9981
7
崔瑜然
9984
8
敖可
9991
9
慢秤
9979
10
迎脾
9979
查看更多