proxysql配置starrocks负载均衡示例

一:安装proxysql

  1. 安装相关依赖
yum install -y gnutls perl-DBD-MySQL perl-DBI perl-devel

  1. 下载安装包
wget https://github.com/sysown/proxysql/releases/download/v2.0.14/proxysql-2.0.14-1-centos7.x86\_64.rpm

  1. 解压文件
rpm2cpio proxysql-2.0.14-1-centos7.x86_64.rpm | cpio -ivdm

  1. 修改配置文件
vim etc/proxysql.cnf 

修改为用户有权限访问的目录(绝对路径)

datadir="/var/lib/proxysql"
errorlog="/var/lib/proxysql/proxysql.log"
  1. 启动
./usr/bin/proxysql -c ./etc/proxysql.cnf --no-monitor

  1. 登录
mysql -u admin -padmin -h 127.0.0.1 -P6032

二:配置proxysql

  1. 配置全局日志
SET mysql-eventslog_filename='proxysql_queries.log';
SET mysql-eventslog_default_log=1;
SET mysql-eventslog_format=2;
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

  1. 插入主节点
insert into mysql_servers(hostgroup_id, hostname, port) values(1, '172.26.194.184', 9013);

  1. 插入备节点
insert into mysql_servers(hostgroup_id, hostname, port) values(2, '172.26.194.185', 9013);
insert into mysql_servers(hostgroup_id, hostname, port) values(2, '172.26.194.186', 9013);

  1. load配置
load mysql servers to runtime;
save mysql servers to disk;

  1. 配置用户名和密码(starrocks的集群访问账号信息)
insert into mysql_users(username, password, active, default_hostgroup, `backend`, `frontend`) 
values('root', '', 1, 1, 1, 1);

这里password输入值为密文。比如root用户密码为root123,则password输入为’*FAAFFE644E901CFAFAEC7562415E5FAEC243B8B2’。具体输入的加密value可以通过链接starrocks集群后使用 password() 函数获取。示例如下:

mysql> select password('root123');
+---------------------------------------------+
| '*FAAFFE644E901CFAFAEC7562415E5FAEC243B8B2' |
+---------------------------------------------+
| *FAAFFE644E901CFAFAEC7562415E5FAEC243B8B2   |
+---------------------------------------------+
1 row in set (0.01 sec)
  1. load配置
load mysql users to runtime; 
save mysql users to disk;

  1. 写入代理规则
insert into mysql_query_rules(rule_id, active, match_digest, destination_hostgroup, mirror_hostgroup, apply) values(1, 1, '.', 1, 2, 1);

  1. load配置
load mysql query rules to runtime; 
save mysql query rules to disk;

三:连接数据库

ProxySQL 默认有两个端口,其中 6032 作为 ProxySQL 的管理端口,6033 作 ProxySQL 的流量转发端口(即对外提供服务的端口)

在原有的连接方式中,我们需要连接 cluster1 的 StarRocks 集群,可以通过任意一台 FE 节点的 endpoint 对数据库进行操作:

mysql -uroot -P9030 -h 172.26.194.184
mysql -uroot -P9030 -h 172.26.194.185
mysql -uroot -P9030 -h 172.26.194.186

当使用了 ProxySQL 进行流量转发的时候,我们需要连接 ProxySQL 的 6033 端口。如我们需要查询 StarRocks 集群中 test.t1 表,可以使用以下命令:

mysql -uroot -P6033 -h 172.26.194.184 -e"select * from test.t1"

四:功能验证

mysql -uroot -P6033 -h172.26.194.184 -e"select * from qcy.t"

当前3台fe均存活

手动停掉一台fe

发现无法主节点宕机时无法正常查询

将3台节点改为同一个hostgroup_id

mysql -uadmin -padmin -P6032 -h127.0.0.1
update mysql_servers set hostgroup_id=1;
load mysql servers to runtime;
save mysql servers to disk;

再次查询

结论:

proxysql可以将查询负载均衡到配置的节点,当前端需要做节点宕机自动转发服务的话,需要将fe配置同一hostgroup_id。

2.1.6版本,使用ProxySQL代理后,程序连接报错:unknown system variable transaction_isolation
请问应该如何处理

1赞

使用ProxySQL代理后,程序连接报错:unknown system variable transaction_isolation
请问应该如何处理
是有这个问题