load-balancing - MaxScale 集群(主-主)设置
问题描述
当在模式中的 Galera Cluster 前以 Master-Slave 类型部署多个 MaxScale(使用 Keepalived 或类似方法从 master 故障转移到 slave)时read-write-split
,一切正常。但是,以循环方式进行类似大师-大师的类型学呢,这可能吗?
例如:在 10.0.0.1 有一个 MaxScale,在 10.0.0.2 有一个第二个,Haproxy 在它前面,有一个roundrobin
或leastconn
分布算法(或者甚至没有 Haproxy/负载均衡器,应用程序只是随机连接到一个或另一个)就是这样MaxScale 可能/很好地支持?
解决方案
通常,您可以连接到任意数量的 MaxScale 实例,只要启用某些功能以保证所有 MaxScale 实例选择它们发送写入的同一服务器。
加莱拉集群
如果您使用的是 Galera 集群,则可以通过启用该root_node_as_master
参数以安全且无冲突的方式完成此操作。它使用 Galera 集群本身来选择它用于写入的节点。这允许您的应用程序连接到任一 MaxScale 实例。
即使没有此参数,它也不会对数据库本身造成任何问题,但由于 Galera 的工作方式,如果您写入多个节点,则会增加在提交事务时遇到冲突的可能性。
异步复制集群
如果将 MaxScale 与使用异步复制的集群一起使用,只要将mariadbmon
监视器配置为使用cooperative_monitoring_locks
. 这会导致 MaxScale 实例通过数据库就他们看到哪些服务器以及他们选择哪些服务器进行写入进行通信。
另一个好处cooperative_monitoring_locks
是您可以启用自动集群管理参数auto_failover
,auto_rejoin
而不必担心两个 MaxScales 会尝试同时更改复制配置:cooperative_monitoring_locks
确保只有一个 MaxScale 可以这样做。
推荐阅读
- r - 在分组的 data.table 上并行运行用户定义的 for 循环函数
- c# - .Navigate() 在 Gecko Web Browser 控制问题
- c++ - Is it possible to use unordered::map::find if the map's key is a pointer to string?
- html - 没有forms.py的Django表单不提交
- c - 为什么 thread2 等待 thread1 结束?
- javascript - 下拉用户输入然后列出并允许在 HTML 页面上进行编辑
- javascript - React/JS 没有显示可能性(智能感知)VSCODE
- java - 在java中将十进制转换为整数
- python - 如何编写一个以文件夹名称为参数并使用 python 和 os 模块返回所有文件名列表的函数?
- while-loop - 代码在尝试“while (!radio.available())”并反复检查按钮输入时挂起