在 CentOS 7 上为 MySQL 安装 ProxySQL 负载均衡器

ProxySQL 是 MySQL 数据库集群的高性能代理/负载平衡器。

ProxySQL 是免费和开源的,它在 GPL 许可下分发。
ProxySQL 支持数千个并发连接。
ProxySQL 可通过类似 SQL 的命令行界面进行高度定制。

在本文中,我们将在 CentOS 7 上为 MySQL 集群安装 ProxySQL 负载均衡器。

为 MySQL 集群配置 ProxySQL 用户

以 root 用户身份使用 ssh 连接 percona-01.onitroad.com。

使用 mysql 命令登录 MySQL 数据库实例并执行以下命令以创建数据库用户。

mysql> CREATE USER 'testuser'@'%' IDENTIFIED BY '123';
Query OK, 0 rows affected (1.19 sec)
mysql> GRANT ALL ON RECIPES.* TO 'testuser'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.09 sec)
mysql> EXIT
Bye

使用 ssh 作为 root 用户连接到 proxysql-01.onitroad.com。

登录到 ProxySQL 管理面板并执行以下命令以在 ProxySQL 配置中添加相同的 MySQL 数据库用户。

ProxySQL> INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('testuser','123',1);
Query OK, 1 row affected (0.00 sec)
ProxySQL> LOAD MYSQL USERS TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)
ProxySQL> SAVE MYSQL USERS TO DISK;
Query OK, 0 rows affected (0.01 sec)

现在通过 ProxySQL 负载均衡器连接到 MySQL 数据库集群。

[root@proxysql-01 ~]# mysql -u testuser -p123 -h 127.0.0.1 -P6033
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.5.30 (ProxySQL)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> select @@hostname;
+------------------------+
| @@hostname             |
+------------------------+
| percona-01.onitroad.com |
+------------------------+
1 row in set (0.00 sec)
MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| RECIPES            |
+--------------------+
2 rows in set (0.20 sec)

我们已经通过 ProxySQL 负载均衡器连接到 percona-01.onitroad.com 节点。
它表明我们的 ProxySQL 负载均衡器工作正常。

在 CentOS 7 上为 MySQL 安装 ProxySQL 负载均衡器

我们需要 MySQL 客户端工具来连接 ProxySQL 管理面板。
因此,我们使用 yum 命令安装 mariadb-client。

[root@proxysql-01 ~]# yum install -y mariadb

ProxySQL v2.0.6 可在 GitHub 上下载。

复制所需包的 URL 并使用 yum 命令在 CentOS 7 服务器上安装 ProxySQL。

[root@proxysql-01 ~]# yum install -y https://github.com/sysown/proxysql/releases/download/v2.0.6/proxysql-2.0.6-1-centos7.x86_64.rpm

启用并启动 ProxySQL 服务。

[root@proxysql-01 ~]# systemctl enable proxysql.service
proxysql.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig proxysql on
[root@proxysql-01 ~]# systemctl start proxysql.service

在 Linux 防火墙中允许 ProxySQL 服务端口 6033/tcp(它是 MySQL 默认端口 3306 的反向)。

[root@proxysql-01 ~]# firewall-cmd --permanent --add-port=6033/tcp
success
[root@proxysql-01 ~]# firewall-cmd --reload
success
https://onitroad.com 更多教程

在 CentOS 7 上为 MySQL 配置 ProxySQL 负载均衡器

ProxySQL 在默认端口 6032/tcp 上运行其管理服务。
我们可以使用 MySQL 客户端工具连接到 ProxySQL 管理面板并根据我们的要求配置负载均衡器。

ProxySQL 的默认管理用户是 admin ,密码为 admin 。

[root@proxysql-01 ~]# mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='ProxySQL> '
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.30 (ProxySQL Admin Module)
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
ProxySQL>

更改 ProxySQL 管理员用户的默认密码。

ProxySQL> UPDATE global_variables SET variable_value='admin:123' WHERE variable_name='admin-admin_credentials';
Query OK, 1 row affected (0.00 sec)
ProxySQL> LOAD ADMIN VARIABLES TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)
ProxySQL> SAVE ADMIN VARIABLES TO DISK;
Query OK, 32 rows affected (0.00 sec)

将我们的后端数据库服务器(MySQL、MariaDB 或者 Percona)添加到 ProxySQL 服务器池。

我们假设我们在配置 ProxySQL 负载均衡器之前已经配置了 MySQL 节点之间的复制。

ProxySQL> INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'192.168.1.209',3306);
Query OK, 1 row affected (0.00 sec)
ProxySQL> INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'192.168.1.208',3306);
Query OK, 1 row affected (0.00 sec)

查询 msql_servers 表以验证记录。

ProxySQL> SELECT hostgroup_id,hostname,port,status FROM mysql_servers;
+--------------+-----------------+------+--------+
| hostgroup_id | hostname        | port | status |
+--------------+-----------------+------+--------+
| 1            | 192.168.1.209 | 3306 | ONLINE |
| 1            | 192.168.1.208 | 3306 | ONLINE |
+--------------+-----------------+------+--------+
2 rows in set (0.00 sec)

配置 ProxySQL 节点监控

ProxySQL 需要 MySQL 集群中的数据库用户来监控 MySQL 节点。

以 root 用户身份使用 ssh 连接 percona-01.onitroad.com。

登录 MySQL 数据库实例并执行以下命令以创建具有必要权限的监控用户。

[root@percona-01 ~]# mysql -u root -p123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.7.27-30-57-log Percona XtraDB Cluster (GPL), Release rel30, Revision 64987d4, WSREP version 31.39, wsrep_31.39
Copyright (c) 2009-2019 Percona LLC and/or its affiliates
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE USER 'monitor'@'%' IDENTIFIED BY 'Ahm3r';
Query OK, 0 rows affected (0.04 sec)
mysql> GRANT SELECT ON sys.* TO  'monitor'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> EXIT
Bye

使用 ssh 作为 root 用户连接到 proxysql-01.onitroad.com。

使用 mysql 命令登录到 ProxySQL 管理面板。

在全局变量中定义监控用户名/密码。

ProxySQL> UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';
Query OK, 1 row affected (0.00 sec)
ProxySQL> UPDATE global_variables SET variable_value='Ahm3r' WHERE variable_name='mysql-monitor_password';
Query OK, 1 row affected (0.00 sec)

配置监视间隔如下。

ProxySQL> UPDATE global_variables SET variable_value='2000' WHERE variable_name IN ('mysql-monitor_connect_interval','mysql-monitor_ping_interval','mysql-monitor_read_only_interval');
Query OK, 3 rows affected (0.00 sec)

将更改加载到运行系统中使更改生效。

ProxySQL> LOAD MYSQL VARIABLES TO RUNTIME;
Query OK, 0 rows affected (0.01 sec)
ProxySQL> LOAD MYSQL SERVERS TO RUNTIME;
Query OK, 0 rows affected (0.01 sec)

将更改保存到磁盘以保持持久性。

ProxySQL> SAVE MYSQL VARIABLES TO DISK;
Query OK, 121 rows affected (0.00 sec)
ProxySQL> SAVE MYSQL SERVERS TO DISK;
Query OK, 0 rows affected (0.06 sec)

查询连接日志表,验证ProxySQL与MySQL集群节点的连通性。

ProxySQL> SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 10;
+-----------------+------+------------------+-------------------------+---------------+
| hostname        | port | time_start_us    | connect_success_time_us | connect_error |
+-----------------+------+------------------+-------------------------+---------------+
| 192.168.1.209 | 3306 | 1569689633319939 | 1248                    | NULL          |
| 192.168.1.208 | 3306 | 1569689633280911 | 1291                    | NULL          |
| 192.168.1.208 | 3306 | 1569689631309213 | 1193                    | NULL          |
| 192.168.1.209 | 3306 | 1569689631278225 | 1107                    | NULL          |
| 192.168.1.208 | 3306 | 1569689629316735 | 1252                    | NULL          |
| 192.168.1.209 | 3306 | 1569689629277982 | 1415                    | NULL          |
| 192.168.1.209 | 3306 | 1569689627305699 | 1168                    | NULL          |
| 192.168.1.208 | 3306 | 1569689627274188 | 1095                    | NULL          |
| 192.168.1.209 | 3306 | 1569689625308582 | 1276                    | NULL          |
| 192.168.1.208 | 3306 | 1569689625273728 | 1252                    | NULL          |
+-----------------+------+------------------+-------------------------+---------------+
10 rows in set (0.00 sec)

安装环境

我们使用的3台服务器配置如下:

ProxySQL 负载均衡器:

  • CPU - 3.4 GHz(2 核)
  • 内存 - 1 GB
  • 存储 - 20 GB
  • 主机名 - proxysql-01.onitroad.com
  • IP 地址 - 192.168.1.210 /24
  • 操作系统 - CentOS 7.6

MySQL 集群节点 1:

  • CPU - 3.4 GHz(2 核)
  • 内存 - 1 GB
  • 存储 - 60 GB
  • 主机名 - percona-01.onitroad.com
  • IP 地址 - 192.168.1.209 /24
  • 操作系统 - CentOS 7.6

MySQL 集群节点 2:

  • CPU - 3.4 GHz(2 核)
  • 内存 - 1 GB
  • 存储 - 60 GB
  • 主机名 - percona-02.onitroad.com
  • IP 地址 - 192.168.1.208 /24
  • 操作系统 - CentOS 7.6
日期:2020-09-17 00:11:10 来源:oir作者:oir