使用HAProxy负载均衡MySQL从服务器

时间:2020-01-09 10:44:03  来源:igfitidea点击:

说明

在本教程中,将向我们展示如何扩展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