我想为Kubernetes上的MariaDB数据库设置一个写代理。我们目前遇到的问题是,我们在3个主加莱拉集群设置上只有一个写主。因此,即使我们的pod复制正常,如果我们的第一个节点出现故障,那么我们的其他两个主节点也会因为无法写入而失败。我看到这是一个可能的选择,使用ProxySQL或MaxScale进行写代理,但我不确定我是否正确阅读了它们的用法。我是否有正确的想法,希望在Kubernetes上部署这两个应用程序/服务中的任何一个来解决我的问题?我是否能够写入集群中的任何一个主服务器?
gmol16391#
只要您使用readwritesplit路由器和galeramon监视器,MaxScale就可以选择要写入的服务器。以下是MaxScale的配置示例,它对读取进行负载平衡,但将写入发送到一个节点:
readwritesplit
galeramon
[maxscale] threads=auto [node1] type=server address=node1-address port=3306 [node2] type=server address=node2-address port=3306 [node3] type=server address=node3-address port=3306 [Galera-Cluster] type=monitor module=galeramon servers=node1,node2,node3 user=my-user password=my-password [RW-Split-Router] type=service router=readwritesplit cluster=Galera-Cluster user=my-user password=my-password [RW-Split-Listener] type=listener service=RW-Split-Router protocol=mariadbclient port=4006
一次只在一个节点上执行写入操作的原因是,在多个加莱拉节点上执行写入操作不会提高写入性能,并且在提交事务时会导致冲突(应用程序似乎很少处理这些问题)。
1条答案
按热度按时间gmol16391#
只要您使用
readwritesplit
路由器和galeramon
监视器,MaxScale就可以选择要写入的服务器。以下是MaxScale的配置示例,它对读取进行负载平衡,但将写入发送到一个节点:
一次只在一个节点上执行写入操作的原因是,在多个加莱拉节点上执行写入操作不会提高写入性能,并且在提交事务时会导致冲突(应用程序似乎很少处理这些问题)。