本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

该Docker容器基于官方Docker mariadb镜像构建,设计用于兼容自动调度系统,特别是Kubernetes、Docker Swarm Mode和Kontena Classic。通过指定正确的环境变量,它也可用于手动调度(docker run),或可能与使用类似约定的其他调度系统配合使用。
建议仔细测试所有升级!切勿在生产环境中使用latest标签!
支持多个版本,偶尔会重新构建并使用版本号和构建日期进行标记,因此只需为您的主版本选择适合的最新构建版本,或构建自己的版本。使用新版本时,务必通过test.sh脚本测试复制功能!
这不是简单的配置更新,而是投入了大量精力使该容器能够自动化集群的初始化和恢复。入口点脚本通过让节点在启动mysqld进程之前相互通信,确保集群正确恢复,从而在同时重置时协调完整恢复。它通过检查Galera的状态文件、恢复所有节点上的GTID位置,然后在节点之间通信以找到最新的节点(如需要)来形成新集群。它还提供多个不同健康程度的健康检查端点,以帮助集成负载均衡器和调度系统。
欢迎提交更多针对Mesos等的示例,以及对现有示例的改进!
通过使用DNS解析发现其他节点,无需显式指定节点,因此该容器应可与任何基于DNS的服务发现系统(如Kubernetes、Docker Swarm、Consul等)配合使用。
入口点接受以下启动“模式”作为命令。其他参数将传递给mysqld命令行。例如,通常需要添加--log-bin=mysqld-bin以启用二进制日志。
仅用于初始化新集群,初始化后且其他节点加入后,应停止“seed”容器,并使用相同卷替换为“node”容器。
加入现有集群。接受第二个参数,即逗号分隔的IP或主机名列表,用于构建--wsrep_cluster_address选项以加入集群。
“node”也可通过在数据卷中放置标志文件/var/lib/mysql/new-cluster,像“seed”一样引导集群。
启动禁用Galera的服务器。适用于维护任务,如执行mysql_upgrade和重置root凭据。
例如,要重置root用户密码,在Galera容器停止后,可运行新的临时容器:
shell1 $ docker run --rm -v {卷名}:/var/lib/mysql --name no-galera-temp {镜像} no-galera --skip-grant-tables shell2 $ docker exec -it no-galera-temp mysql -u root mysql MariaDB> update user set password=password("您的新密码") where user='root' and host='127.0.0.1'; MariaDB> flush privileges; MariaDB> quit shell2 $ exit shell1 $ <CTRL+C>
然后使用新的root密码启动Galera容器。
启动容器但不启动服务器。运行“sleep infinity”。适用于初始化卷或在服务器未运行时执行docker exec。
打开bash shell而非启动容器。例如bash -c 'touch /var/lib/mysql/new-cluster',用于创建标志文件,指示下次启动时创建新集群。
XTRABACKUP_PASSWORD(必填,除非提供XTRABACKUP_PASSWORD_FILE)SYSTEM_PASSWORD(必填,或如果提供XTRABACKUP_PASSWORD,则设为其哈希值)CLUSTER_NAME(可选)NODE_ADDRESS(可选 - 默认为ethwe,然后是eth0)LISTEN_WHEN_HEALTHY(可选)- 指定集群达到健康状态后打开健康检查套接字的端口号。适用于Kontena的wait_for_port功能。HEALTHY_WHILE_BOOTING(可选)- 如果为'1',则HEALTHCHECK脚本在启动阶段(等待DNS解析和恢复wsrep位置)报告健康。SKIP_TZINFO(可选)- 指定任何值以在初始化新目录时跳过时区表数据加载。DEFAULT_TIME_ZONE(可选 - 默认为TZ环境变量,如未定义则为'+00:00')- 指定数据库时区,可为数字格式(+01:00)或文字格式(CET、Europe/Bratislava等)。后者仅在未指定SKIP_TZINFO时可用。有关需要此设置的原因,详见此处。SST_METHOD(可选 - 10.2+默认为'mariabackup',10.1默认为'xtrabackup-v2')- 也可设为'rsync'或'mysqldump'。此镜像中不支持需要进一步配置或安装依赖的其他方法。SKIP_UPGRADES(可选 - 阻止运行run-upgrades.sh脚本)“seed”的附加变量:
MYSQL_ROOT_PASSWORD(可选)- 另见/var/lib/mysql/new-cluster标志文件。MYSQL_ROOT_HOST(可选)- 未指定时默认为'127.0.0.1'。指定'%'允许从任何主机登录root。MYSQL_ROOT_SOCKET_AUTH(可选)- 默认启用,指定0禁用。如果启用,引导时会创建'root'@'localhost',允许root通过unix套接字无密码登录!这使docker exec命令无需密码,同时仍要求网络登录需密码。MYSQL_DATABASE(可选)MYSQL_USER(可选)MYSQL_PASSWORD(可选)“node”的附加变量:
GCOMM_MINIMUM(可选 - 默认为2)也可使用文件配置敏感变量,此方法用于Docker Swarm、Rancher等。密钥文件路径默认为/run/secrets/{小写变量名},但也可通过以下环境变量显式指定:
XTRABACKUP_PASSWORD_FILESYSTEM_PASSWORD_FILEMYSQL_ROOT_PASSWORD_FILEMYSQL_ROOT_HOST_FILEMYSQL_PASSWORD_FILEMYSQL_DATABASE_FILE为了在无需更改CMD(在自动调度器中有时难以操作)的情况下控制引导阶段,可在启动容器前创建以下文件以更改引导行为。所有文件应位于/var/lib/mysql目录(需将此目录挂载为容器卷)。
/var/lib/mysql/new-cluster - 使“node”容器在首次运行时表现为“seed”容器。也可用于无法形成主组件时的恢复,或代替“seed”容器引导新集群。如果文件有内容,将用作MYSQL_ROOT_PASSWORD。/var/lib/mysql/hold-start - 使“node”容器等待此文件删除后再尝试启动。适用于缺乏细粒度调度控制的调度器。/var/lib/mysql/force-cluster-bootstrapping - 强制再次创建MySQL用户(“seed”或“node”命令)。/var/lib/mysql/skip-cluster-bootstrapping - 阻止创建MySQL用户。此文件会自动创建,正常情况下不应删除。/var/lib/mysql/skip-upgrades - 阻止运行run-upgrades.sh脚本。默认情况下,后台运行两个基于HTTP的健康检查服务器。
默认HEALTHCHECK命令在/var/lib/mysql/sst_in_progress存在时也返回健康状态,以避免节点在SST期间被终止。否则,它使用第二个健康检查(端口8081),仅在节点“已同步”时返回健康,以防止节点因长时间作为***者而被终止。健康检查命令的行为取决于您的使用场景,因此可能需要根据所需行为覆盖它。无论如何,两个健康检查服务器都会启动,除非被实际 ping,否则资源消耗可忽略不计。
此外,如果指定LISTEN_WHEN_HEALTHY端口号,容器将启动循环检查自身的8080端口健康检查,一旦报告健康,将在此端口打开新套接字,转发至8080端口。这可与Kontena的wait_for_port功能配合使用,以适应滚动更新机制。
通常,由于MariaDb并非特别稳定的服务器, minor版本号常引入回归或向后兼容性问题,因此始终建议在生产环境中使用特定标签,并先在 staging 环境测试升级。还建议阅读提交日志以了解变更。不提供任何保证,使用风险自负!
升级前,需授予xtrabackup用户PROCESS权限:
mysql> GRANT PROCESS ON *.* TO 'xtrabackup'@'localhost';
test.sh脚本是使用docker run启动seed和node容器的简单脚本。它在后台启动seed,将seed日志输出到控制台,然后在前台启动node。测试成功与否应通过检查日志确定,还应执行启动额外节点、终止一个或多个节点等操作,以验证恢复功能是否正常。
示例
make test-10.4
或为10.4构建并运行自己的镜像,启动单个seed和node:
$ docker build . -f Dockerfile-10.4 -t galera-test-10.4 $ ./test.sh galera-test-10.4
在另一个控制台,验证集群状态和大小:
$ docker exec -it cm-galera-test-node mysql -be "show status like 'wsrep_cluster_s%';" +----------------------------+--------------------------------------+ | Variable_name | Value | +----------------------------+--------------------------------------+ | wsrep_cluster_size | 2 | | wsrep_cluster_state_uuid | e54090dc-f892-11ec-ad6f-f2704a681293 | | wsrep_cluster_status | Primary | +----------------------------+--------------------------------------+
/var/lib/mysql/new-cluster以强制节点引导新集群并绕过自动恢复步骤。pc.recovery,因此在所有节点正常关闭的情况下,主组件应自动恢复。重要的是所有节点一起启动,以便它们可以相互通信状态。ethwe*或eth0,则需将NODE_ADDRESS指定为要监听的接口名称或匹配容器IP地址的grep模式。例如:NODE_ADDRESS='^10.0.1.*'。GCOMM_MINIMUM个IP解析,然后尝试启动mysqld,以防某些容器启动较慢,增加健康恢复的机会。可能无法解析足够IP的场景包括:
/usr/local/lib/startup.sh存在,将在start.sh脚本中被source。$ docker exec -i <容器> mysql -p /primary-component.sqlwsrep_notify_cmd设为/usr/local/bin/notify.sh,可更清晰地监控集群状态变化,该脚本会将更新输出到Docker日志/控制台。免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429