ProxySQL 是一款高性能的 MySQL 集群代理/负载均衡器,是基于 GPL 许可的开源免费软件。ProxySQL 可以处理数以万计的并发连接,从而有效的降低 MySQL 数据库的执行压力,提升系统性能。ProxySQL 的管理是通过一个类 SQL 命令行终端来完成。

本文将详细讲解如何在 CentOS 7 系统安装配置 MySQL 集群负载均衡器 ProxySQL。

1] ProxySQL 特性

  • 高性能
  • 高效任务管理
  • 查询缓存
  • 查询路由选择
  • 故障迁移
  • 0 中断配置修改
  • 应用层代理
  • 跨平台
  • 多拓扑结构支持
  • 防火墙功能

2] 演示环境系统配置

ProxySQL 负责均衡器:

  • Hostname:proxysql.rultr.com
  • IP Address:172.16.200.1
  • Operating System:CentOS 7.6

MySQL 集群节点1:

  • Hostname:node1.rultr.com
  • IP Address:172.16.200.2
  • Operating System:CentOS 7.6

MySQL 集群节点2:

  • Hostname:node2.rultr.com
  • IP Address:172.16.200.3
  • Operating System:CentOS 7.6

方便起见,本文 MySQL 数据库使用 MariaDB Galera replication 集群(搭建教程在这里),当然使用 MySQL 或者 Percona 也可以。

3] CentOS 7  系统安装 ProxySQL

之前已经说过,ProxySQL 要通过类 SQL 命令行来进行管理,要使用 ProxySQL,当然要安装 MySQL 的客户端。CentOS 7 系统使用 yum 方式安装即可:

# yum install mariadb

之后再安装 ProxySQL,ProxySQL 的最新版为2.0.6,使用如下命令安装:

# yum install https://github.com/sysown/proxysql/releases/download/v2.0.6/proxysql-2.0.6-1-centos7.x86_64.rpm

安装成功后,使用如下命令启动 ProxySQL 并设置开机启动:

# systemctl start proxysql.service
# systemctl enable proxysql.service

最后,在CentOS 7 的防火墙中放行 ProxySQL 使用的端口6033(是不是感觉有点熟悉呢,端口号是 MySQL 默认端口3306的倒序):

# firewall-cmd --add-port=6033/tcp --zone=public --permanent
# firewall-cmd --reload

4] CentOS 7  系统配置 ProxySQL

ProxySQL 默认的管理端口为6032,我们可以使用 MySQL 客户端通过此端口连接到 ProxySQL 的管理面板,然后根据我们的需求配置负载均衡器。

管理面板默认的用户名密码均为”admin”,使用如下命令连接 ProxySQL 的管理端:

# mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt='ProxySQL> '

登录成功后,就可以使用类似 SQL 的语句来配置 ProxySQL。

首先修改”admin”用户默认密码:

ProxySQL> UPDATE global_variables SET variable_value='admin:RULTR' WHERE variable_name='admin-admin_credentials';
ProxySQL> LOAD ADMIN VARIABLES TO RUNTIME;
ProxySQL> SAVE ADMIN VARIABLES TO DISK;

之后,将 MySQL 集群中的节点添加到 ProxySQL 的服务器池中:

ProxySQL> INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'172.16.200.2',3306);
ProxySQL> INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'172.16.200.3',3306);

添加完成后,使用如下语句查询一下服务器池中主机的状态:

ProxySQL> SELECT hostgroup_id,hostname,port,status FROM mysql_servers;

图.1 ProxySQL 查询服务器池主机状态

由图.1 可以看出,ProxySQL 服务器池中已经有两台主机,并且状态为”ONLINE”,表示 MySQL 服务器已经添加成功。

5] 配置 ProxySQL 节点状态监控

ProxySQL 需要使用 MySQL 服务器集群中的用户来监控各节点的状态。

登录到 MySQL 集群中的任意一台主机,使用如下语句创建一个供 ProxySQL 使用的用户”monitor”:

MariaDB [(none)]> CREATE USER 'monitor'@'%' IDENTIFIED BY 'rultr';
MariaDB [(none)]> GRANT SELECT ON sys.* TO 'monitor'@'%';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT

用户添加完成后,再次操作 ProxySQL 主机,首先定义监视用户为全局变量:

ProxySQL> UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';
ProxySQL> UPDATE global_variables SET variable_value='rultr' WHERE variable_name='mysql-monitor_password';

之后,用如下语句设置监视时间间隔:

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');

最后,使用如下语句让全局变量生效并保存:

ProxySQL> LOAD MYSQL VARIABLES TO RUNTIME;
ProxySQL> LOAD MYSQL SERVERS TO RUNTIME;
ProxySQL> SAVE MYSQL VARIABLES TO DISK;
ProxySQL> SAVE MYSQL SERVERS TO DISK;

现在,就可以通过 ProxySQL 来查询 MySQL 节点的连接信息了:

ProxySQL> SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 10;

图.2 ProxySQL 查询 MySQL 节点连接日志

6] 配置 MySQL 集群 ProxySQL 用户

ProxySQL 的目的就是减轻 MySQL 数据库的压力,终端用户不需要直接连接 MySQL 数据库,只要连接 ProxySQL 即可,相当于 ProxySQL 充当了查询代理的角色。

为此,我们需要在 MySQL 数据库中创建供 ProxySQL 操作的数据库”PROXYSQL”和用户”proxysql”,实现语句如下:

MariaDB [(none)]> CREATE DATABASE PROXYSQL;
MariaDB [(none)]> CREATE USER 'proxysql'@'%' IDENTIFIED BY 'proxysql';
MariaDB [(none)]> GRANT ALL ON PROXYSQL.* TO 'proxysql'@'%';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT

现在,在 ProxySQL 主机配置添加 MySQL 集群用户信息:

ProxySQL> INSERT INTO mysql_users(username,password,default_hostgroup) VALUES ('proxysql','proxysql',1);
ProxySQL> LOAD MYSQL USERS TO RUNTIME;
ProxySQL> SAVE MYSQL USERS TO DISK;

现在,就可以通过 ProxySQL 均衡器连接到 MySQL 集群了,在 ProxySQL 主机上输入如下命令登录:

# mysql -u proxysql -pproxysql -h 127.0.0.1 -P 6033

登录成功后,做一些简单的查询:

MySQL [(none)]> SELECT @@hostname;
MySQL [(none)]> SHOW DATABASES;

图.3 通过 ProxySQL 查询 MySQL 数据库

从图.3 可以看出,通过 ProxySQL,可以连接到 MySQL 集群,并且得到正确的查询结果,ProxySQL 负载均衡器工作完全正常。

以上就是关于 CentOS 7 系统安装和配置 MySQL 集群负载均衡 ProxySQL 的全部内容。

发表评论

您的电子邮箱地址不会被公开。