Doris 高可用集群的部署
一、主机规划
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;