我在2台CentOs 6.6服务器上安装了2个Mariadb Galera节点(mariadb-galera-10.0.27-linux-x86_64.tar.gz)。
安装完成后,我使用参数$this->_collection->setOrder(array('price', 'price_plus_shipping'),Varien_Data_Collection::SORT_ORDER_DESC);
启动node1,然后在没有此参数的情况下启动node2。
它们工作正常,数据在2个节点之间成功同步。
但是,当我关闭node1时。 Node2仍在运行,但是当我尝试访问数据库时。它显示了这个错误:
--wsrep-new-cluster
在这种情况下会发生什么? 这是我在2 NODES(只是不同的IP地址)上的配置
use testdb;
ERROR 1047 (08S01): WSREP has not yet prepared node for application use
答案 0 :(得分:6)
TWOD-NODE CLUSTERS
在双节点群集中,单节点故障会导致另一个群集停止工作。
<强>场合强>
您的群集只包含两个节点。其中一个节点不合理地离开集群。也就是说,它不是通过init或systemd关闭,而是崩溃或遭受网络连接的损失。保留的节点变为非运行状态。在第三方(例如人工操作员或其他节点)提供某些附加信息之前,它仍然存在。
如果节点在另一个节点离开集群之后仍然可以运行,那么两个节点中的每个节点都会认为自己是主要组件。为了防止这种情况,节点变得不可操作。
<强>解决方案强>
您可以使用两种解决方案:
SET GLOBAL wsrep_provider_options =&#39; pc.bootstrap = YES&#39;;
这将幸存节点作为新的主要组件引导。当另一个节点恢复在线状态或重新获得与该节点的网络连接时,它将启动状态转移并赶上该节点。
SET GLOBAL wsrep_provider_options =&#39; pc.ignore_sb = TRUE&#39;;
节点恢复处理更新,即使遇到裂脑情况,它也会继续这样做。
注意警告:在多主机设置中启用pc.ignore_sb是危险的,因为前面提到了裂脑情况的风险。但是,它确实简化了主从集群中的事情(特别是在您只使用两个节点的情况下)。
除了上面提供的解决方案,您可以完全使用 Galera Arbitrator 来避免这种情况。 Galera Arbitrator在仲裁计算中充当奇数节点。这意味着,如果您在双节点群集中的一个节点上启用Galera Arbitrator,则该节点仍然是主要组件,即使另一个节点发生故障或丢失网络连接也是如此。
http://galeracluster.com/documentation-webpages/twonode.html
答案 1 :(得分:1)
可能的原因是你的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/