我在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 回答
TWO-NODE CLUSTERS
在 two-node 群集中, single-node failure 会导致另一个群集停止工作 .
Situation
您有一个仅由两个节点组成的集群 . 其中一个节点不合理地离开集群 . 也就是说,它不是通过init或systemd关闭,而是崩溃或遭受网络连接的损失 . 保留的节点变为非运行状态 . 它仍然是这样,直到第三方提供一些附加信息,例如人工操作员或其他节点 .
如果节点在另一个节点不合理地离开集群之后仍然可操作,则存在这两个节点中的每一个都将自己视为主要组件的风险 . 为了防止这种情况,节点变得不可操作 .
Solutions
There are two solutions available to you:
这将幸存节点作为新的主要组件引导 . 当另一个节点重新联机或重新获得与此节点的网络连接时,它将启动状态转移并赶上该节点 .
节点恢复处理更新,即使在怀疑是裂脑情况的情况下,它也将继续这样做 .
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
可能的原因是你的node1非常失败,或者至少node2认为它确实失败了 . 在这种情况下,2节点集群达到裂脑情况,其中集群的其余部分无法确定它们是否应该是主要组件 . 这就是不建议使用双节点集群的原因 .
检查node1的日志以查看它是否正常关闭,如果是,则查看node2的日志,看看它是如何看待情况的 . 如果它看到node1正常关闭,它会说像
等等 . ;但如果它认为其他节点丢失了,那就更像了
等等
有关更多详细信息,请参阅http://nirbhay.in/blog/2015/02/split-brain/并记录裂脑情况的示例 .
避免它的最便宜的方法是使用Galera仲裁员:http://nirbhay.in/blog/2013/11/what-is-galera-arbitrator/