当我们部署了多个 FE 之后,如何实现 Doris 的高可用呢?其实方式比较多,比如以下这些方式。本文重点分享一下如何使用 ProxySQL 中间件来实现 Doris 高可用。
我们可以通过 nginx 来实现负载均衡;
也可以在代码层面进行重试或者负载均衡,当检测到当前连接挂掉之后切换到其他连接上进行重试;
使用 jdbc 的自动重试机制:
jdbc:mysql://[host1][:port1],[host2][:port2][,[host3][:port3]]…[/[database]][?propertyName1=propertyValue1[&propertyName2=propertyValue2]…]使用 ProxySQL 中间件
一、什么是 ProxySQL
ProxySQL 是强大的 Mysql 代理层,实际生产环境中用的也比较多,它可以:
实现读写分离
支持 Query 路由功能
支持动态指定某个 SQL 进行 cache
支持动态加载配置
故障切换
SQL 过滤
Doris 的 FE 进程负责接收用户连接和查询请求,其本身是可以横向扩展且高可用的,但是需要用户在多个 FE 上架设一层 proxy,来实现自动的连接负载均衡。
二、安装 ProxySQL
由于我们服务器版本是 CentOS,这里我们使用 yum 的方式来安装。
1. 添加 ProxySQL 的 yum 源
vim /etc/yum.repos.d/proxysql.repo
----------------------------------
[proxysql_repo]
name= ProxySQL YUM repository
baseurl=http://repo.proxysql.com/ProxySQL/proxysql-1.4.x/centos/\$releasever
gpgcheck=1
gpgkey=http://repo.proxysql.com/ProxySQL/repo_pub_key
2. 安装命令
yum clean all
yum makecache
yum -y install proxysql
3. 查看 ProxySQL 版本
proxysql --version
------------------
ProxySQL version 1.4.16-23-gf954ef3, codename Truls
4. 设置开机自启
systemctl enable proxysql && systemctl start proxysql
5. 端口说明
proxysql 启动之后会监听2个端口,默认为 6032 和 6033。
6032:ProxySQL 的管理端口
6033:ProxySQL 对外提供服务的端口
三、配置 ProxySQL
配置文件:/etc/proxysql.cnf
数据文件:/var/lib/proxysql/proxysql.db
注意:每次修改 proxysql.cnf 前,需要先删除 proxysql.db 文件
1. 我们可以修改 proxysql.cnf 中的一些参数,比如:
连接管理端的用户名与密码:admin_credentials="admin:admin"
管理端口:mysql_ifaces="0.0.0.0:6032"
代理端口:interfaces="0.0.0.0:6033"
2. 连接 ProxySQL 管理端:
mysql -uadmin -padmin -P6032 -h127.0.0.1 --default-auth=mysql_native_password
四、配置 Doris FE
1. 连接到 ProxySQL 管理端后,通过如下命令即可将 FE 添加到 ProxySQL 中:
insert into mysql_servers(hostgroup_id, hostname, port) values(10, 'fe01', 9030);
insert into mysql_servers(hostgroup_id, hostname, port) values(10, 'fe02', 9030);
2. 查看 FE 状态:
select * from mysql_servers\G
3. 将 FE 的 server 配置加载到 runtime ,并存盘:
load mysql servers to runtime;
save mysql servers to disk;
注意:
hostgroup_id 为10表示写组,为20表示读组,这里不需要读写分离,所以设置为10
如果在插入过程中,出现如下报错:ERROR 1045 (#2800): UNIQUE constraint failed: mysql_servers.hostgroup_id, mysql_servers.hostname, mysql_servers.port。说明已经配置过了,需要删除对应 host 的配置。
五、监控 Doris 节点
1. 创建一个用于监控的用户名
-- 在 FE master 节点执行
mysql -P9030 -uroot -p
----------------------
create user monitor@'192.168.10.%' identified by '123456';
grant ADMIN_PRIV on *.* to monitor@'192.168.10.%';
2. 再回到 ProxySQL 配置监控
set mysql-monitor_username='monitor';
set mysql-monitor_password='monitor';
load mysql servers to runtime;
save mysql servers to disk;
3. 验证监控
ProxySQL 监控模块的指标都保存在 monitor 库的各种 log 表中,比如:
连接监控:mysql_server_connect_log
心跳监控:mysql_server_ping_log
六、配置 mysql_users
以上配置都是配置 doris 节点的,下面来配置一下 Doris 用户,包括发送 SQL 语句的用户、SQL语句的路由规则、SQL 查询的缓存、SQL 语句的重写。
假设 Doris 有用户 root,则在 ProxySQL 中进行如下配置:
insert into mysql_users(username,password,default_hostgroup) values('root','root',10);
load mysql users to runtime;
save mysql users to disk;
注意:
username:连接 ProxySQL 的用户名
password:连接 ProxySQL 的密码
default_hostgroup:该用户名默认的路由。例如,指定 root 用户的该字段值为10时,则使用 root 用户发送的 SQL 语句默认将路由到 hostgroup_id=10 组中的某个节点。
只有 active=1 的用户才是有效的用户。
transaction_persistent:值为1时,表示事务持久化,如果这个值不是1,需要修改为1.update mysql_users set transaction_persistent=1 where username='root';load mysql users to runtime;save mysql users to disk;
七、通过 ProxySQL 连接 Doris
跟普通连接 mysql 语法一样,只是端口要换成 6033。
mysql -uroot -p -P6033 -h127.0.0.1
注意:如果出现以下错误:java.sql.SQLException: Unknown system variable 'performance_schema''。则需要更换 mysql 的驱动版本为8.+。
往期推荐