2016-11-17 218 views
2

我在2个CentOS 6.6服务器上安装了2个Mariadb Galera节点(mariadb-galera-10.0.27-linux-x86_64.tar.gz) 。mariadb galera - 节点关闭时出错ERROR 1047 WSREP尚未准备应用程序使用的节点

安装完成后,我启动node1参数--wsrep-new-cluster,然后启动node2而不使用此参数。 他们工作正常,数据在2个节点之间成功同步。

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

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

在这种情况下会发生什么? 这里是我的2个节点(只是不同的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' 

回答

0

配置中的可能的原因是你的节点1下楼非正常,或者至少节点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/更多细节和日志的脑裂情况的例子。

,以避免它最便宜的方法是使用加莱拉仲裁人:http://nirbhay.in/blog/2013/11/what-is-galera-arbitrator/

+0

谢谢!出现此错误是因为我突然重新启动Node1。但我只有2台服务器。我可以在2台服务器上安装2台Galera仲裁器来解决此问题吗? @elenst – namdt55555

+0

技术上你可以,但它不会帮助。如果你倾向于重新启动整个机器,那么运行在那里的仲裁者也会下降,你将只有相同的裂脑,而不是1/1(剩下1个节点,1个丢失),它将是2/2。 如果其中一台主机的重启风险很高,而另一台主机更加稳定,那么可以考虑通过运行SET GLOBAL wsrep_provider_options =“pc.weight = 3”或类似的东西来为稳定的主机设置一个更高的权重 – elenst

+0

那。在这种情况下,当“弱”节点发生故障时,强者会知道它仍然是主要的。如果遇到强烈的故障,您可以通过运行SET GLOBAL wsrep_provider_options ='pc.bootstrap = true''来恢复剩余的故障。不过,请注意不要将两个节点设置为引导,否则最终会有两个单独的集群。 – elenst

1

两个节点的群集

双节点簇,一个单节点故障导致另一停止工作。

形势

你有一个只有两个节点组成的集群。其中一个节点不正常地离开集群。也就是说,不是通过init或systemd关闭它,而是崩溃或遭受网络连接的损失。剩下的节点变成不可操作的。它仍然如此,直到一些额外的信息由第三方提供,例如人类操作员或另一个节点。

如果节点在其他人离开集群后仍然保持运行状态,那么两个节点中的每一个都会认为自己是主组件。为了防止这种情况,节点变成不可操作的。

解决方案

有两种解决方案,您:

  • 可以引导幸存的节点,形成一个新的主成分,使用pc.boostrap wsrep提供选项。要做到这一点,登录到数据库客户端和运行以下命令:

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

这引导了幸存的节点作为新的主要成分。当其他节点恢复联机或重新获得与此节点的网络连接时,它将启动状态转移并赶上此节点。

  • 如果您希望节点继续运行,您可以使用pc.ignore_sb wsrep提供程序选项。要做到这一点,登录到数据库客户端和运行以下命令:

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

节点继续处理更新,它会继续这样做,即使在它怀疑脑裂情况的事件。

注意警告:在多主设备中启用pc.ignore_sb是危险的,因为上述裂脑情况的风险。但是,它可以简化主从群集中的事物(特别是在只使用两个节点的情况下)。

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

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

+0

我使用'SET GLOBAL wsrep_provider_options ='pc.bootstrap = YES';'出现:'错误1210(HY000):错误参数SET ' – aircraft