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 的全部内容。