目录
1.Doris简介
Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库。Doris整体架构如下图所示,Doris 架构非常简单,只有两类进程
- Frontend(FE),主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。
- Backend(BE),主要负责数据存储、查询计划的执行。
Doris 采用 MySQL 协议,高度兼容 MySQL 语法,支持标准 SQL,用户可以通过各类客户端工具来访问 Doris,并支持与 BI 工具的无缝对接。
2.集群规划
2.1硬盘空间计算
在 Doris 集群中,FE 主要用于元数据存储,包括元数据 edit log 和 image。BE 的磁盘空间主要用于存放数据,需要根据业务需求计算。
组件 | 磁盘空间说明 |
---|---|
FE | 元数据一般在几百 MB 到几 GB,建议不低于 100GB |
BE | Doris 默认 LZ4 压缩方式进行存储,压缩比在 0.3 - 0.5 左右磁盘空间需要按照总数据量 * 3(3 副本)计算需要预留出 40% 空间用作后台 compaction 以及临时数据的存储 |
Broker | 如需部署 Broker,通常情况下可以将 Broker 节点与 FE / BE 节点部署在同一台机器上 |
2.2集群规划
机器 | 服务 |
---|---|
192.168.179.131 (01.weisx.com) | FE、BE |
192.168.179.132 (02.weisx.com) | FE、BE |
192.168.179.133 (03.weisx.com) | FE、BE |
- FE 角色分为 Follower 和 Observer(Leader 为 Follower 组中选举出来的一种角色)。FE 节点至少1 个 Follower(FFollower 的数量必须为奇数,Observer 数量随意)。当部署 1 个 Follower 和 1 个 Observer 时,可以实现读高可用。当部署 3 个 Follower 时,可以实现读写高可用(HA)。
- FE 角色分为 Mix(混合节点)和Computation(计算节点)。BE节点默认是混合节点,该类型的节点既可以参与计算,也负责 Doris 数据的存储;计算节点作为一种特殊类型的 BE 节点,没有数据存储能力,只负责数据计算,主要使用场景是查询外部数据源。
- Doris的性能与节点数量及配置正相关。在最少4台机器(一台 FE,三台 BE,其中一台 BE 混部一个 Observer FE 提供元数据备份),以及较低配置的情况下,依然可以平稳的运行 Doris。
如果 FE 和 BE 混部,需注意资源竞争问题,并保证元数据目录和数据目录分属不同磁盘。
以下第3到4步在192.168.179.131上操作
3.部署FE
1)解压安装
拷贝Doris安装包到01节点~/tools/目录
解压到~/opt/目录
tar -zxf apache-doris-2.0.0-bin-x64.tar.gz -C /home/weisx/opt/
创建Doris软链接
ln -s /home/weisx/opt/apache-doris-2.0.0-bin-x64 /home/weisx/opt/doris
2)创建FE元数据存储路径
3)修改FE配置文件,指定元数据存储路径及FE绑定IP
vi fe/conf/fe.conf
# 增加 JAVA_HOME 配置,指向 JDK8 的运行环境。假如我们 JDK8 位于 /home/doris/jdk8, 则设置如下
JAVA_HOME=/home/doris/jdk8# FE 监听 IP 的 CIDR 网段。默认设置为空,有 Doris 启动时自动选择一个可用网段。如有多个网段,需要指定一个网段,可以类似设置 priority_networks=92.168.0.0/24
# priority_networks =# FE 元数据存放的目录,默认是在 DORIS_HOME 下的 doris-meta 目录。已经创建,可以更改为你的元数据存储路径。
# meta_dir = ${DORIS_HOME}/doris-meta
4)启动FE
./fe/bin/start_fe.sh --daemon
5)访问FE端口,用户名:root 密码为空
http://192.168.179.131:8030/login
6)连接FE
通过MySQL客户端连接Doris FE: mysql -h192.168.179.131 -P9030 -uroot
7)查看 FE 运行状态
8)停止FE节点
./fe/bin/stop_fe.sh
4.部署BE
1)创建BE数据存储路径
2)修改BE配置文件,指定数据存储路径及BE绑定IP
vi be/conf/be.conf
# 增加 JAVA_HOME 配置,指向 JDK8 的运行环境。假如我们 JDK8 位于 /home/doris/jdk8, 则设置如下
JAVA_HOME=/home/doris/jdk8# BE 监听 IP 的 CIDR 网段。默认设置为空,有 Doris 启动时自动选择一个可用网段。如有多个网段,需要指定一个网段,可以类似设置 priority_networks=192.168.0.0/24
# priority_networks =# BE 数据存放的目录,默认是在 DORIS_HOME 下的 storage 下,默认已经创建,可以更改为你的数据存储路径
# storage_root_path = ${DORIS_HOME}/storagea
3)启动BE
./be/bin/start_be.sh --daemon
如果提示:Please set vm.max_map_count to be 2000000 under root using 'sysctl -w vm.max_map_count=2000000'.需要先配置之后再启动。
4)添加 BE 节点到集群
通过MySQL 客户端连接到 FE 之后执行下面的 SQL,将 BE 添加到集群中。
ALTER SYSTEM ADD BACKEND "192.168.179.131:9050";
5)停止BE
./be/bin/stop_be.sh
6)测试建库、建表
create database demo;
7)修改 root 和 admin 的密码
root 和 admin 用户都属于 Doris 安装完默认存在的 2 个账户。其中 root 拥有整个集群的超级权限,可以对集群完成各种管理操作,比如添加节点,去除节点。admin 用户没有管理权限,是集群中的 Superuser,拥有除集群管理相关以外的所有权限。建议只有在需要对集群进行运维管理超级权限时才使用 root 权限。
# 在 MySQL 客户端,执行类似下面的 SQL,为 root 和 admin 用户设置新密码
SET PASSWORD FOR 'root' = PASSWORD('doris-root-password');
SET PASSWORD FOR 'admin' = PASSWORD('doris-admin-password');
4.集群扩容
4.1.BE扩缩容
1)将192.168.179.131服务器上的doris文件同步到新节点服务器上
2)在新节点服务器上创建BE数据存储路径
3)修改新节点上的BE配置文件,指定数据存储路径及BE绑定IP
4)启动新节点上的BE
5)将新节点上的BE加入集群
ALTER SYSTEM ADD BACKEND "192.168.179.132:9050";
6)检查新节点BE集群情况
show backends\G;
7)参照以上1到6步添加新的BE节点
8)删除集群中的BE节点
删除 BE 节点有两种方式:DROP 和 DECOMMISSION
- DROP 语句如下:
ALTER SYSTEM DROP BACKEND "be_host:be_heartbeat_service_port";
注意:DROP BACKEND 会直接删除该 BE,并且其上的数据将不能再恢复!!!所以我们强烈不推荐使用 DROP BACKEND 这种方式删除 BE 节点。当你使用这个语句时,会有对应的防误操作提示。
- DECOMMISSION 语句如下:
ALTER SYSTEM DECOMMISSION BACKEND "be_host:be_heartbeat_service_port";
DECOMMISSION 命令用于安全删除 BE 节点。命令下发后,Doris 会尝试将该 BE 上的数据向其他 BE 节点迁移,当所有数据都迁移完成后,Doris 会自动删除该节点。
4.2.FE扩缩容
官方建议:
- Follower FE(包括 Master)的数量必须为奇数,建议最多部署 3 个组成高可用(HA)模式即可。
- 当 FE 处于高可用部署时(1个 Master,2个 Follower),我们建议通过增加 Observer FE 来扩展 FE 的读服务能力。当然也可以继续增加 Follower FE,但几乎是不必要的。
1)将192.168.179.131服务器上的doris文件同步到新节点服务器上(如果以存在则忽略)
2)在新节点服务器上创建FE元数据存储路径
3)修改新节点上的FE配置文件,指定元数据存储路径及FE绑定IP
4)启动新节点上的FE
./fe/bin/start_fe.sh --helper 192.168.179.131:9010 --daemon
--helper leader_fe_host:edit_log_port
其中 leader_fe_host 为 Master 所在节点 ip, edit_log_port 在 Master 的配置文件 fe.conf 中。--helper 参数仅在 follower 和 observer 第一次启动时才需要。
5)将新节点上的FE加入集群
将 Follower 或 Observer 加入到集群。使用 mysql-client 连接到已启动的 FE,并执行:
ALTER SYSTEM ADD FOLLOWER "192.168.179.132:9010";
或
ALTER SYSTEM ADD OBSERVER "192.168.179.132:9010";
6)检查新节点FE集群情况
show frontends\G;
7)参照以上1到6步添加新的FE节点
8)删除集群中的FE节点
使用以下命令删除对应的 FE 节点:
ALTER SYSTEM DROP FOLLOWER[OBSERVER] "fe_host:edit_log_port";
FE 缩容注意事项:
- 删除 Follower FE 时,确保最终剩余的 Follower(包括 Leader)节点为奇数。
4.3.FE负载均衡
当部署多个 FE 节点时,用户可以在多个 FE 之上部署负载均衡层来实现 Doris 的高可用。
- 方式1:JDBC Connector
如果使用 mysql jdbc connector 来连接 Doris,可以使用 jdbc 的自动重试机制:jdbc:mysql:loadbalance://[host:port],[host:port].../[database][?propertyName1][=propertyValue1][&propertyName2][=propertyValue
- 方式2:Nginx TCP反向代理方式
1)安装nginx时,配置--with-stream参数使nginx支持TCP协议
./configure --prefix=/usr/local/nginx --with-stream --with-http_ssl_module --with-http_gzip_static_module --with-http_stub_status_module
2)配置反向代理
stream {
#mysql连接负载均衡
upstream doris-mysql{
hash $remote_addr consistent;
server 192.168.179.131:9030 weight=1 max_fails=2 fail_timeout=60s;
server 192.168.179.132:9030 weight=1 max_fails=2 fail_timeout=60s;
server 192.168.179.133:9030 weight=1 max_fails=2 fail_timeout=60s;
##注意这里如果是多个FE,加载这里就行了
}
###这里是配置代理的端口,超时时间等
server {
listen 19030;
proxy_connect_timeout 300s;
proxy_timeout 300s;
proxy_pass doris-mysql;
}
}
http {
#web UI 负载均衡
upstream doris-web{
server 172.22.197.238:8030 weight=3;
server 172.22.197.239:8030 weight=4;
server 172.22.197.240:8030 weight=4;
ip_hash;
}
server {
listen 18030;
if ($request_uri ~ _load) {
return 307 http://$host$request_uri ;
}
location / {
proxy_pass http://doris-web;
proxy_redirect default;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}