MySQL MGR + ProxySQL 搭建指南

介绍

MySQL是一个流行的关系型数据库管理系统,而ProxySQL是一个高性能的数据库代理。在这篇文章中,我们将介绍如何使用MySQL MGR结合ProxySQL搭建一个高可用性和负载均衡的MySQL架构。

什么是MySQL MGR?

MySQL MGR (MySQL Group Replication) 是MySQL的一种高可用性解决方案。它基于MySQL的复制技术,允许多个MySQL实例组成一个组,并在组内自动实现数据同步和故障转移。在MGR中,有一个主服务器(primary)和多个从服务器(secondary)。当主服务器宕机时,从服务器中的一个将会自动接替成为新的主服务器。

什么是ProxySQL?

ProxySQL是一个高性能的数据库代理,它可以帮助我们实现负载均衡和故障转移。它可以通过将客户端的请求分发到多个MySQL实例上,使得数据库的读写操作可以更加均衡和高效。

MySQL MGR + ProxySQL 架构图

gantt
    title MySQL MGR + ProxySQL 架构图

    section MySQL MGR
    主服务器            :done,    des1, 2022-10-01,2022-10-02
    从服务器1           :done,    des2, 2022-10-02,2022-10-03
    从服务器2           :done,    des3, 2022-10-02,2022-10-03

    section ProxySQL
    ProxySQL服务器     :done,    des4, 2022-10-03,2022-10-04

安装和配置MySQL MGR

步骤1:安装MySQL

首先,我们需要在每个MySQL实例上安装MySQL服务器。可以通过以下命令来安装:

sudo apt-get update
sudo apt-get install mysql-server

步骤2:配置MySQL MGR

编辑MySQL配置文件my.cnf,并配置MGR相关的参数。在每个MySQL实例上,找到my.cnf文件并添加以下内容:

[mysqld]
# 启用二进制日志
log-bin=mysql-bin
server-id=1

# 启用组复制
gtid_mode=ON
enforce_gtid_consistency=ON
log_slave_updates=ON

# 配置Replication用户
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_bin=binlog
binlog_format=ROW
binlog_row_image=FULL
master_verify_checksum=OFF
binlog_gtid_simple_recovery=1

# 配置MGR组
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
loose-group_replication_start_on_boot=off
loose-group_replication_local_address="127.0.0.1:33061"
loose-group_replication_group_seeds="127.0.0.1:33061,127.0.0.1:33062"

步骤3:初始化MySQL MGR

在主服务器上执行以下命令来初始化MGR:

mysql -u root -p -e "SET SQL_LOG_BIN=0; CREATE USER 'repl'@'%' IDENTIFIED BY 'password' REQUIRE SSL; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; SET SQL_LOG_BIN=1; CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery'; INSTALL PLUGIN group_replication SONAME 'group_replication.so';"

然后,在每个从服务器上运行以下命令来加入MGR组:

mysql -u root -p -e "SET GLOBAL group_replication_bootstrap_group=OFF; START GROUP_REPLICATION;"

步骤4:验证MySQL MGR

在主服务器上执行以下命令来验证MGR的状态:

mysql -u root -p -e "SHOW GLOBAL STATUS LIKE 'group_replication%';"

如果一切正常,你将会看到类似以下的输出:

+----------------------------------+--------------------------------------+
| Variable_name                    | Value                                |
+----------------------------------+--------------------------------------+
| group_replication_applier_....   | 5798a757-499a-11ec-9a18-0242ac1...