Doris 负载均衡配置

当我们部署了多个 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.+。


往期推荐

常见的10种 CDC 组件和方案

零代码数据同步平台开源啦!!!

实时数仓架构选型及建议

Flink CDC零代码实现数据同步实践

请使用浏览器的分享功能分享到微信等