
该镜像提供MariaDB 12.x版本,支持在Kubernetes/Swarm环境下自动生成集群,使用命名卷实现数据持久化。基于MariaDB/Galera文档实现了健壮的引导逻辑,可自动完成集群创建和节点加入操作。集群运行需要etcd实例用于共享节点健康状态数据。
适用于需要高可用MariaDB集群的企业级应用场景,尤其适合:
Kubernetes环境使用
在启动集群前,需定义以下依赖项:root密码、网络负载均衡器和专用etcd键值存储。步骤如下:
创建随机root密码:
bashSECRET=mysql-root-password PW=$(uuidgen | base64) cat >/dev/shm/new.yaml <<EOT --- apiVersion: v1 data: $SECRET: $PW kind: Secret metadata: name: $SECRET namespace: \$K8S_NAMESPACE type: Opaque EOT sekret enc /dev/shm/new.yaml >secrets/$SECRET rm /dev/shm/new.yaml
可使用https://github.com/mozilla/sops%E6%88%96https://github.com/nownabe/sekret%E7%AD%89%E5%B7%A5%E5%85%B7%E7%94%9F%E6%88%90%E5%AF%86%E9%92%A5%E6%96%87%E4%BB%B6%E3%80%82
配置my.cnf:
通过卷挂载/etc/mysql/my.cnf.d目录(映射为$ADMIN_PATH/mariadb/etc/)添加本地my.cnf配置。在Kubernetes环境中建议使用ConfigMap(示例已包含)。
网络配置
容器在入口网络暴露3306、4444、4567和4568端口。集群同步流量和备份(使用mariabackup或此处提供的mysqldump容器)需要内部网络。若需直接连接各集群节点进行写安全访问或故障排除,在较新版本Docker中可覆盖入口负载均衡器:
yamlversion: "3.2" services: db: ... ports: - target: 3306 published: <端口> protocol: tcp mode: host
建议为发布端口使用单独的负载均衡器。此方法在https://github.com/instantlinux/docker-tools/blob/main/images/mariadb-galera/kubernetes.yaml%E4%B8%AD%E6%9C%89%E8%AF%A6%E7%BB%86%E5%AE%9A%E4%B9%89%E5%92%8C%E8%AF%B4%E6%98%8E%E3%80%82
DNS名称与读写分离
使用MariaDB技术时,写入性能受集群中性能最差节点的I/O吞吐量限制,而读取性能可在整个集群扩展,仅受网络容量限制。
若在集群中分散数据库写入流量,性能会比单节点更差,原因如多主冲突所述。日志会出现类似以下消息:
WSREP: MDL conflict db=jira7 table=rundetails ticket=6 solved by abort
且集群性能不稳定。解决步骤:
Docker Swarm用户需自行配置,Kubernetes用户可通过https://github.com/instantlinux/docker-tools/blob/main/images/mariadb-galera/kubernetes.yaml%E5%92%8Chttps://github.com/instantlinux/docker-tools/blob/main/k8s/Makefile%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%99%E4%BA%9B%E6%AD%A5%E9%AA%A4%EF%BC%88%E9%9C%80%E5%85%88%E8%AE%BE%E7%BD%AE%E4%B8%A4%E4%B8%AADNS%E6%9D%A1%E7%9B%AE%EF%BC%89%E3%80%82
日志管理
日志默认输出到stdout/stderr,慢查询日志除外。如需保留慢查询日志,需挂载/var/log/mysql卷。
etcd设置
在Kubernetes下启动etcd可参考https://github.com/instantlinux/docker-tools/blob/main/k8s/Makefile%E4%B8%AD%E7%9A%84%60make etcd`命令。Docker Compose服务定义见https://github.com/instantlinux/docker-tools/tree/main/services/etcd%EF%BC%8C%E5%85%B6%E4%B8%AD%E5%8C%85%E5%90%AB%E4%BD%BF%E7%94%A8%E5%85%8D%E8%B4%B9discovery.etc.io%E5%BC%95%E5%AF%BC%E6%9C%8D%E5%8A%A1%E7%9A%84%E8%AF%B4%E6%98%8E%E3%80%82
该仓库提供完整的https://github.com/instantlinux/docker-tools/blob/main/k8s/README.md%EF%BC%8C%E5%85%8B%E9%9A%86%E4%BB%93%E5%BA%93%E5%90%8E%E5%8F%AF%E9%80%9A%E8%BF%87https://github.com/instantlinux/docker-tools/tree/main/images/mariadb-galera/helm%E6%88%96https://github.com/instantlinux/docker-tools/blob/main/images/mariadb-galera/kubernetes.yaml%E4%BD%BF%E7%94%A8%60make%60%E5%91%BD%E4%BB%A4%E5%90%AF%E5%8A%A8%EF%BC%8C%E5%B9%B6%E8%87%AA%E5%AE%9A%E4%B9%89https://github.com/instantlinux/docker-tools/blob/main/k8s/Makefile.vars%EF%BC%9A
bashgit clone https://github.com/instantlinux/docker-tools.git cd docker-tools/k8s # 此make目标在Makefile.instances中定义 make db00
重启集群
停止数据库时,需等待所有pod停止,然后清除etcd中集群条目:
bashCLUSTER=db00 ETCD_HOST=10.101.1.19 etcdctl --endpoints=$ETCD_HOST:2379 del --prefix /galera/$CLUSTER
然后通过helm chart或docker-compose启动。
Swarm环境使用
该镜像最初基于Docker Swarm开发,https://github.com/instantlinux/docker-tools/blob/main/images/mariadb-galera/docker.compose%E6%96%87%E4%BB%B6%E4%B8%BA%E9%81%97%E7%95%99%E5%AE%9E%E7%8E%B0%E3%80%82%E5%9C%A8stack%E9%83%A8%E7%BD%B2%E5%89%8D%EF%BC%8C%E9%9C%80%E4%BD%BF%E7%94%A8%60docker secret create生成mysql-root-password密钥,并定义指向my.cnf位置的ADMIN_PATH`环境变量(需在每个docker节点相同位置)。
| 变量 | 默认值 | 描述 |
|---|---|---|
| CLUSTER_JOIN | 加入地址——通常不需要 | |
| CLUSTER_NAME | cluster01 | 集群名称 |
| CLUSTER_SIZE | 3 | 预期节点数量 |
| DISCOVERY_SERVICE | etcd:2379 | etcd主机列表,如etcd1:2379,etcd2:2379 |
| LOG_LEVEL | info | 日志级别,设为debug可获取更多日志 |
| REINSTALL_OK | 设置任意值以允许在旧卷上重新安装 | |
| ROOT_SECNAME | mysql-root-password | 密码密钥名称 |
| TTL | 10 | 发布到etcd的密钥有效期(秒) |
| TZ | UTC | 时区 |
感谢severalnines的ashraf-s9s提供健康检查脚本。
如需改进此镜像,请参阅https://github.com/instantlinux/docker-tools/blob/main/CONTRIBUTING.md%E3%80%82
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。

探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务