心雨秀 2024-09-11 15:24 采纳率: 0%
浏览 4

MariaDB Galera集群重启问题

操作:
我使用Docker部署了一个MariaDB Galera的集群(三台服务器),Docker run部分使用了下列环境变量:

    -e MARIADB_DATABASE=testdb \
    -e MARIADB_MASTER_HOST=192.168.1.1 \
    -e DB_MASTER_HOST=192.168.1.1 \
    -e NODE_NAME=mariadb-node1 \
    -e MARIADB_GALERA_NODE_NAME=mariadb1 \
    -e MARIADB_GALERA_NODE_ADDRESS=192.168.1.1  \
    -e MARIADB_GALERA_CLUSTER_ADDRESS="gcomm://192.168.1.1:4567,192.168.1.2:4567,192.168.1.3:4567" \
    -e MARIADB_GALERA_CLUSTER_NAME=mariadb-clust \
    -e MARIADB_ROOT_PASSWORD=root111 \
    -e GALERA=ON \
    -e MARIADB_GALERA_CLUSTER_BOOTSTRAP=yes \
    -e MARIADB_GALERA_FORCE_SAFETOBOOTSTRAP=yes \
    -e MARIADB_GALERA_MARIABACKUP_USER=backup \
    -e MARIADB_GALERA_MARIABACKUP_PASSWORD=root111 \
    -e MARIADB_USER=user \
    -e MARIADB_PASSWORD=root111 \
    -e MARIADB_REPLICATION_USER=repl \
    -e MARIADB_REPLICATION_PASSWORD=root111 \
    -e MARIADB_SERVER_ID=101\
    -e TIMEZONE=Asia/Shanghai \

第一个节点使用了上面的全部环境变量【第一个节点是引导节点】,第二个和第三个节点除了NAME和ADDRESS,还有SERVER_ID这些必须唯一的配置修改外,还去掉了MARIADB_GALERA_CLUSTER_BOOTSTRAP和MARIADB_GALERA_FORCE_SAFETOBOOTSTRAP这两个变量。

现象:

  1. 部署后三个节点如果一直运行,则MariaDB访问正常,数据也会正确同步。
  2. 如果第二个节点或第三个节点断掉,重启后数据同步正常。
  3. 如果第一个节点断掉,则二三节点的数据不会再往第一个节点同步(好像第一个节点从集群中脱离)。
  4. 出现3这个问题后,通过查找发现第一个节点的wsrep_cluster_address为“gcomm://”,通过查资料发现,是因为环境变量MARIADB_GALERA_CLUSTER_BOOTSTRAP=yes 引起的(虽然对MARIADB_GALERA_CLUSTER_ADDRESS有赋值,但是MARIADB_GALERA_CLUSTER_BOOTSTRAP=yes 会自动将wsrep_cluster_address为“gcomm://”)。wsrep_cluster_address为“gcomm://”,从而导致第一个节点重新引导创建了一个集群,和原来的集群脱离。于是重新使用docker run运行容器,同时将环境变量MARIADB_GALERA_CLUSTER_BOOTSTRAP=yes 的这个设置去掉。去掉后发现wsrep_cluster_address的值正常了,且第二、三节点的数据也同步到第一个节点了。
  5. 按4中的方式修改第一个节点后,又遇到新问题:当三个节点同时断掉后,重启三个节点,然后三个节点的MariaDB都起不来了。查看docker日志发现“This node was previouly booted, you may need to force bootstrapping in one of the nodes.”。缺少引导,三个节点都起不来了。(但是第一个节点设置的有MARIADB_GALERA_FORCE_SAFETOBOOTSTRAP=yes,不明白为啥无效)
  6. 除了上述现象外,还发现,部署后,通过“SHOW VARIABLES ”查到的三个节点的server_id都是1(通过MARIADB_SERVER_ID设置的无效)。

预期:

  1. 三个节点不管哪个节点断掉,重启后,都可以正常同步。
  2. 三个节点都断掉,重启后,三个节点可以正常使用,数据同步。
  3. 部署后三个节点的server_id能根据设置,变成唯一的(正常的话,三个节点的server_id不应重复)

帮忙看看,如何调整可以实现预期,谢谢!

  • 写回答

1条回答 默认 最新

  • 码踏云端 Java领域新星创作者 2024-09-11 16:04
    关注

    根据你提供的信息,以下是一些可能的调整建议来实现你的预期:

    1. 确保所有节点的防火墙已正确配置,允许 MariaDB 的通信端口通过。
    2. 检查 Galera 集群配置文件中的参数设置是否正确,特别是集群节点的 IP 地址、端口号、节点名称等。
    3. 确认使用的 Galera 插件版本与 MariaDB 10.1 版本兼容。
    4. 对于 server_id 问题,检查配置文件中是否正确设置了每个节点的 server_id。
    5. 考虑调整 Galera 相关参数,如 gcache.size、gcs.fc_limit、gcs.fc_factor 和 gcs.fc_window_size,以优化内存使用和复制效率。
    6. 在进行大数据导入操作时,确保集群有足够的内存资源,并采用优化的导入策略,如分批次导入、避免高峰期操作等。
    7. 监控集群内存使用情况、复制流量、FC 状态等关键指标,及时发现并解决问题。
    8. 定期清理不再需要的 write-sets,释放被占用的内存。
    9. 考虑增加节点的物理内存或横向扩展集群节点数量,以提升处理 write-sets 的能力。
    10. 检查是否存在网络问题或其他硬件故障,确保节点之间的通信正常。

    请注意,具体的调整方法可能因你的实际环境和需求而有所不同。在进行任何更改之前,建议备份重要的数据,并仔细评估每个调整的潜在影响。如果问题仍然存在,建议进一步查阅相关文档或寻求专业的技术支持。

    评论

报告相同问题?

问题事件

  • 修改了问题 9月11日
  • 创建了问题 9月11日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?