本页内容
- 先决条件
- 配置软件仓库
- 安装 ProxySQL 与 Percona XtraDB Cluster Client
- 将 MySQL Cluster/Percona XtraDB Cluster 添加到 ProxySQL
- 配置 ProxySQL 监控用户
- 为应用配置数据库用户
- 验证数据库与用户
- 结语
ProxySQL 是一款高性能、轻量级的 MySQL 代理,可安装在 VM、K8s、裸金属(bare-metal)以及 Docker 容器等多种环境中。ProxySQL 是一个开源解决方案,通过支持连接多路复用(connection multiplexing)为你的 MySQL Cluster 提供高可用性,提供查询规则(query Rules)将写入路由到主节点(primaries),并将读取分发到各个副本(replicas)。
ProxySQL 同时支持 AMD64 (x86_64) 和 ARM64 架构。它为你的应用提供应用层代理,并支持具备故障转移检测(failover detection)的高级查询。
在本教程中,你将在 Debian 11 服务器上通过 ProxySQL 安装并搭建 MySQL Cluster 的负载均衡。你将安装 ProxySQL v2 与 percona XtraDB Client,然后将 Percona XtraDB Cluster 添加到 ProxySQL,配置 ProxySQL 监控用户,最后添加供你的应用使用的数据库和用户。
先决条件
在开始本教程之前,你必须满足以下要求:
- 一台运行 Debian 11 系统的 Linux 服务器——本示例使用主机名为 ' proxysql-deb ' 的 Debian 服务器。
- 一个具有 sudo/root 管理员权限的非 root 用户。
- 已完全配置好的 MySQL Cluster 或 Percona XtraDB Cluster。
就这些了。当所有要求就绪后,你现在可以开始安装 ProxySQL 了。
配置软件仓库
本教程你需要做的第一步是将 ProxySQL 和 Percona XtraDB 两个软件仓库都添加到你的服务器上。Percona XtraDB 仓库将用于安装 ProxySQL 所需的 ' percona-xtradb-cluster-client ' 软件包。
首先,执行以下 apt 命令安装一些基础依赖。在提示时输入 y 并按 ENTER 继续。
sudo apt install wget gnupg2 lsb-release curl apt-transport-https ca-certificates

接下来,下载 Percona XtraDB 的仓库文件,并通过下面的 ' dpkg ' 命令进行安装。
wget -q https://repo.percona.com/apt/percona-release_latest.generic_all.deb
sudo dpkg -i percona-release_latest.generic_all.deb

现在使用下面的 apt 命令更新并刷新你的 Debian 软件包索引。你应该能看到新的 Percona XtraDB 仓库已被添加。
sudo apt update
然后,执行 ' percona-release ' 命令以启用 Percona XtraDB Cluster 8.0 仓库。
sudo percona-release setup pxc80

在添加 Percona XtraDB 仓库后,现在执行以下命令添加 ProxySQL 的 GPG 密钥和仓库。
wget -q -nv -O /etc/apt/trusted.gpg.d/proxysql-2.4.x-keyring.gpg 'https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/repo_pub_key.gpg'
echo deb https://repo.proxysql.com/ProxySQL/proxysql-2.4.x/$(lsb_release -sc)/ ./ | tee /etc/apt/sources.list.d/proxysql.list
再次更新并刷新你的 Debian 软件包索引以应用新仓库。
sudo apt update

在添加完 Percona XtraDB 和 ProxySQL 两个仓库后,你可以安装 ProxySQL 和 Percona XtraDB 客户端软件包了。
安装 ProxySQL 与 Percona XtraDB Cluster Client
在本节中,你将安装 ProxySQL v2 软件包与 Percona XtraDB 客户端软件包。执行以下 apt 命令安装 ProxySQL 和 Percona XtraDB 客户端软件包。
sudo apt install proxysql2 percona-xtradb-cluster-client
当提示时,输入 y 确认并按 ENTER 继续。

ProxySQL 安装完成后,会在系统启动时自动运行并自启动。执行以下 systemctl 命令工具来验证 ProxySQL 服务状态。
sudo systemctl is-enabled proxysql
sudo systemctl start proxysql
输出 ' enabled ' 表示 ProxySQL 会在系统启动时自动启动。而输出 ' active (running) ' 表示 ProxySQL 正在运行。

接下来,执行以下 mysql 命令,使用默认用户和密码 ' admin ' 登录 ProxySQL 服务器。
mysql -u admin -padmin -h 127.0.0.1 -P 6032 --prompt='proxysql-deb> '
成功后,你将看到如下所示的 ProxySQL shell。你已通过 Percona XtraDB 客户端连接到 ProxySQL 的 admin 模块。

现在执行以下查询以获取 ProxySQL 服务器上的数据库列表。你应该能看到 ProxySQL 服务器上可用的多个数据库。
SHOW DATABASES;

在 ProxySQL 服务器和 Percona XtraDB Cluster 客户端安装完成后,你已经准备好将 MySQL 或 Percona XtraDB Cluster 添加到 ProxySQL 服务器并配置负载均衡了。
将 MySQL Cluster/Percona XtraDB Cluster 添加到 ProxySQL
安装完 ProxySQL 服务器后,你必须做的第一步是将你的 MySQL 或 percona XtraDB Cluster 添加到 ProxySQL 服务器。这可以通过 ProxySQL shell 完成。本示例使用具有以下详细信息的 Percona XtraDB Cluster:
Hostname IP Address Port --------------------------------- pxc01 192.168.5.15 3306 pxc02 192.168.5.16 3306 pxc03 192.168.5.17 3306
在开始之前,请确保你已经登录到 ProxySQL shell。然后,执行以下查询将你的 MySQL 服务器添加到 ProxySQL。请务必将 IP 地址和端口信息替换为你的 MySQL 集群的实际信息。
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'192.168.5.15',3306);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'192.168.5.16',3306);
INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (0,'192.168.5.17',3306);
输出 ' Query OK, 1 row affected ' 表示 MySQL 服务器已添加到 ProxySQL 服务器。

执行以下查询以验证 ProxySQL 上可用的 MySQL 服务器列表。你应该能看到已添加到 ProxySQL 服务器的三个 MySQL 服务器。
SELECT * FROM mysql_servers;

在将 MySQL 或 Percona XtraDB Cluster 添加到 ProxySQL 后,你接下来需要在 ProxySQL 上配置对 Percona XtraDB Cluster 的监控。
配置 ProxySQL 监控用户
为了确保 MySQL 或 Percona XtraDB Cluster 健康运行,ProxySQL 会持续监控所有可用 MySQL 服务器的后端。为此,你必须在你的 percona XtraDB Cluster 上创建一个新用户,然后在 ProxySQL 服务器上定义该监控用户。
登录到你的 Percona XtraDB Cluster 服务器,通过 'mysql' 命令进入 MySQL shell,然后执行以下 MySQL 查询,创建一个用户名为 'monitor'、密码为 'monitor' 的新用户。
CREATE USER 'monitor'@'%' IDENTIFIED WITH mysql_native_password by 'monitor';
GRANT USAGE ON *.* TO 'monitor'@'%';
FLUSH PRIVILEGES;
SELECT USER,host FROM mysql.user;
SHOW GRANTS FOR 'monitor'@'%';

接下来,切换到 ProxySQL 服务器并执行以下查询,定义用于监控 Percona XtraDB Cluster 的用户。这会将默认变量 ' mysql-monitor_username ' 改为用户 'monitor',并将变量 ' mysql-monitor_password ' 改为密码 ' monitor '。
UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';
UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_password';
执行以下查询,更新 ProxySQL 服务器上用于监控 Percona XtraDB Cluster 的一些额外参数。
UPDATE global_variables SET variable_value='2000' WHERE variable_name IN ('mysql-monitor_connect_interval','mysql-monitor_ping_interval','mysql-monitor_read_only_interval');
通过执行以下查询,保存你在 ProxySQL 服务器上 ' global_variables ' 中所做的更改。
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
你应该收到类似如下的输出。

现在执行以下查询,验证 ProxySQL 服务器上 ' mysql-monitor_ ' 相关的 ' global_variables ' 列表。
SELECT * FROM global_variables WHERE variable_name LIKE 'mysql-monitor_%';
你应该获得类似下方截图的输出——变量 'mysql-monitor_username' 的值必须为用户 'monitor',变量 'mysql-monitor_password' 对应密码为 'monitor'。此外,你可以看到变量 'mysql-monitor_connect_interval'、'mysql-monitor_ping_interval'、'mysql-monitor_read_only_interval' 的值已更改为 ' 2000 '。

最后,执行以下查询验证 ProxySQL 服务器上 Percona XtraDB Cluster 的监控状态。这将显示 ProxySQL 服务器对所有可用 Percona XtraDB Cluster 服务器的最后一次日志状态和最后一次 ping 记录的日志。
SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 6;
SELECT * FROM monitor.mysql_server_ping_log ORDER BY time_start_us DESC LIMIT 6;
成功后,你应该收到类似如下的输出。
ProxySQL 服务器到 Percona XtraDB Cluster 的最后连接日志。

ProxySQL 服务器到 Percona XtraDB Cluster 的最后 ping 日志。

在 MySQL 或 Percona XtraDB Cluster 已被 ProxySQL 服务器监控后,你现在可以着手为你的应用设置一个新用户了。
为应用配置数据库用户
在 ProxySQL 服务器安装并配置完成,且 MySQL 或 Percona XtraDB Cluster 已作为数据库后端添加后,你现在将设置一个供应用使用的新用户。因此,你的应用不应直接连接 MySQL 服务器,而应连接到默认运行在端口 ' 6033 ' 上的 ProxySQL 服务器。
为你的应用设置新用户,你需要执行以下步骤:
- 在 MySQL cluster 或 Percona XtraDB Cluster 上创建新用户并配置权限。
- 将你的 Percona XtraDB Cluster 用户添加到 ProxySQL 服务器——插入到表 ' mysql_users ' 中。
首先,回到你的 Percona XtraDB Cluster 服务器,通过 root 用户登录 MySQL shell。然后,执行以下查询创建一个新 MySQL 用户并授予其访问所有数据库的权限。在本示例中,你将创建一个用户名为 ' sbuser '、密码为 ' sbpass ' 的新用户。此外,请务必将 IP 地址 ' 192.168.5.85 ' 替换为 ProxySQL 服务器的 IP 地址。
CREATE USER 'sbuser'@'192.168.5.85' IDENTIFIED WITH mysql_native_password by 'sbpass';
GRANT ALL PRIVILEGES ON *.* TO 'sbuser'@'192.168.5.85';
FLUSH PRIVILEGES;

接下来,回到 ProxySQL 服务器并运行以下查询,将你的新 MySQL 用户添加到 ProxySQL 服务器。你的 MySQL 用户应被添加到 ProxySQL 服务器上的 ' mysql_users ' 表。此外,在撰写本文时,ProxySQL 服务器尚不支持加密密码。
INSERT INTO mysql_users (username,password) VALUES ('sbuser','sbpass');
现在执行以下查询,确认并保存你在 ProxySQL 服务器上的更改。至此,你的新用户已准备就绪,你可以将该 MySQL 用户用于你的应用了。
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;

至此,你的应用现在应使用用户 ' sbuser ' 和密码 ' sbpass ',通过端口 6033 连接到 ProxySQL 服务器。
验证数据库与用户
在本节中,你将使用创建的用户名和密码连接到 ProxySQL 服务器,以验证 ProxySQL 的安装。
执行以下 'mysql' 命令,使用新用户 'sbuser' 和密码 'sbpass' 登录 ProxySQL 服务器。成功后,你应该会看到 ProxySQL 服务器 shell。
mysql -u sbuser -psbpass -h 127.0.0.1 -P 6033 --prompt='proxysql-deb> '

执行以下查询,查看 Percona XtraDB Cluster 上的数据库列表。在本示例中,Percona XtraDB Cluster 上有一个名为 ' percona ' 的数据库。
show databases;
通过下面的 ' USE ' 查询切换到数据库 ' percona '。
use percona

接下来,执行以下查询查看数据库 ' percona ' 中的表列表。然后,检索你当前所在数据库的可用数据。
show tables;
select * from example;
你应该收到类似如下的输出——存储在 Percona XtraDB Cluster 上的数据库可通过 ProxySQL 服务器访问。这意味着你将 ProxySQL 作为 Percona XtraDB Cluster 负载均衡器的安装已成功。

接下来,执行以下查询向数据库 ' percona ' 和表 ' example ' 中插入新数据。
INSERT INTO percona.example VALUES (4, 'pxc04');
INSERT INTO percona.example VALUES (5, 'pxc05');
然后,使用以下查询再次验证新更新的数据。如果成功,你应该能在表 ' example ' 中看到新数据。这证明你的用户能够对 Percona XtraDB Cluster 上的数据库进行读写操作。
select * from example;

最后,为了确保你的新数据已更新到 Percona XtraDB Cluster,你必须直接从 percona XtraDB Cluster 服务器上进行验证。
登录到你的 Percona XtraDB Cluster 服务器,通过 root 用户进入 MySQL shell,然后运行以下查询,从数据库 ' percona ' 的表 ' example ' 中检索数据。
select * from percona.example;
成功后,你应该能看到你通过 ProxySQL 服务器添加的新数据。

综上所述,你将 ProxySQL 服务器作为 MySQL Cluster 或 Percona XtraDB Cluster 负载均衡器的安装已成功。
结语
在本教程中,你在 Debian 11 服务器上通过 ProxySQL 配置了 MySQL Cluster 或 Percona XtraDB Cluster 的负载均衡。你安装了 ProxySQLv2,将 Percona XtraDB Cluster 添加到 ProxySQL,并在 ProxySQL 上配置了 Percona XtraDB Cluster 监控。
此外,你还创建并配置了可供应用使用的 MySQL 或 Percona XtraDB Cluster 用户。你还验证了通过 ProxySQL 实现的 MySQL Cluster 或 Percona XtraDB Cluster 负载均衡,它使你的数据库服务器和应用具备高可用性和容错能力。
至此,你现在可以向你的负载均衡数据库服务器添加更多的 percona XtraDB Cluster 节点了。此外,你还可以通过 ProxySQL 设置读写分离(Read/Write split)、配置 ProxySQL 分片(sharding),并建立从 ProxySQL 到 Percona XtraDB Cluster 的 SSL 连接。要了解更多关于 ProxySQL 的信息,请访问 ProxySQL 的官方文档。