1. 通过 ProxySQL 均衡负载
1.1 安装相关依赖
yum install -y gnutls perl-DBD-MySQL perl-DBI perl-devel
1.2 下载并解压 ProxySQL 。
wget https://github.com/sysown/proxysql/releases/download/v2.0.14/proxysql-2.0.14-1-centos7.x86\_64.rpm
-- 安装文件
rpm -ivh proxysql-2.0.14-1-centos7.x86_64.rpm
-- 查看相应安装文件路径,有哪些文件
rpm -ql proxysql
例如:如下路径
/etc/logrotate.d/proxysql
/etc/proxysql.cnf
/etc/systemd/system/proxysql-initial.service
/etc/systemd/system/proxysql.service
/usr/bin/proxysql
/usr/share/proxysql/tools/proxysql_galera_checker.sh
/usr/share/proxysql/tools/proxysql_galera_writer.pl
在测试机器 172.00.01.03 安装
1.3 修改配置文件 /etc/proxysql.cnf
修改以下配置项为您有访问权限的目录(绝对路径)。
datadir = "/var/lib/proxysql"
errorlog = "/var/lib/proxysql/proxysql.log"
1.4 启动 ProxySQL。
1)启动方式一: systemctl start proxysql
2)启动方式二: systemctl restart proxysql
3)查看状态:
ss -antl
# systemctl enable proxysql -- ??
# chkconfig proxysql on -- ??
ss -anlp|grep proxysql
netstat -tunlp -- 端口监听
systemctl status proxysql
#(StarRocks 启动命令异常) ./usr/bin/proxysql -c ./etc/proxysql.cnf --no-monitor
1.5 登录 StarRocks(管理 端口6032)。
mysql -u admin -padmin -h 127.0.0.1 -P6032 -- 这里是管理方式的登录
备注:这里登录的是ProxySQL(如果使用 StarRocks 账户是无法登录的)
ProxySQL 默认包含两个端口,其中 6032 是 ProxySQL 的管理端口,
6033 是 ProxySQL 的流量转发端口,即对外提供服务的端口;
用户管理
a: 普通用户只能查看
select @@admin-stats_credentials; //查看当前的普通用户和密码
b: 增加普通用户
set admin-stats_credentials='stats:stats;dev_user:dev_pswd99'; //添加普通用户 dev_user 密码为 dev_pswd99
c: 是账户生效
load admin variables to runtime;
save admin variables to disk;
mysql -udev_user -pdev_pswd99 -h172.00.01.03 -P6032 // 通用用户登录
登录后,智能看到三个库
1.6 配置全局日志
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.7 插入主节点以及 Observer 节点并读取配置
ProxySQL 配置后端 StarRocks FE
insert into mysql_servers(hostgroup_id, hostname, port) values(1, '172.00.01.02', 9030);
insert into mysql_servers(hostgroup_id, hostname, port) values(1, '172.00.01.03', 9030);
insert into mysql_servers(hostgroup_id, hostname, port) values(1, '172.00.01.04', 9030);
insert into mysql_servers(hostgroup_id, hostname, port) values(1, '172.00.01.05', 9030);
insert into mysql_servers(hostgroup_id, hostname, port) values(1, '172.00.01.06', 9030);
load mysql servers to runtime;
save mysql servers to disk;
-- 查看配置情况
select * from mysql_servers\G;
-- 首先在后端master主数据节点上创建一个用于监控的用户名
在StarRocks fe master 主数据库节点行执行:
# mysql -P9030 -uroot -p
mysql -h172.00.01.03 -P9030 -uroot -proot_123
mysql> create user monitor@'XXX.XXX.XXX.%' identified by 'pwsd_123';
create user monitor@'172.19.135.%' identified by 'pwsd_123';
mysql> grant ADMIN_PRIV on *.* to monitor@'XXX.XXX.XXX.%';
grant ADMIN_PRIV on *.* to monitor@'172.00.01.%';
然后回到 mysql-proxy 代理层节点上配置监控
-- mysql -uadmin -padmin -P6032 -h127.0.0.1
MySQL > set mysql-monitor_username='monitor';
MySQL > set mysql-monitor_password='pwsd_123';
-- 修改后,加载到RUNTIME,并保存到disk
MySQL > load mysql variables to runtime;
MySQL > save mysql variables to disk;
-- 使用root 用户登录
mysql -uroot -proot_123 -P6033 -h172.00.01.03 -e "show databases;" -- root 这个是无法登录
-- 增加普通用户
首先,在 StarRocks FE master主数据库节点上执行:
mysql> create user StarRocks_user@'%' identified by 'Strk_user@09';
mysql> grant ADMIN_PRIV on *.* to StarRocks_user@'%';
-- 然后回到mysql-proxy代理层节点,配置 mysql_users表,将刚才的两个用户添加到该表中。
admin> insert into mysql_users(username,password,default_hostgroup) values('root','root_123',1);
admin> insert into mysql_users(username,password,default_hostgroup) values('StarRocks_user','Strk_user@09',1);
备注:这里的坑是 账户密码要和 StarRocks 保持一致;
-- 加载用户到运行环境中,并将用户信息保存到磁盘
admin> load mysql users to runtime;
admin> save mysql users to disk;
-- 查看表结构
admin> select * from mysql_users\G
-- 链接查看 StarRocks数据(以下测试成功)
mysql -uStarRocks_user -pStrk_user@09 -P6033 -h172.00.01.03 -e "show databases;"
mysql -uroot -proot_123 -P6033 -h172.00.01.03 -e "show databases;"
# mysql -uStarRocks_user -pStrk_user@09 -P6033 -h172.00.01.03
报错:ERROR 9001 (HY000) at line 1: Max connect timeout reached while reaching hostgroup 1 after 10000m
这个时候发现出错,并没有转发到后端真正的StarRocks fe上
通过日志看到有set autocommit=0 这样开启事务
检查配置发现:
mysql-forward_autocommit=false
mysql-autocommit_false_is_transaction=false
我们这里不需要读写分离,只需要将这两个参数通过下面语句直接搞成true就可以了
-- 客户端执行(使用 6032 端口进去)
mysql> UPDATE global_variables SET variable_value='true' WHERE variable_name='mysql-forward_autocommit';
mysql> UPDATE global_variables SET variable_value='true' WHERE variable_name='mysql-autocommit_false_is_transaction';
-- 保存
mysql> load mysql variables to runtime;
mysql> save mysql variables to disk;
1.8 配置用户名和密码并读取配置(这里配置的是 6032 管理用户)。
insert into mysql_users(username, password, active, default_hostgroup, backend, frontend)
values('root', 'root_123', 1, 1, 1, 1);
load mysql users to runtime;
save mysql users to disk;
备注:必须在MySQL 下生产 select password('root_123');
1.9 写入代理规则并读取配置。
insert into mysql_query_rules(rule_id, active, match_digest, destination_hostgroup, mirror_hostgroup, apply) values(1, 1, '.', 1, 2, 1);
load mysql query rules to runtime;
save mysql query rules to disk;
备注:特殊命令说明
一般在内存那层修改 ,然后保存到运行系统,保存到磁盘数据库系统
load xxx to runtime;
save xxx to disk;
完成以上步骤后,您可以通过 ProxySQL 经由 6033 端口对数据库进行操作。
---------------
---------------
-- 以下进行测试 --
mysql -uStarRocks_user -pStrk_user@09 -P6033 -h172.00.01.03 -e "show databases;"
---------------------------------------
1. ProxySQL 一些基本维护问题
---------------------------------------
官方文档
-- StarRocks 官网写的比较粗糙,存在部分问题,不准;
https://docs.starrocks.io/zh-cn/2.3/administration/Load_balance
-- doris 官网更详细,更准确
https://doris.apache.org/zh-CN/docs/dev/admin-manual/cluster-management/load-balancing