在Linux系统中配置高可用的容器网络,核心目标是消除网络层面的单点故障,当主节点出现故障时,备用节点能自动接管网络流量,保证容器服务不中断。整个方案基于keepalived实现虚拟IP的漂移,结合docker的自定义网络让容器绑定到虚拟IP上,实现网络高可用。

环境准备
需要准备两台Linux服务器,系统版本建议为CentOS 7及以上或者Ubuntu 18.04及以上,两台服务器需要处于同一局域网内,且网络互通。同时需要提前安装好docker和keepalived服务,以下是两台服务器的示例信息:
| 节点角色 | IP地址 | 虚拟IP |
|---|---|---|
| 主节点 | 192.168.1.10 | 192.168.1.100 |
| 备用节点 | 192.168.1.11 |
安装依赖服务
安装docker
两台节点都需要安装docker,以CentOS系统为例,执行以下命令完成安装:
# 安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加docker仓库 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装docker yum install -y docker-ce docker-ce-cli containerd.io # 启动docker并设置开机自启 systemctl start docker systemctl enable docker
安装keepalived
同样两台节点都执行安装命令:
yum install -y keepalived
配置keepalived实现虚拟IP漂移
主节点配置
编辑主节点的keepalived配置文件/etc/keepalived/keepalived.conf,内容如下:
global_defs {
router_id node_1 # 节点唯一标识
}
vrrp_instance VI_1 {
state MASTER # 主节点角色
interface eth0 # 绑定的网卡名称,根据实际网卡调整
virtual_router_id 51 # 虚拟路由ID,主备节点需一致
priority 100 # 优先级,主节点高于备用节点
advert_int 1 # 心跳检查间隔,单位秒
authentication {
auth_type PASS
auth_pass 123456 # 认证密码,主备节点需一致
}
virtual_ipaddress {
192.168.1.100/24 # 配置的虚拟IP
}
}
备用节点配置
编辑备用节点的keepalived配置文件,内容如下:
global_defs {
router_id node_2 # 节点唯一标识
}
vrrp_instance VI_1 {
state BACKUP # 备用节点角色
interface eth0 # 绑定的网卡名称,根据实际网卡调整
virtual_router_id 51 # 虚拟路由ID,主备节点需一致
priority 90 # 优先级,低于主节点
advert_int 1 # 心跳检查间隔,单位秒
authentication {
auth_type PASS
auth_pass 123456 # 认证密码,主备节点需一致
}
virtual_ipaddress {
192.168.1.100/24 # 配置的虚拟IP
}
}
启动keepalived服务
两台节点都执行以下命令启动服务并设置开机自启:
systemctl start keepalived systemctl enable keepalived
启动后可以在主节点执行ip addr show eth0命令,查看是否成功绑定虚拟IP 192.168.1.100。此时如果关闭主节点的keepalived服务,虚拟IP会自动漂移到备用节点,实现故障切换。
配置容器网络绑定虚拟IP
为了让容器使用高可用的虚拟IP,需要创建docker自定义网络,将容器接入该网络,并配置端口映射到虚拟IP上。
创建docker自定义网络
两台节点都执行以下命令创建自定义网络:
docker network create --driver=bridge --subnet=172.18.0.0/16 my_net
启动容器并绑定网络
以启动nginx容器为例,执行以下命令:
# 启动nginx容器,接入自定义网络 docker run -d --name nginx_server --network my_net -p 192.168.1.100:80:80 nginx:latest
此时访问虚拟IP 192.168.1.100的80端口,就能访问到nginx服务。当主节点故障,虚拟IP漂移到备用节点后,备用节点上同样运行着绑定该虚拟IP的容器,服务不会中断。
注意事项
- 两台节点的网卡名称需要保持一致,或者根据实际网卡修改keepalived配置中的interface参数。
- keepalived的优先级设置需要合理,主节点优先级要高于备用节点,避免脑裂问题。
- 容器的端口映射需要明确指定绑定的IP为虚拟IP,否则默认绑定到所有网卡,可能导致切换异常。
- 建议配置keepalived的健康检查脚本,监控docker服务或者容器状态,当服务异常时主动降低优先级,触发虚拟IP漂移。
健康检查配置示例
可以在keepalived配置中添加健康检查脚本,监控docker服务状态,以下是主节点的补充配置:
# 在vrrp_instance VI_1块中添加以下内容
track_script {
check_docker # 调用健康检查脚本
}
# 在global_defs之后添加脚本定义
vrrp_script check_docker {
script "/usr/bin/systemctl is-active docker > /dev/null" # 检查docker服务是否运行
interval 2 # 检查间隔2秒
weight -20 # 如果检查失败,优先级降低20
}
备用节点也添加相同的健康检查配置,这样当主节点的docker服务异常时,优先级会降低到低于备用节点,虚拟IP自动漂移到备用节点,实现更精准的故障切换。
Linux容器网络高可用keepaliveddocker修改时间:2026-07-18 13:18:35