【问题标题】:Percona Xtradb - unable to start nodes after long downtimePercona Xtradb - 长时间停机后无法启动节点
【发布时间】:2016-12-15 01:50:44
【问题描述】:

我们有一个设置了 3 个节点的 Percona Xtradb-v2 集群。

当我们关闭节点 2 和 3 时,一切正常且同步,只留下节点 1。节点停止了一周,在此期间数据库的大小增加了 100GB。

当我们尝试重新启动节点 2 和 3 时,在初始 SST 期间启动失败,不到一分钟。我已经尝试完全删除 /var/lib/mysql 并重新启动,但效果相同。

错误日志似乎显示初始 SST 存在问题,这可能是由于初始启动所需传输的数据量很大。我们有足够的磁盘空间,并且文件权限是正确的。 xtrabackup 软件包已安装并可用(之前无论如何都可以使用)。

日志显示“没有这样的文件或目录”

Joiner 日志显示: Dec 15 01:21:51 xm1adb05 mysqld: #011Group state: 67e7e56d-8e95-11e6-a9d2-ce8abe8f95bb:5766440 Dec 15 01:21:51 xm1adb05 mysqld: #011Local state: 00000000-0000-0000-0000-000000000000:-1 Dec 15 01:21:51 xm1adb05 mysqld: 2016-12-15 01:21:51 13029 [Note] WSREP: New cluster view: global state: 67e7e56d-8e95-11e6-a9d2-ce8abe8f95bb:5766440, view# 54: Primary, number of nodes: 2, my index: 1, protocol version 3 Dec 15 01:21:51 xm1adb05 mysqld: 2016-12-15 01:21:51 13029 [Warning] WSREP: Gap in state sequence. Need state transfer. Dec 15 01:21:51 xm1adb05 mysqld: 2016-12-15 01:21:51 13029 [Note] WSREP: Running: 'wsrep_sst_xtrabackup-v2 --role 'joiner' --address '10.23.40.115' --datadir '/var/lib/mysql/' --defaults-file '/etc/my.cnf' --defaults-group-suffix '' --parent '13029' '' ' Dec 15 01:21:51 xm1adb05 mysqld: WSREP_SST: [INFO] Logging all stderr of SST/Innobackupex to syslog (20161215 01:21:51.575) Dec 15 01:21:51 xm1adb05 -wsrep-sst-joiner: Streaming with xbstream Dec 15 01:21:51 xm1adb05 -wsrep-sst-joiner: Using socat as streamer ... Dec 15 01:21:51 xm1adb05 mysqld: 2016-12-15 01:21:51 13029 [Warning] WSREP: Failed to prepare for incremental state transfer: Local state UUID (00000000-0000-0000-0000-000000000000) does not match group state UUID (67e7e56d-8e95-11e6-a9d2-ce8abe8f95bb): 1 (Operation not permitted) Dec 15 01:21:51 xm1adb05 mysqld: #011 at galera/src/replicator_str.cpp:prepare_for_IST():507. IST will be unavailable. ... Dec 15 01:21:51 xm1adb05 mysqld: 2016-12-15 01:21:51 13029 [Note] WSREP: Member 1.0 (xm1adb05) requested state transfer from '*any*'. Selected 0.0 (xm1adb04)(SYNCED) as donor. Dec 15 01:21:51 xm1adb05 mysqld: 2016-12-15 01:21:51 13029 [Note] WSREP: Shifting PRIMARY -> JOINER (TO: 5766440) Dec 15 01:21:51 xm1adb05 mysqld: 2016-12-15 01:21:51 13029 [Note] WSREP: Requesting state transfer: success, donor: 0 Dec 15 01:21:51 xm1adb05 mysql-systemd: State transfer in progress, setting sleep higher ... Dec 15 01:22:02 xm1adb05 -wsrep-sst-joiner: xtrabackup_checkpoints missing, failed innobackupex/SST on donor Dec 15 01:22:02 xm1adb05 -wsrep-sst-joiner: Cleanup after exit with status:2 Dec 15 01:22:02 xm1adb05 mysqld: 2016-12-15 01:22:02 13029 [ERROR] WSREP: Process completed with error: wsrep_sst_xtrabackup-v2 --role 'joiner' --address '10.23.40.115' --datadir '/var/lib/mysql/' --defaults-file '/etc/my.cnf' --defaults-group-suffix '' --parent '13029' '' : 2 (No such file or directory) Dec 15 01:22:02 xm1adb05 mysqld: 2016-12-15 01:22:02 13029 [ERROR] WSREP: Failed to read uuid:seqno from joiner script. Dec 15 01:22:02 xm1adb05 mysqld: 2016-12-15 01:22:02 13029 [ERROR] WSREP: SST script aborted with error 2 (No such file or directory) Dec 15 01:22:02 xm1adb05 mysqld: 2016-12-15 01:22:02 13029 [ERROR] WSREP: SST failed: 2 (No such file or directory) Dec 15 01:22:02 xm1adb05 mysqld: 2016-12-15 01:22:02 13029 [ERROR] Aborting

捐赠者日志显示: Dec 15 01:22:02 xm1adb04 mysqld: 2016-12-15 01:22:02 6531 [ERROR] WSREP: Failed to read from: wsrep_sst_xtrabackup-v2 --role 'donor' --address '10.23.40.115:4444/xtrabackup_sst//1' --socket '/var/lib/mysql/mysql.sock' --datadir '/var/lib/mysql/' --defaults-file '/etc/my.cnf' --defaults-group-suffix '' '' --gtid '67e7e56d-8e95-11e6-a9d2-ce8abe8f95bb:5766440' Dec 15 01:22:02 xm1adb04 mysqld: 2016-12-15 01:22:02 6531 [ERROR] WSREP: Process completed with error: wsrep_sst_xtrabackup-v2 --role 'donor' --address '10.23.40.115:4444/xtrabackup_sst//1' --socket '/var/lib/mysql/mysql.sock' --datadir '/var/lib/mysql/' --defaults-file '/etc/my.cnf' --defaults-group-suffix '' '' --gtid '67e7e56d-8e95-11e6-a9d2-ce8abe8f95bb:5766440': 22 (Invalid argument) Dec 15 01:22:03 xm1adb04 mysqld: 2016-12-15 01:22:03 6531 [ERROR] WSREP: Command did not run: wsrep_sst_xtrabackup-v2 --role 'donor' --address '10.23.40.115:4444/xtrabackup_sst//1' --socket '/var/lib/mysql/mysql.sock' --datadir '/var/lib/mysql/' --defaults-file '/etc/my.cnf' --defaults-group-suffix '' '' --gtid '67e7e56d-8e95-11e6-a9d2-ce8abe8f95bb:5766440'

类似的操作成功地启动了另一个(小得多的)数据库上的辅助节点,因此看起来大小可能是问题所在。

任何人都可以就我们如何初始化和重新启动其他节点提供一些帮助吗?

【问题讨论】:

    标签: mysql percona galera


    【解决方案1】:

    只需切换到 rsync。

    wsrep_sst_method                = rsync
    

    一旦节点同步,停止它,切换到 xtrabackup 并重新启动。

    【讨论】:

    • 这是一种解决方法(就像手动复制整个数据目录一样),但要求整个集群在复制期间不可用。这不是最优的,因为生产集群需要一直可用(这就是我们使用 galera 的原因)。即使 IST 有效,我们也确实需要知道 SST 失败的根本原因。
    【解决方案2】:
    • XtraBackup 在您的情况下失败。您可以通过查看 XB 生成的日志文件来了解 XB 故障的原因。
    • 顺便说一句,您应该检查施主节点上的 XB 日志。 根据简短的 sn-p XB 报告(无效参数)

    【讨论】:

      【解决方案3】:

      重新启动节点的解决方案是首先重新启动剩余的一个集群成员 (1),然后在尝试重新启动和重新加入之前完全擦除加入者 (2 和 3) 上的 /var/lib/mysql。这会导致 SST 并且一切正常。

      问题似乎是节点 2 和 3 在节点 1 上进行了分区,因此不允许 SST 完成(我认为可能最终的 IST 被拒绝,因此 SST 回滚)。重启节点 1 似乎重置了分区,然后 SST 就可以完成了。

      我们还有一个相当小的 gcache.size 并没有帮助,因为数据库中正在进行大量写入。

      后来的事件表明,由于施主节点上的 xtrabackup 问题,SST 似乎失败了。 xtrabackup 进程不喜欢 my.cnf 设置,其中我们复制了一行。解决这个问题并重新启动捐助者(以结束分区)让一切正常。

      【讨论】:

      • 看到什么似乎是同样的问题,不幸的是这对我们来说是不可接受的。加入需要在没有人工干预的情况下进行。
      • 另一个可能的原因是xtrabackup对mysql.cnf比mysql更挑剔,可能导致SST失败。查找重复的行或非致命的语法错误。这可能会导致 SST 失败,从而使节点分区。
      【解决方案4】:

      请先备份高级节点即节点1,然后在第二个和第三个恢复,然后尝试重新启动第二个和第三个节点,这将解决您的问题。

      因为在启动第二个节点时,您的捐助者没有从加入者收到最后一个 LSN 号,因为第二个节点 datadir 为空,因此没有数据

      【讨论】:

        猜你喜欢
        • 2013-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多