Kubernetes 实战:基于 StatefulSet 构建 MySQL 主从集群(GTID + 自动复制) 📅 发布时间:2026/7/12 3:21:39 👁️ 浏览次数: K8s 实战:用 StatefulSet 搭建 MySQL 主从集群(GTID + 自动同步)在生产环境中,MySQL 主从复制是实现数据高可用和读写分离的常见方案。在 Kubernetes 中部署有状态应用,首选控制器便是StatefulSet。它能为每个 Pod 提供稳定的网络标识和独立的持久化存储,非常适合数据库这类有状态服务。本文将带领你一步步在 Kubernetes 上,利用 StatefulSet 搭建一套基于GTID的 MySQL 主从集群,并实现从库自动同步。你将学会:使用 ConfigMap 管理 MySQL 配置和初始化脚本使用 Secret 保存数据库密码创建 Headless Service 为 StatefulSet 提供稳定的网络标识编写 StatefulSet YAML,动态设置 server-id 并自动配置主从复制验证集群同步状态准备工作一个可用的 Kubernetes 集群(版本 1.18+)已配置默认 StorageClass 或准备使用特定 StorageClasskubectl命令行工具已配置好集群访问权限基本了解 MySQL 主从复制和 GTID 概念1. 创建 Namespace我们将所有资源放在独立的命名空间mysql中,方便管理。kubectl create namespace mysql2. 配置 MySQL 配置文件(ConfigMap)我们需要为 MySQL 提供自定义配置,开启 GTID 模式并设置必要的复制参数。同时,我们将把两个初始化脚本也放入 ConfigMap:init.sh:容器启动时运行的脚本,根据 Pod 名称设置唯一的server-id,然后启动 MySQL。init-replication.sh:当 MySQL 数据目录为空(首次启动)时,由 MySQL 官方镜像自动执行的初始化脚本。它负责创建复制用户,并在从库上配置 CHANGE MASTER。创建mysql-configmap.yaml:apiVersion: v1 kind: ConfigMap metadata: name: mysql-config namespace: mysql data: my.cnf: | [mysqld] server-id = 1 # 占位,实际会被 init.sh 动态覆盖 gtid_mode = ON enforce_gtid_consistency = ON log_replica_updates = ON binlog_format = ROW log_bin = mysql-bin relay_log = mysql-relay-bin expire_logs_days = 7 symbolic-links = 0 init.sh: | #!/bin/bash set -e # 从 Pod 主机名中提取索引(例如 mysql-0 → 0) HOSTNAME=$(hostname) INDEX=${HOSTNAME##*-} # 生成 server-id (索引+1,确保唯一) SERVER_ID=$((INDEX + 1)) # 将 server-id 写入独立的配置文件 cat /etc/mysql/conf.d/server-id.cnf EOF [mysqld] server-id = ${SERVER_ID} EOF echo "Generated server-id = ${SERVER_ID} for pod ${HOSTNAME}" # 调用官方 entrypoint 启动 MySQL,并传递所有参数 exec /usr/local/bin/docker-entrypoint.sh "$@" init-replication.sh: | #!/bin/bash set -e # 从主机名获取 Pod 索引 HOSTNAME=$(hostname) INDEX=${HOSTNAME##*-} # 获取密码(通过环境变量传入) MYSQL_ROOT_PASSWORD="${MYSQL_ROOT_PASSWORD}" REPL_USER="${REPL_USER}" REPL_PASSWORD="${REPL_PASSWORD}" if [ "$INDEX" = "0" ]; then # 主库 (mysql-0):创建复制用户 echo "Primary node: creating replication user..." mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -EOSQL CREATE USER IF NOT EXISTS '$REPL_USER'@'%' IDENTIFIED BY '$REPL_PASSWO
Bootstrap5 容器 Bootstrap5 容器 Bootstrap 是一个流行的前端框架,它可以帮助开发者快速构建响应式、移动优先的网站和应用程序。Bootstrap5 是 Bootstrap 的最新版本,它带来了许多新的特性和改进。本文将详细介绍 Bootstrap5 中的容器(Container)组件,帮助开发者更好地理解和应用这一功… 2026/7/11 22:39:42
免费智慧校园系统平台_智慧教务排课选课系统_智慧校园解决方案 ✅作者简介:合肥自友科技 📌核心产品:智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多… 2026/5/17 4:51:11
构建未来教育新生态:智慧校园一体化平台方案关键模块建设浅析 ✅作者简介:合肥自友科技 📌核心产品:智慧校园一体化平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员… 2026/5/17 4:51:11
【RAG工程化天花板】:基于LangChain v0.1.18+LlamaIndex 0.10.5双框架对比,独家披露92%团队忽略的缓存穿透防护设计 更多请点击: https://codechina.net 第一章:RAG工程化落地的核心挑战与缓存穿透本质剖析 在大规模RAG(Retrieval-Augmented Generation)系统上线过程中,工程团队普遍遭遇响应延迟陡增、向量数据库QPS异常飙升、LLM服… 2026/7/12 3:18:24
机器人顶会ICRA/IROS 2025投稿指南:从RA-L到主会的3种路径与避坑要点 机器人顶会ICRA/IROS 2025投稿指南:从RA-L到主会的3种路径与避坑要点在机器人研究领域,ICRA(国际机器人与自动化会议)和IROS(智能机器人与系统国际会议)作为IEEE RAS旗下的两大旗舰会议,每年吸引… 2026/7/12 3:16:23
选校前必看:上饶电脑培训会不会是骗人的?避坑指南 避坑核心速览不少上饶本地用户在寻找电脑培训服务时,都会遇到机构资质不明、课程内容与宣传不符、收费不透明、学完无法适配岗位需求等问题,甚至有用户遭遇过虚假宣传、缴费后机构跑路的情况。本文梳理了上饶电脑培训的避坑判断维度,客观介绍… 2026/7/12 3:14:23
ESP-WIFI-MESH 自组网实战:3节点树状拓扑搭建与数据包收发测试 ESP-WIFI-MESH 自组网实战:3节点树状拓扑搭建与数据包收发测试在物联网设备快速普及的今天,传统星型Wi-Fi网络的局限性日益凸显。当我们需要在大型仓库、智能农场或复杂建筑中部署设备时,单一路由器的覆盖范围往往难以满足需求。ESP-WIFI-MES… 2026/7/12 3:14:23
Z变换与拉普拉斯变换:初/终值定理的4点核心差异对比 Z变换与拉普拉斯变换:初/终值定理的4点核心差异对比 在信号与系统分析领域,Z变换和拉普拉斯变换分别作为离散时间系统和连续时间系统的重要数学工具,其初值定理和终值定理为工程师提供了直接获取系统初始状态和稳态响应的便捷途径。尽管两者在… 2026/7/12 3:14:23
ACL 规则设计进阶:5个易错点分析与通配符掩码精讲 ACL规则设计进阶:5个易错点分析与通配符掩码精讲1. 通配符掩码的深度解析与实战技巧在网络设备配置中,通配符掩码(Wildcard Mask)是ACL规则设计的核心要素之一,但也是最容易被误解的概念。与子网掩码不同,通… 2026/7/12 3:12:22
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/12 0:01:13
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/12 0:01:13
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/12 0:03:14
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/12 0:01:13
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/12 0:01:13
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/12 0:03:14