所以我想建立一个具有高可用性的MySQL数据库服务器 - 因此我得到了两个设备(Banana Pi)并遵循了如何安装MySQL集群软件的教程。我知道只有两个设备的星座并不完全是如何使用MySQL集群,但为了节省硬件成本我现在只有这两个设备。
到目前为止,我有以下配置(sqlnode1和sqlnode2是设备的主机名):
管理节点(ndb_mgmd):
- sqlnode1(节点ID:1)
- sqlnode2(节点ID:2)
存储引擎(ndbd):
- sqlnode1:配置为使用localhost上的管理节点(节点ID:3)
- sqlnode2:配置为使用localhost上的管理节点(节点id:4)
MySQL服务器(mysqld):
- sqlnode1:配置为使用两个ndbd节点(节点ID:5)
- sqlnode2:配置为使用两个ndbd节点(节点ID:6)
所以基本上,每个设备都有一个正在运行的ndb_mgmd,ndbd和mysqld。
我想要实现的是,如果其中一个设备出现故障,另一个设备应该是完全可用的(出于某些非常具体的原因,我不能在这里使用简单的数据库复制)。
一旦我启动了所有组件,一切都运行正常。如果我在一个MySQL主机上更改数据,另一个会立即应用更改(反之亦然)。
但是,如果我断开其中一个设备的LAN电缆,会发生以下情况:
- 断开连接sqlnode2:功能节点(sqlnode1)挂起一小段时间然后继续正常工作(这基本上就是我想要的)
- 断开连接sqlnode1:运行节点(sqlnode2)会挂起很短的时间然后 根本不起作用 - 所有查询都以“4009群集故障”结束,并且只有在恢复已退出的节点的网络连接后,查询才会再次开始工作。之后,监视ndb_mgmd守护程序会显示已强制关闭节点标识4(sqlnode2上的ndbd)。
总之,整个系统似乎依赖于sqlnode1,我真的很想知道为什么会发生这种情况,因为我认为如果一个组件退出(并且另一个组件可用),一切都会继续运行。
我按照本教程设置了两个不同的管理节点: http://www.clusterdb.com/mysql-cluster/deploying-mysql-cluster-over-multiple-hosts
我错过了什么吗?或许我误解了MySQL集群是如何工作的?