使用HAProxy负载均衡MySQL从服务器
说明
在本教程中,将向我们展示如何扩展MySQL数据库以及如何平衡所有从属节点之间的流量。
对于后端数据库服务器,应用程序负载已变得太大,
我们可以使用DNS循环负载平衡,但是,DNS服务不太可能知道后端服务的状态。如果端点出现故障,DNS将继续将流量定向到该端点。
更好的解决方案是使用TCP代理服务,例如HAProxy。
安装HAProxy
在Ubuntu 16上安装HAProxy
sudo apt update sudo apt-get install -y haproxy
在Ubuntu 18上安装HAProxy
sudo apt install -y haproxy
部署MySQL服务器
本文不涉及创建新的MySQL集群。但是,该说明可在以前的文章"如何创建MySQL主从群集"中找到。
我们将至少需要一个主节点和一个从节点才能开始。
在HAProxy中定义后端服务
第一步是为后端只读数据库服务器创建服务代理。该服务是我们作为数据库读取端点的目标应用程序。
下面是示例性的haproxy配置。该示例中的配置创建了一个名为app1_read_db的前端服务。我们将其绑定到haproxy主机上的网络接口和端口。
第二部分是定义后端服务,这是我们放置只读数据库的位置。我们为每个服务器创建一个服务器条目,为其命名,并设置其网络端点。
循环MySQL负载均衡
Robin-robin负载平衡是一种用于平衡后端服务器之间的流量的简单模型。流量将按顺序在每个服务器之间轮换。例如,如果我们将三个服务器定义为后端,则第一个连接将进入服务器1,第二个连接将进入服务器2,第三个连接将进入服务器3.
用例:轮循模型在所有服务器都具有相同规格的环境中效果最佳。
缺点:HAProxy不会监视与服务器的打开连接数。由于并非所有数据库连接都相等,因此一台或者多台服务器可能会被流量淹没,而其他服务器则处于空闲状态。
global user haproxy group haproxy daemon maxconn 4096 defaults mode tcp balance roundrobin timeout client 30000ms timeout server 30000ms timeout connect 3000ms retries 3 frontend app1_read_db bind 0.0.0.0:3306 default_backend mysql_slaves_group1 backend mysql_slaves_group1 server db-slave-01 192.168.1.10:3306 maxconn 2048 server db-slave-02 192.168.1.11:3306 maxconn 2048 server db-slave-03 192.168.1.12:3306 maxconn 2048
最少的连接MySQL负载平衡
最少连接模型将尝试为连接数量最少的后端服务器设置优先级。 HAProxy将监视每个数据库服务器有多少个打开的连接。新流量将首先定向到连接数量最少的服务器。
global user haproxy group haproxy daemon maxconn 4096 defaults mode tcp balance leastconn timeout client 30000ms timeout server 30000ms timeout connect 3000ms retries 3 frontend app1_read_db bind 0.0.0.0:3306 default_backend mysql_slaves_group1 backend mysql_slaves_group1 server db-slave-01 192.168.1.10:3306 maxconn 2048 server db-slave-02 192.168.1.11:3306 maxconn 2048 server db-slave-03 192.168.1.12:3306 maxconn 2048
使用监听简化配置
在上面的两个示例中,每个服务都有一个前端和一个后端配置。我们可以将这两者合并为一个侦听器配置。这是代理TCP网络服务的常见做法。
global user haproxy group haproxy daemon maxconn 4096 defaults mode tcp balance leastconn timeout client 30000ms timeout server 30000ms timeout connect 3000ms retries 3 listener mysql_slaves 0.0.0.0:3306 mode tcp balance leastconn server db-slave-01 192.168.1.10:3306 server db-slave-02 192.168.1.11:3306 server db-slave-03 192.168.1.12:3306