我想对两台专用 Linux 服务器进行负载平衡,我计划使用循环 DNS 来实现这一点,但我找不到同步服务器的方法。服务器正在运行一个 perl 脚本(最小更改),我认为可以使用 cron 作业上的 rsync 的简单 bash 脚本来同步它。但问题是该脚本依赖于变化很大的 mariadb 数据库,我认为不可能在两个正在运行的 mysql 数据库上运行 rsync,因为它会在目标服务器中产生冲突。
我认为可以远程将第二台服务器连接到第一台服务器的数据库,但这实际上并不能平衡负载,因为第一台服务器必须处理两台服务器的查询。
我遗漏了什么简单的解决方案吗?
答案1
是的,有更好的解决方案。在服务器前面安装一个合适的负载平衡器。
任意负载分布无反馈就像 DNS 循环一样,它确实会分散负载,但不可能均匀分布。要使所有后端服务器的负载均匀,您需要从服务器向平衡器提供负载反馈,以便平衡器知道每个后端的实际负载,并可以在决定将连接发送到何处时使用该信息。
还要注意,在主从配置中,由于主服务器和从服务器所扮演的角色不同,因此不可能以相同的方式加载它们。MySQL/MariaDB 有一个 Galera 多主集群解决方案,可以均匀分配负载。
最后,DNS“负载平衡”很容易被绕过。人们可以简单地使用其中一个服务器的文字IP地址而不是DNS名称,并且它们将始终加载该服务器。使用适当的负载平衡器,这是不可能的,因为只有平衡器的IP才可用于连接,因此它始终能够决定将连接转发到哪里。
尝试 haproxy;对于你的情况,你显然需要一个 TCP 模式和一个代理人(一个简单的脚本,带有简单协议) 在每个后端上运行,平衡器将定期查询该负载,以获取有关该服务器当前负载的信息。开始这里对于基本设置,然后您需要创建一个代理并将代理检查添加到 haproxy 配置中。