Arm64版本的ProxySQL功能测试

作者: zhaorenhai

ProxySQL是业界著名的数据库代理层软件,可以实现数据库的读写分离,负载均衡等高可用功能。可对接的数据库有MySQL,MariaDB,Percona。 最近ProxySQL 2.0.15版本开始支持arm64平台,见如下链接:https://github.com/sysown/proxysql/releases/tag/v2.0.15 , 其中centos,ubuntu,debian等系统都有对应的arm64的版本。 本文准备在MariaDB数据库上测试一下最新的ProxySQL arm64版本,也给其他有兴趣的小伙伴提供个参考。

测试环境,还是采用华为云上的云服务器,共三台,一台用来装ProxySQL,另外两台一台装MariaDB主库,另外一台装MariaDB从库。OS我们采用Ubuntu 18.04版本。MariaDB就用OS自带的10.1版本。

首先搭建一个MariaDB的主从复制高可用环境,具体步骤可以参考这篇博客:https://kunpengcompute.github.io/2020/10/26/mariadb-ji-qun-zai-x86-he-arm64-shang-de-hun-he-bu-shu/ 虽然这篇博客的里面的OS是用的openEuler,不过除了软件安装的命令和配置文件的路径有些许差异外,其他基本都一样。

在主数据库上创建两个数据库账户,一个是ProxySQL用来监控数据库的,一个是ProxySQL用来调度业务请求的

1
2
3
4
5
create user 'monitor'@'192.168.%' identified by 'monitorpassword';
grant all privileges on *.* to 'monitor'@'192.168.%' with grant option;
create user 'proxysql'@'192.168.%' identified by 'proxypassword';
grant all privileges on *.* to 'proxysql'@'192.168.%' with grant option;
flush privileges;

然后在调度节点上安装并启动ProxySQL:

1
2
3
4
wget https://github.com/sysown/proxysql/releases/download/v2.0.15/proxysql_2.0.15-ubuntu18_arm64.deb
dpkg -i proxysql_2.0.15-ubuntu18_arm64.deb
apt install mariadb-client
systemctl start proxysql

登陆ProxySQL:

mysql -uadmin -padmin -h 127.0.0.1 -P 6032

ProxySQL上的配置,包括创建组,创建用户,创建数据库服务器,创建读写分离的调度规则,并将这些配置持久化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
insert into mysql_replication_hostgroups ( writer_hostgroup, reader_hostgroup, comment) values (10,20,'proxy');
insert into mysql_servers(hostgroup_id,hostname,port) values (10,'192.168.0.204',3306);
insert into mysql_servers(hostgroup_id,hostname,port) values (20,'192.168.0.64',3306);
UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';
UPDATE global_variables SET variable_value='monitorpassword' WHERE variable_name='mysql-monitor_password';
insert into mysql_users (username,password,default_hostgroup) values ('proxysql','proxypassword',10);
insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply) values (1,1,'^select.*for update$',10,1);
insert into mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply) values (2,1,'^select',20,1);
commit;
load mysql servers to runtime;
save mysql servers to disk;
load mysql variables to runtime;
save mysql variables to disk;
load mysql users to runtime;
save mysql users to disk;
load mysql query rules to runtime;
save mysql query rules to disk;

用proxysql用户来登陆,注意端口号这次是6033:

mysql -uproxysql -pproxypassword -h 127.0.0.1 -P 6033

执行一些sql,比如创建数据库,创建表,进行一些插入,查询之类的:

1
2
3
4
5
6
create database test;
use test;
create table test_table(col1 varchar(10), col2 int);
insert into test_table values ('hello', 999);
commit;
select * from test_table;

然后再用admin用户登陆ProxySQL管理端:

mysql -uadmin -padmin -h 127.0.0.1 -P 6032

查询一些调度记录,数据库监控情况等等:

1
2
3
4
select * from monitor.mysql_server_connect_log;
select * from mysql_server_ping_log limit 10;
select * from mysql_server_read_only_log limit 10;
select hostgroup,schemaname,username,digest_text,count_star from stats_mysql_query_digest;

根据查询的结果可以看出来,的确读写已经被分离到了不同的数据库。

参考文档:

https://www.cnblogs.com/keme/p/12290977.html#1proxysql-%E4%BB%8B%E7%BB%8D

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×