准备工作
部署机器配置
- doris01
- doris02
- doris03
设置源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum makecache
sudo yum update -y
修改 host 文件
# step.1
vim /etc/hosts
# step.1 添加内容
192.168.0.1 doris01
192.168.0.2 doris02
192.168.0.3 doris03
ssh 免密
# step.1
ssh-keygen -b 1024 -t rsa -P '' -f ~/.ssh/id_rsa
# step.2 所有节点配置免密
for i in {1..3}; do sudo ssh-copy-id -i ~/.ssh/id_rsa.pub doris0$i; done
关闭 swap 分区
注释掉 /etc/fstab
中的 swap 分区,然后重启即可彻底关闭 swap 分区
# /etc/fstab
# <file system> <dir> <type> <options> <dump> <pass>
tmpfs /tmp tmpfs nodev,nosuid 0 0
/dev/sda1 / ext4 defaults,noatime 0 1
# /dev/sda2 none swap defaults 0 0
/dev/sda3 /home ext4 defaults,noatime 0 2
关闭系统防火墙
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
配置 ntp 服务
Doris 的元数据要求时间精度要小于 5000ms
yum -y install ntp
sudo systemctl start ntpd.service
sudo systemctl enable ntpd.service
设置系统最大打开文件句柄数
Doris 由于依赖大量文件来管理表数据,所以需要将系统对程序打开文件数的限制调高
vim /etc/security/limits.conf
* soft nofile 1000000
* hard nofile 1000000
修改虚拟内存区域数量
修改虚拟内存区域至少为 2000000
sysctl -w vm.max_map_count=2000000
关闭透明大页
在部署 Doris 时,建议关闭透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
硬件检查
查看 x64 机器是否支持 AVX2 指令集,以利用 AVX2 的向量化能力实现查询向量化加速。运行以下命令,有输出结果,即表示机器支持 AVX2 指令集。
cat /proc/cpuinfo | grep avx2
根据有无输出选择相应的版本 x64 ( avx2 )、x64 ( no avx2 )、ARM64
下载安装包
如:apache-doris-2.1.5-bin-x64-noavx2.tar.gz
安装 jdk
在 2.1(含)版本之前,请使用 Java 8,推荐版本:openjdk-8u352-b08-linux-x64
。
从 3.0(含)版本之后,请使用 Java 17,推荐版本:jdk-17.0.10_linux-x64_bin.tar.gz
。
安装 mysql 命令行工具
安装 mysql 免安装版本
集群部署 FE
部署 FE Master 节点
创建元数据路径
FE 元数据通常不超过 10GB,建议将其存储在与 BE 节点数据存储不同的硬盘上,并避免将其放置在 Doris 安装目录下,以避免潜在的 I/O 竞争
# 选择独立于 BE 数据存储的硬盘,创建 FE 的元数据目录
mkdir -p <doris_meta_created>
修改 FE 配置文件
- 修改 conf/fe.conf
- 修改 FE 元数据目录:
meta_dir
参数指定了元数据的存放位置 - 绑定集群 IP:多网卡环境中,需要显式配置
priority_networks
选项,以指定 FE 使用的 IP 地址
priority_networks = 192.168.0.0/24
- 调整 FE 内存:修改
JAVA_OPTS
参数中的-Xmx
选项来调整 Java 最大堆内存
JAVA_OPTS="-Xmx16384m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:$DORIS_HOME/log/fe.gc.log.$DATE"
- 修改 Doris 大小写敏感参数:Doris 默认对表名大小写敏感。如果需要对大小写不敏感,请在集群初始化时设置
lower_case_table_names
参数
启动 FE 进程
bin/start_fe.sh --daemon
检查 FE 启动状态
mysql -uroot -P<fe_query_port> -h<fe_ip_address>
./mysql -uroot -P9030 -h127.0.0.1
show frontends; # 查看 FE 的状态
Alive
为true
表示节点存活。Join
为true
表示节点已加入集群,但不一定表示当前仍在集群内(可能已失联)。IsMaster
为true
表示当前节点为 Master 节点。
部署 FE Follower 节点
- 创建元数据目录
- 修改 FE Follower 节点配置文件,通常情况下,可以直接复制 FE Master 节点的配置文件
注册新的 FE Follower 节点
在启动新的 FE 节点前,需要先在 FE 集群中注册新的 FE 节点
## 链接任一存活的 FE 节点
mysql -uroot -P<fe_query_port> -h<fe_ip_address>
## 注册 FE Follower 节点
## fe_edit_log_port 可以从 fe.conf 中查看,默认为 9010
## 在 MySQL Client 中执行 ALTER SYSTEM 语句
ALTER SYSTEM ADD FOLLOWER "<fe_ip_address> : <fe_edit_log_port>";
ALTER SYSTEM ADD FOLLOWER "192.168.0.2:9010";
ALTER SYSTEM ADD FOLLOWER "192.168.0.3:9010";
如果要添加 Observer 节点,可以使用 ADD OBSERVER
命令
## 注册 FE observer 节点,在 MySQL Client 中执行 ALTER SYSTEM 语句
ALTER SYSTEM ADD OBSERVER "<fe_ip_address>:<fe_edit_log_port>"
启动 FE Follower 节点
通过以下命令,可以启动 FE Follower 节点,并自动同步元数据。其中,helper_fe_ip 为当前 FE 集群中任一存活的节点。--helper
参数只应用于第一次启动 FE 时同步元数据,后续重启 FE 的操作不需要指定。
bin/start_fe.sh --helper <helper_fe_ip>:<fe_edit_log_port> --daemon
bin/start_fe.sh --helper 192.168.0.1:9010 --daemon
判断 Follower 节点状态
mysql -uroot -P<fe_query_port> -h<fe_ip_address>
./mysql -uroot -P9030 -h127.0.0.1
show frontends # 查看 FE 的状态
集群部署 BE
创建数据目录
# 在每一块数据硬盘上创建 BE 数据存储目录
mkdir -p <be_storage_root_path>
修改 BE 配置文件
- 修改 conf/be.conf
- 配置 Java 环境
## 修改 be/conf/be.conf 的 Java 环境变量
JAVA_HOME = <your-java-home-path>
- 配置 BE 存储路径,修改
storage_root_path
参数。在多路径之间使用英文分号;
分隔 (最后一个目录不要加分号)- 当指定存储路径的存储类型时,至少设置一个路径的存储类型为 HDD;
- 如果未明确声明存储路径的存储类型,则默认所有路径均为 HDD。
- 指定 HDD 或 SSD 存储类型与物理存储介质无关,仅用于区分存储路径的存储类型。
- 存储类型 HDD 和 SSD 的关键字必须大写
## 在 storage_root_path 中使用 medium 指定磁盘类型
## /home/disk1/doris,medium:HDD:表示该目录存储冷数据;
## /home/disk2/doris,medium:SSD:表示该目录存储热数据;
storage_root_path=/home/disk1/doris,medium:HDD;/home/disk2/doris,medium:SSD
- 绑定集群 IP,在多网卡的环境中,需要显示配置
priority_networks
选项
priority_networks = 192.168.0.0/24
在 Doris 中注册 BE 节点
在启动新的 BE 节点前,需要先在 FE 集群中注册新的 BE 节点
## 链接任一存活的 FE 节点
mysql -uroot -P<fe_query_port> -h<fe_ip_address>
./mysql -uroot -P9030 -h127.0.0.1
## 注册 BE 节点
## be_heartbeat_service_port 可以从 be.conf 中查看,默认为 9050
## 在 MySQL Client 中执行 ALTER SYSTEM 语句
ALTER SYSTEM ADD BACKEND "<be_ip_address>:<be_heartbeat_service_port>"
ALTER SYSTEM ADD BACKEND "192.168.0.1:9050";
ALTER SYSTEM ADD BACKEND "192.168.0.2:9050";
ALTER SYSTEM ADD BACKEND "192.168.0.3:9050";
启动 BE 进程
bin/start_be.sh --daemon
查看 BE 启动状态
## 链接 Doris 集群
mysql -uroot -P<fe_query_port> -h<fe_ip_address>
./mysql -uroot -P9030 -h127.0.0.1
## 查看 BE 状态,在 MySQL Client 中执行 show 命令
show backends;
- Alive 为 true 表示节点存活
- TabletNum 表示该节点上的分片数量,新加入的节点会进行数据均衡,TabletNum 逐渐趋于平均。
验证集群
./mysql -uroot -P9030 -h127.0.0.1
-- 查看 FE 各实例的版本
show frontends \G
-- 查看 BE 各实例的版本
show backends \G
修改集群密码
创建 Doris 集群时,系统会自动创建一个名为 root
的用户,并默认设置其密码为空
select user();
+----------------------+
| 'root'@'127.0.0.1' |
+----------------------+
SET PASSWORD = PASSWORD('doris_new_passwd');
创建数据库
建表
create database testdb;
CREATE TABLE testdb.test_table
(
begin_time DATETIME ,
k1 TINYINT,
k2 DECIMAL(10, 2) DEFAULT "10.5",
k3 VARCHAR(10) COMMENT "string column",
k4 INT NOT NULL DEFAULT "1" COMMENT "int column"
)
DUPLICATE KEY( begin_time, k1, k2 )
DISTRIBUTED BY HASH( begin_time ) BUCKETS 3
PROPERTIES (
"replication_num" = "3"
);
插入数据
INSERT INTO testdb.test_table VALUES
('2000-12-05 00:00:00', 1, 10.1, 'AAA', 10),
('2024-11-29 00:00:00', 2, 10.2, 'BBB', 20),
('2024-11-30 00:00:00', 3, 10.3, 'CCC', 30),
('2024-12-05 00:00:00', 4, 10.4, 'DDD', 40),
('2024-12-06 00:00:00', 5, 10.5, 'EEE', 50);