所以我想设置一个高可用性的 MySQL 数据库服务器 - 因此我买了两台设备(Banana Pi)并按照教程安装 MySQL 集群软件。我知道只有两台设备的组合并不是 MySQL 集群的真正用途,但为了节省硬件成本,我暂时只买了这两台设备。
到目前为止,我已经得到以下配置(sqlnode1和sqlnode2是设备的主机名):
管理节点(ndb_mgmd):
- sqlnode1(节点 ID:1)
- sqlnode2(节点 ID:2)
存储引擎(ndbd):
- sqlnode1:配置为使用本地主机的管理节点(节点 ID:3)
- sqlnode2:配置为使用本地主机的管理节点(节点 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 守护进程显示节点 ID 4(sqlnode2 上的 ndbd)已被强制关闭。
总之,整个系统似乎依赖于 sqlnode1,我真的很想知道为什么会发生这种情况,因为我认为如果一个组件掉线(并且另一个相同类型的组件可用),一切都会继续运行。
我按照本教程设置了两个不同的管理节点:http://www.clusterdb.com/mysql-cluster/deploying-mysql-cluster-over-multiple-hosts
我遗漏了什么吗?或者我误解了 MySQL 集群的工作原理?
答案1
我没有使用过 Mysql Cluster,但您应该能够在其中进行复制,另外,如果您只需要复制,那么 mysql cluster 的功能可能比您需要的要多得多。如果一个 sql 服务器发生故障,MySQL cluster 能够动态路由到不同的 sql 服务器,从而减少了每次修改主机名的 dns 记录或设置临时 sql 服务器或让它处于死机状态直到修复的需要。它还可以做其他事情。因此,为了帮助您,我建议使用 MySQL 社区版,因为它比 mysql cluster 更方便用户使用。
获取 mysql 社区版,这将允许您进行复制,因此,您可以将 1 个 mysql 服务器设置为主服务器,其中所有内容都已编辑,而第二个 mysql 服务器为从服务器,它只能以可配置的间隔检索主服务器的内容。 您也可以在将来轻松添加更多从服务器。 此外,从服务器也不一定必须位于单独的计算机上,您可以运行多个 MySQL 实例。 但是,这会破坏复制和故障安全的目的。 这很可能是您要找的。 此外,mysql 在其网站上有一个指南,用于设置 mysql 社区版的复制。
答案2
我通过切换到 Galera MySQL 集群解决了我的问题,它似乎完全满足了我的要求/需要。