首页 文章

mariadb galera - 节点关闭时出错ERROR 1047 WSREP尚未为应用程序使用准备节点

提问于
浏览
6

我在2台CentOs 6.6服务器上安装了2个Mariadb Galera节点(mariadb-galera-10.0.27-linux-x86_64.tar.gz) .

安装完成后,我使用参数 --wsrep-new-cluster 启动node1,然后在没有此参数的情况下启动node2 . 它们工作正常,数据在2个节点之间成功同步 .

但是,当我关闭node1 . Node2仍在运行,但是当我尝试访问数据库时 . 它显示此错误:

use testdb;
ERROR 1047 (08S01): WSREP has not yet prepared node for application use

在这种情况下会发生什么?这是我在2 NODES上的配置(只是不同的IP地址)

[galera] 
wsrep_on=ON
wsrep_cluster_name='mysql-cluster'
wsrep_provider='/home/mariadb/mariadb-galera/lib/galera/libgalera_smm.so'
wsrep_provider_options="gcache.size=1G"
wsrep_cluster_address="gcomm://10.211.26.116:4567?

pc.wait_prim=no"
wsrep_sst_method=rsync
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_node_address=10.211.26.117:4567
wsrep_node_name='db2'

2 回答

  • 1

    TWO-NODE CLUSTERS

    two-node 群集中, single-node failure 会导致另一个群集停止工作 .

    Situation

    您有一个仅由两个节点组成的集群 . 其中一个节点不合理地离开集群 . 也就是说,它不是通过init或systemd关闭,而是崩溃或遭受网络连接的损失 . 保留的节点变为非运行状态 . 它仍然是这样,直到第三方提供一些附加信息,例如人工操作员或其他节点 .

    如果节点在另一个节点不合理地离开集群之后仍然可操作,则存在这两个节点中的每一个都将自己视为主要组件的风险 . 为了防止这种情况,节点变得不可操作 .

    Solutions

    There are two solutions available to you:

    • 您可以使用pc.boostrap wsrep Provider选项引导幸存节点以形成新的主要组件 . 为此,请登录数据库客户端并运行以下命令:

    SET GLOBAL wsrep_provider_options ='pc.bootstrap = YES';

    这将幸存节点作为新的主要组件引导 . 当另一个节点重新联机或重新获得与此节点的网络连接时,它将启动状态转移并赶上该节点 .

    • 如果您希望节点继续运行,可以使用pc.ignore_sb wsrep Provider选项 . 为此,请登录数据库客户端并运行以下命令:

    SET GLOBAL wsrep_provider_options ='pc.ignore_sb = TRUE';

    节点恢复处理更新,即使在怀疑是裂脑情况的情况下,它也将继续这样做 .

    Note Warning: Enabling pc.ignore_sb is dangerous in a multi-master setup, due to the aforementioned risk for split-brain situations. However, it does simplify things in master-slave clusters, (especially in cases where you only use two nodes).

    除了上面提供的解决方案,您可以完全使用 Galera Arbitrator 来避免这种情况 . Galera Arbitrator在仲裁计算中充当奇数节点 . 这意味着,如果在双节点群集中的一个节点上启用Galera Arbitrator,则该节点仍然是主要组件,即使另一个节点出现故障或丢失网络连接也是如此 .

    http://galeracluster.com/documentation-webpages/twonode.html

  • 6

    可能的原因是你的node1非常失败,或者至少node2认为它确实失败了 . 在这种情况下,2节点集群达到裂脑情况,其中集群的其余部分无法确定它们是否应该是主要组件 . 这就是不建议使用双节点集群的原因 .

    检查node1的日志以查看它是否正常关闭,如果是,则查看node2的日志,看看它是如何看待情况的 . 如果它看到node1正常关闭,它会说像

    [Note] WSREP: forgetting xxxxxxx (tcp://X.X.X.X:XXXX)
    

    等等 . ;但如果它认为其他节点丢失了,那就更像了

    [Note] WSREP: (70f85e74, 'tcp://x.x.x.x:xxxx') turning message relay requesting on, nonlive peers: tcp://X.X.X.X:XXXX
    

    等等

    有关更多详细信息,请参阅http://nirbhay.in/blog/2015/02/split-brain/并记录裂脑情况的示例 .

    避免它的最便宜的方法是使用Galera仲裁员:http://nirbhay.in/blog/2013/11/what-is-galera-arbitrator/

相关问题