とんぼの気持ちとんぼの気持ち
Home
  • Spring Cloud

    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Cloud Netflix
  • Zookeeper

    • Zookeeper
  • 分布式锁

    • 分布式锁
  • 分布式事务

    • 分布式事务
GitHub
Home
  • Spring Cloud

    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Cloud Netflix
  • Zookeeper

    • Zookeeper
  • 分布式锁

    • 分布式锁
  • 分布式事务

    • 分布式事务
GitHub
  • 集群部署

准备工作

部署机器配置

  • 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 配置文件

  1. 修改 conf/fe.conf
  2. 修改 FE 元数据目录:meta_dir 参数指定了元数据的存放位置
  3. 绑定集群 IP:多网卡环境中,需要显式配置 priority_networks 选项,以指定 FE 使用的 IP 地址
priority_networks = 192.168.0.0/24
  1. 调整 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"
  1. 修改 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 节点

  1. 创建元数据目录
  2. 修改 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 配置文件

  1. 修改 conf/be.conf
  2. 配置 Java 环境
## 修改 be/conf/be.conf 的 Java 环境变量
JAVA_HOME = <your-java-home-path>
  1. 配置 BE 存储路径,修改 storage_root_path 参数。在多路径之间使用英文分号 ; 分隔 (最后一个目录不要加分号)
    1. 当指定存储路径的存储类型时,至少设置一个路径的存储类型为 HDD;
    2. 如果未明确声明存储路径的存储类型,则默认所有路径均为 HDD。
    3. 指定 HDD 或 SSD 存储类型与物理存储介质无关,仅用于区分存储路径的存储类型。
    4. 存储类型 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
  1. 绑定集群 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);
Edit this page
最后更新时间:
贡献者: hyfly233