首页 > 技术文章 > Doris 高可用集群的部署

hovin 2022-02-18 14:39 原文

一、主机规划

IP 主机名 安装包
10.207.228.64 doris-1 FE、BE、Broker
10.207.228.194 doris-2 FE、BE、Broker
10.207.228.197 doris-3 FE、BE、Broker

二、JDK 部署

(1) 下载安装包

jdk-8u301-linux-x64.tar.gz

(2) 解压

tar -xf jdk-8u301-linux-x64.tar.gz -C /app

(3) 配置环境变量

cat > /etc/profile.d/jdk.sh << EOF
export JAVA_HOME=/app/jdk1.8.0_301
export PATH=$PATH:$JAVA_HOME/bin
EOF

(4) 使环境变量生效

source /etc/profile.d/jdk.sh

(5) 验证

java -version

三、Doris 高可用集群的部署

3.1、安装包准备

在其中一个节点上操作,以10.207.228.64为例

(1) 准备安装包

apache-doris-0.15.1.tar.gz

(2) 解压

tar -xf apache-doris-0.15.1.tar.gz -C /app

(3) 修改 FE 配置文件

grep -vE "^$|^#"  /app/apache-doris-0.15.1/fe/conf/fe.conf

LOG_DIR = ${DORIS_HOME}/log
DATE = `date +%Y%m%d-%H%M%S`
JAVA_OPTS="-Xmx4096m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX
:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFract
ion=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:$DORIS_HOME/log/fe.gc.log.$DATE"
JAVA_OPTS_FOR_JDK_9="-Xmx4096m -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemar
kEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xlog:gc*:$DORIS_HOME/log/fe.gc.log.$DATE:time"
sys_log_level = INFO
http_port = 8030
rpc_port = 9020
query_port = 9030
edit_log_port = 9010
mysql_service_nio_enabled = true
priority_networks = 10.207.228.0/22		#添加此项,网段为当前主机网段

(4) 创建BE数据存储路径,并修改 BE 配置文件

mkdir /app/apache-doris-0.15.1/storage

grep -vE "^$|^#" /app/apache-doris-0.15.1/be/conf/be.conf 

PPROF_TMPDIR="$DORIS_HOME/log/"
sys_log_level = INFO
be_port = 9060
webserver_port = 8040
heartbeat_service_port = 9050
brpc_port = 8060
storage_root_path = /app/apache-doris-0.15.1/storage	#添加此项

(5) 将修改好的了包传至其它节点

cd /app
tar -czvf apache-dorios-0.15.1-new.tar.gz  apache-doris-0.15.1

#使用scp传包,需要事先知道用户密码
scp apache-dorios-0.15.1-new.tar.gz 10.207.228.194:/app
scp apache-dorios-0.15.1-new.tar.gz 10.207.228.197:/app

#建议使用以下方式传包
#在包所在服务器上执行
python -m SimpleHTTPServer 12345	#如果默认python为python2
python -m http.server 12345			#如果默认python为python3
wget http://10.207.228.194:12345/apache-dorios-0.15.1-new.tar.gz  #其它节点获取包

3.2、单节点搭建

在其中一个节点上操作,以10.207.228.64为例

(1) 启动 FE

/app/apache-doris-0.15.1/fe/bin/start_fe.sh --daemon

(2) 启动 BE

/app/apache-doris-0.15.1/be/bin/start_be.sh --daemon

(3) 启动 Broker

Broker 是用于访问外部数据源(如 hdfs)的进程。通常,在每台机器上部署一个 broker 实例即可。

/app/apache-doris-0.15.1/apache_hdfs_broker/bin/start_broker.sh --daemon

(4) 安装 mysql 客户端

yum install -y mysql

(5) mysql 连接 FE ,并添加 BE 节点与 Broker 节点

#root密码默认为空
mysql -h 127.0.0.1 -P 9030 -uroot -p

#查看当前集群的FE节点
> SHOW FRONTENDS;

#添加BE节点 ALTER SYSTEM ADD BACKEND "be_host:be_heartbeat_service_port";
> ALTER SYSTEM ADD BACKEND "10.207.228.64:9050";

#查看当前集群的BE节点
> SHOW BACKENDS;

#添加Broker节点 ALTER SYSTEM ADD BROKER broker_name "host:port";
> ALTER SYSTEM ADD BROKER my_broker "10.207.228.64:8000";

#查看当前集群的Broker节点
> SHOW BROKER;

(6) web 管理

#FE web,默认用户root,密码空
http://10.207.228.64:8030

#BE web
http://10.207.228.64:8040/

3.3、高可用部署

FE 的高可用集群采用主从复制架构,可避免FE单点故障。 FE 采用了类 raft 的 bdbje 协议完成选主,日志复制和故障切换。

FE 分为 Leader,Follower 和 Observer 三种角色。 默认一个集群,只能有一个 Leader,可以有多个 Follower 和 Observer。Follower 和 Observer 组成一个 Paxos 选择组;前者为复制协议的可投票成员,参与选主和提交日志,一般数量为奇数(2n+1), 使用多数派(n+1)确认,可容忍少数派(n)故障;而后者属于非投票成员,用于异步订阅复制日志,Observer 的状态落后于 Follower ,类似其他复制协议中的learner角色。

FE 节点数据至少为1(1 个 Follower)。当部署 1 个 Follower 和 1 个 Observer 时,可以实现读高可用。当部署 3 个 Follower 时,可以实现读写高可用(HA)。Follower 的数量必须为奇数,Observer 数量随意。

FE 集群从 Follower 中自动选出 Master 节点,所有更改状态操作都由 Master 节点执行, 从 FE 的 Master 节点可以读到最新的状态。更改操作可以从非 Master 节点发起,继而转发给 Master 节点执行, 非 Master 节点记录最近一次更改操作在复制日志中的 LSN ,读操作可以直接在非 Master 节点上执行,但需要等待非 Master 节点的状态已经同步到最近一次更改操作的 LSN,因此读写非 Master 节点满足顺序一致性。

Observer 节点能够增加FE集群的读负载能力,时效性要求放宽的非紧要用户可以读 Observer 节点。

FE 节点之间的时钟相差不能超过5s, 使用 NTP 协议校准时间。

3.3.1、FE 节点的扩容

一个机器上只能部署一个 FE ,因为所有 FE 节点的 http_port 需要相同,可以部署多个 BE 或者 FE + BE 。

(1) 新节点启动 FE

FE 节点首次启动时,需要指定现有集群中的一个节点作为 helper 节点,从该节点获得集群的所有 FE 节点的配置信息,才能建立通信连接,因此首次启动需要指定 --helper 参数。目前我们只搭好了一个主节点,所以使用 10.207.228.64 这台作为 helper 节点。

根据主机规划,在另两个节点上执行:

#首次启动,必需使用--helper参数,不然后续加入集群不成功
#注意修改helper节点的IP为第一台已经装好了的节点IP
/app/apache-doris-0.15.1/fe/bin/start_fe.sh --helper 10.207.228.64:9010 --daemon

#之后可以按以下方式启动
/app/apache-doris-0.15.1/fe/bin/start_fe.sh --daemon

(2) 在 10.207.228.64 上扩容 FE 节点

#root密码默认为空
mysql -h 127.0.0.1 -P 9030 -uroot -p

#扩容FE节点,可以将新节点添加为follower
> ALTER SYSTEM ADD FOLLOWER "10.207.228.194:9010";

#或新节点添加为observer
> ALTER SYSTEM ADD OBSERVER "10.207.228.197:9010";

#查看集群的FE节点
> SHOW FRONTENDS;

3.3.2、BE 节点的扩容

(1) 新节点启动 BE

根据主机规划,在另两个节点上执行:

/app/apache-doris-0.15.1/be/bin/start_be.sh --daemon

(2) 在 10.207.228.64 上扩容 BE 节点

#root密码默认为空
mysql -h 127.0.0.1 -P 9030 -uroot -p

#扩容BE节点
> ALTER SYSTEM ADD BACKEND "10.207.228.194:9050";
> ALTER SYSTEM ADD BACKEND "10.207.228.197:9050";

#查看当前集群的BE节点
> SHOW BACKENDS;

3.3.3、Broker 节点的扩容

(1) 新节点启动 Broker

根据主机规划,在另两个节点上执行:

/app/apache-doris-0.15.1/apache_hdfs_broker/bin/start_broker.sh --daemon

(2) 在 10.207.228.64 上扩容 Broker 节点

#root密码默认为空
mysql -h 127.0.0.1 -P 9030 -uroot -p

#扩容BE节点
> ALTER SYSTEM ADD BROKER MY_BROKER "10.207.228.194:8000";
> ALTER SYSTEM ADD BROKER MY_BROKER "10.207.228.197:8000";

#查看当前集群的BROKER节点
> SHOW BROKER;

(3) 简单测试使用 load broker 从 hdfs 导入数据至 doris

#建库建表
> create database example_db;
> CREATE TABLE example_db.table_hash
(
k1 BOOLEAN,
k2 TINYINT,
k3 DECIMAL(10, 2) DEFAULT "10.5",
v1 CHAR(10) REPLACE,
v2 INT SUM
)
ENGINE=olap
AGGREGATE KEY(k1, k2, k3)
COMMENT "my first doris table"
DISTRIBUTED BY HASH(k1) BUCKETS 32;

#在hdfs上创建一个txt文件
cat hytest.txt 
0,100,9,xxx
1,200,8,sss
0,300,7,bbb

hdfs dfs -put hytest.txt hdfs://10.202.77.201:8020/tmp/hy/

#使用load broker导入数据
> LOAD LABEL example_db.label_filter
(
	DATA INFILE("hdfs://10.202.77.201:8020/hive/warehouse/sfbdp/TMP/tmp_test_etl/emp_dept")
	INTO TABLE `table_hash`
	COLUMNS TERMINATED BY ","
	(k1,k2,v1,v2)
) 
with broker 'my_broker' (
	"username"="root",
	"password"=""
);

#查看导入情况
> SHOW LOAD FROM example_db order by createtime desc limit 1\G;

推荐阅读