news 2026/5/13 19:03:24

Docker容器化高可用架构部署方案(三)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker容器化高可用架构部署方案(三)

02-网络创建

本文档详细介绍如何在所有节点上创建5个Macvlan网络,这些网络将用于隔离不同服务层的通信。

Macvlan网络概述

Macvlan允许容器直接连接到物理网络,每个容器拥有独立的MAC地址,看起来就像网络上的物理机。

本项目网络规划

网络名称子网网关IP范围用途
frontend-net172.20.1.0/24172.20.1.1172.20.1.11-13Nginx-LB、Keepalived VIP
backend-net172.20.2.0/24172.20.2.1172.20.2.11-23PHP服务、PHP-FPM
cache-net172.20.3.0/24172.20.3.1172.20.3.11-33Redis、Sentinel
database-net172.20.4.0/24172.20.4.1172.20.4.11-13MySQL MGR
manage-net172.20.5.0/24172.20.5.1172.20.5.13备份服务(仅Node3)

在所有节点执行

重要前提

在创建Macvlan网络之前,必须确保物理网卡ens33已确认。如果网卡名称不同,请将命令中的ens33替换为实际网卡名称。

创建frontend-net

frontend-net用于Nginx负载均衡器和Keepalived VIP:

docker network create -d macvlan \ --subnet=172.20.1.0/24 \ --gateway=172.20.1.1 \ -o parent=ens33 \ frontend-net

创建backend-net

backend-net用于PHP服务和PHP-FPM:

docker network create -d macvlan \ --subnet=172.20.2.0/24 \ --gateway=172.20.2.1 \ -o parent=ens33 \ backend-net

创建cache-net

cache-net用于Redis主从集群和Sentinel哨兵:

docker network create -d macvlan \ --subnet=172.20.3.0/24 \ --gateway=172.20.3.1 \ -o parent=ens33 \ cache-net

创建database-net

database-net用于MySQL MGR集群:

docker network create -d macvlan \ --subnet=172.20.4.0/24 \ --gateway=172.20.4.1 \ -o parent=ens33 \ database-net

创建manage-net

manage-net用于Node3上的备份服务:

docker network create -d macvlan \ --subnet=172.20.5.0/24 \ --gateway=172.20.5.1 \ -o parent=ens33 \ manage-net

一键创建所有网络

为简化操作,可以一次性创建所有5个网络:

# 创建frontend-net docker network create -d macvlan --subnet=172.20.1.0/24 --gateway=172.20.1.1 -o parent=ens33 frontend-net ​ # 创建backend-net docker network create -d macvlan --subnet=172.20.2.0/24 --gateway=172.20.2.1 -o parent=ens33 backend-net ​ # 创建cache-net docker network create -d macvlan --subnet=172.20.3.0/24 --gateway=172.20.3.1 -o parent=ens33 cache-net ​ # 创建database-net docker network create -d macvlan --subnet=172.20.4.0/24 --gateway=172.20.4.1 -o parent=ens33 database-net ​ # 创建manage-net docker network create -d macvlan --subnet=172.20.5.0/24 --gateway=172.20.5.1 -o parent=ens33 manage-net

Macvlan shim接口配置

Macvlan网络有一个限制:宿主机无法直接与Macvlan网络中的容器通信(除非使用macvlan的bridge模式)。为解决这个问题,需要创建shim接口。

创建shim接口(每网络一个)

# 为frontend-net创建shim ip link add shim-frontend link ens33 type macvlan mode bridge ip addr add 172.20.1.254/24 dev shim-frontend ip link set shim-frontend up ​ # 为backend-net创建shim ip link add shim-backend link ens33 type macvlan mode bridge ip addr add 172.20.2.254/24 dev shim-backend ip link set shim-backend up ​ # 为cache-net创建shim ip link add shim-cache link ens33 type macvlan mode bridge ip addr add 172.20.3.254/24 dev shim-cache ip link set shim-cache up ​ # 为database-net创建shim ip link add shim-database link ens33 type macvlan mode bridge ip addr add 172.20.4.254/24 dev shim-database ip link set shim-database up ​ # 为manage-net创建shim(可选) ip link add shim-manage link ens33 type macvlan mode bridge ip addr add 172.20.5.254/24 dev shim-manage ip link set shim-manage up

永久化shim接口配置

为确保系统重启后shim接口仍然存在,创建systemd服务:

sudo tee /etc/systemd/system/docker-macvlan-shim.service <<'EOF' [Unit] Description=Docker Macvlan Shim Interfaces After=network-online.target Wants=network-online.target ​ [Service] Type=oneshot ExecStart=/bin/bash -c ' ip link add shim-frontend link ens33 type macvlan mode bridge 2>/dev/null || true ip addr add 172.20.1.254/24 dev shim-frontend 2>/dev/null || true ip link set shim-frontend up 2>/dev/null || true ip link add shim-backend link ens33 type macvlan mode bridge 2>/dev/null || true ip addr add 172.20.2.254/24 dev shim-backend 2>/dev/null || true ip link set shim-backend up 2>/dev/null || true ip link add shim-cache link ens33 type macvlan mode bridge 2>/dev/null || true ip addr add 172.20.3.254/24 dev shim-cache 2>/dev/null || true ip link set shim-cache up 2>/dev/null || true ip link add shim-database link ens33 type macvlan mode bridge 2>/dev/null || true ip addr add 172.20.4.254/24 dev shim-database 2>/dev/null || true ip link set shim-database up 2>/dev/null || true ip link add shim-manage link ens33 type macvlan mode bridge 2>/dev/null || true ip addr add 172.20.5.254/24 dev shim-manage 2>/dev/null || true ip link set shim-manage up 2>/dev/null || true ' ExecStop=/bin/bash -c ' ip link del shim-frontend 2>/dev/null || true ip link del shim-backend 2>/dev/null || true ip link del shim-cache 2>/dev/null || true ip link del shim-database 2>/dev/null || true ip link del shim-manage 2>/dev/null || true ' RemainAfterExit=yes ​ [Install] WantedBy=multi-user.target EOF ​ sudo systemctl daemon-reload sudo systemctl enable docker-macvlan-shim.service sudo systemctl start docker-macvlan-shim.service

网络验证

查看已创建的网络

docker network ls

预期输出:

NETWORK ID NAME DRIVER SCOPE xxxxxxxxxxxx bridge bridge local xxxxxxxxxxxx host host local xxxxxxxxxxxx none null local xxxxxxxxxxxx frontend-net macvlan local xxxxxxxxxxxx backend-net macvlan local xxxxxxxxxxxx cache-net macvlan local xxxxxxxxxxxx database-net macvlan local xxxxxxxxxxxx manage-net macvlan local

查看网络详情

docker network inspect frontend-net docker network inspect backend-net docker network inspect cache-net docker network inspect database-net docker network inspect manage-net

验证shim接口

ip addr show | grep shim-

预期输出:

XX: shim-frontend: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP inet 172.20.1.254/24 scope global shim-frontend XX: shim-backend: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP inet 172.20.2.254/24 scope global shim-backend XX: shim-cache: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP inet 172.20.3.254/24 scope global shim-cache XX: shim-database: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP inet 172.20.4.254/24 scope global shim-database XX: shim-manage: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP inet 172.20.5.254/24 scope global shim-manage

测试Macvlan连通性

创建测试容器并验证网络连通:

# 创建测试容器(临时使用) docker run --rm -it --network frontend-net --ip 172.20.1.200 alpine:latest sh # 在容器内测试 ping -c 3 172.20.1.1 # 测试网关 ping -c 3 172.20.1.254 # 测试宿主机shim exit

删除网络

如果需要重新创建网络,先删除旧的:

# 删除所有Macvlan网络 docker network rm frontend-net docker network rm backend-net docker network rm cache-net docker network rm database-net docker network rm manage-net # 删除shim接口 ip link del shim-frontend ip link del shim-backend ip link del shim-cache ip link del shim-database ip link del shim-manage

常见问题

Q1: 创建网络时报错"network already exists"

# 先删除再创建 docker network rm frontend-net docker network create -d macvlan --subnet=172.20.1.0/24 --gateway=172.20.1.1 -o parent=ens33 frontend-net

Q2: 创建网络时报错"invalid parent device"

  • 检查网卡名称是否正确

  • 确认网卡处于UP状态

  • 检查macvlan模块是否已加载

Q3: 容器无法获取IP

  • 检查子网是否与其他网络重叠

  • 确认IP地址没有被占用

  • 检查Docker版本是否支持Macvlan

下一步

完成网络创建后,请继续:

  • 03-目录创建.md - 创建部署目录结构

  • 04-创建配置文件.md - 创建所有配置文件

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/13 19:00:33

Markdown基础功能

原文&#xff1a;Markdown基础语法介绍 | Colin Gretzky的博客 本文介绍 Markdown 笔记格式的基础功能&#xff0c;涵盖核心语法和使用要点&#xff0c;适合初学者快速上手。 Markdown 简介 Markdown 是一种轻量级的标记语言&#xff0c;由 John Gruber 于 2004 年设计。它的核…

作者头像 李华
网站建设 2026/5/13 18:57:15

建筑防烟分区必备:电动挡烟垂壁性能优势与行业应用要点

火灾发生时&#xff0c;有毒高温烟气是造成人员伤亡的主要因素&#xff0c;合理划分防烟分区、有效阻隔烟气扩散&#xff0c;是建筑消防设计的关键内容。电动挡烟垂壁凭借自动化控制、安装灵活、分隔效果稳定、适配各类建筑场景的特点&#xff0c;替代了传统固定式挡烟设施&…

作者头像 李华
网站建设 2026/5/13 18:55:15

常用的AIGC检测工具都有哪些

常用的AIGC检测工具都有哪些&#xff1f; SpeedAI科研小助手 作为国内科研场景适配度最高的AIGC检测与优化工具&#xff0c;SpeedAI科研小助手的检测能力覆盖国内高校主流检测平台逻辑&#xff0c;可精准识别绝大多数大模型生成的中英文内容&#xff0c;对中文内容的检测准确…

作者头像 李华
网站建设 2026/5/13 18:51:37

Koikatu HF Patch终极安装指南:200+插件完整集成与游戏优化教程

Koikatu HF Patch终极安装指南&#xff1a;200插件完整集成与游戏优化教程 【免费下载链接】KK-HF_Patch Automatically translate, uncensor and update Koikatu! and Koikatsu Party! 项目地址: https://gitcode.com/gh_mirrors/kk/KK-HF_Patch Koikatu HF Patch是《K…

作者头像 李华
网站建设 2026/5/13 18:51:35

Dify Webhook插件实战:打通AI工作流与外部系统的自动化桥梁

1. 项目概述&#xff1a;一个为Dify打造的Webhook插件 如果你正在使用Dify构建AI应用&#xff0c;并且已经感受到了它的强大与便捷&#xff0c;那么你很可能也遇到了一个共同的痛点&#xff1a;如何让AI应用与外部世界进行更灵活、更自动化的交互&#xff1f;比如&#xff0c;当…

作者头像 李华