一.编译前准备

1.1 环境准备

主机配置:

IP 主机名 部署
192.168.9.119 hw5 FE FS_Broker
192.168.9.120 hw6 BE FS_Broker
192.168.9.121 hw7 BE FS_Broker,FE Observer
192.168.9.122 hw8 BE FS_Broker

硬件配置: 每台主机:CPU4核、内存8G、硬盘150G

软件版本:

名称 版本
操作系统 CentOS release 7.8 (Final) 64位
JDK 1.11
yum install -y java-11-openjdk-devel.x86_64  
ln -s /usr/lib/jvm/java-11-openjdk-11.0.13.0.8-1.el7_9.x86_64 /usr/lib/jvm/java11

vi /etc/profile
JAVA_HOME=/usr/lib/jvm/java11
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

source /etc/profile

1.2 安装Docker

1.2.1 卸载旧版本

yum remove docker  docker-common docker-selinux docker-engine

image.png

1.2.2 安装需要的软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

1.2.3 设置yum源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

image.png

1.2.4 查看docker版本

yum list docker-ce --showduplicates | sort -r

image.png

1.2.5 安装docker

yum install docker-ce
yum install <FQPN>  # 例如:yum install docker-ce-20.10.9

image.png

1.2.6 启动并加入开机启动

systemctl start docker
systemctl enable docker

image.png

1.2.7 验证安装是否成功

docker version

image.png

1.2.8 迁移docker

因为根目录的空间不够,将docker迁移到/home目录

systemctl stop dcoker
mkdir -p /home/docker
mv /var/lib/docker/* /home/docker/
mount --bind /home/docker/ /var/lib/docker

# 添加挂载命令至开机脚本
vi /etc/rc.local
mount --bind /home/docker/ /var/lib/docker

1.2.9 退出后重新进入docker

[root@hp7 /]# docker ps -a
CONTAINER ID   IMAGE                                    COMMAND       CREATED          STATUS                       PORTS     NAMES
4443aa0cb7b9   apache/incubator-doris:build-env-1.4.2   "/bin/bash"   44 seconds ago   Exited (0) 36 seconds ago              hardcore_chaum
8c022367ed79   apache/incubator-doris:build-env-1.4.2   "/bin/bash"   5 minutes ago    Exited (127) 5 minutes ago             lucid_jackson
07c7b65b7724   apache/incubator-doris:build-env-1.4.2   "/bin/bash"   6 minutes ago    Exited (0) 6 minutes ago               modest_hugle
5faefc1a7ce7   apache/incubator-doris:build-env-1.4.2   "/bin/bash"   4 hours ago      Exited (0) 2 minutes ago               infallible_boyd
1331eb39f288   apache/incubator-doris:build-env-1.4.2   "/bin/bash"   4 hours ago      Exited (1) 4 hours ago                 dreamy_clarke
731942087dec   apache/incubator-doris:build-env-1.4.2   "/bin/bash"   3 days ago       Exited (0) 3 days ago                  sweet_wescoff
[root@hp7 /]# 
[root@hp7 /]# docker start 5faefc1a7ce7
5faefc1a7ce7
[root@hp7 /]# docker attach 5faefc1a7ce7
[root@5faefc1a7ce7 ~]# 
[root@5faefc1a7ce7 ~]# ll
total 8
-rw-------.  1 root root 3416 Nov 13  2020 anaconda-ks.cfg
drwxr-xr-x. 22 root root 4096 Dec  6 11:08 incubator-doris
drwxr-xr-x.  2 root root    6 Dec  6 09:54 incubator-doris-DORIS-x.x.x-release
[root@5faefc1a7ce7 ~]# 

二. 编译

2.1 下载 Docker 镜像

下载镜像

docker pull apache/incubator-doris:build-env-1.4.2

image.png

检查镜像

docker images

image.png

2.2 运行镜像

运行镜像

docker run -it apache/incubator-doris:build-env-1.4.2

建议以挂载本地 Doris 源码目录的方式运行镜像,这样编译的产出二进制文件会存储在宿主机中,不会因为镜像退出而消失。

同时,建议同时将镜像中 maven 的 .m2 目录挂载到宿主机目录,以防止每次启动镜像编译时,重复下载 maven 的依赖库。

docker run -it -v /root/.m2 -v /root/incubator-doris-DORIS-x.x.x-release/ apache/incubator-doris:build-env-1.4.2

image.png

2.3 下载源码

启动镜像后,你应该已经处于容器内。可以通过以下命令下载 Doris 源码(已挂载本地源码目录则不用):

git clone https://github.com/apache/incubator-doris.git

image.png

2.4 编译 Doris

cd /root/incubator-doris
sh build.sh --clean --be --fe --ui

image.png

编译完成后,产出文件在 output/ 目录中 image.png

三. 安装部署

3.1 安装FE

3.1.1 拷贝FE部署文件

拷贝 FE 部署文件到hp5

scp -r ./fe root@10.31.1.119:/home/doris/

3.1.2 配置 FE

配置文件为 conf/fe.conf

  1. meta_dir是元数据存放位置。默认值为 ${DORIS_HOME}/doris-meta,我看已经创建好了目录。
  2. JAVA_OPTS 默认 java 最大堆内存为 4GB,可以根据真实环境进行调整。
  3. priority_networks=10.31.1.0/24 如果主机有多个IP,doris没办法知道具体该绑定哪个IP,此时需要进行指定。

3.1.3 启动FE

sh bin/start_fe.sh --daemon

FE进程启动进入后台执行。日志默认存放在 log/ 目录下。如启动失败,可以通过查看 log/fe.log 或者 log/fe.out 查看错误信息。

3.2 安装BE

3.2.1 拷贝BE安装文件

scp -r ./be root@10.31.1.120:/home/doris/  
scp -r ./be root@10.31.1.121:/home/doris/  
scp -r ./be root@10.31.1.122:/home/doris/  

以下步骤 hp6、hp7、hp8三个节点BE节点均需要执行:

3.2.2 修改所有 BE 的配置

修改 be/conf/be.conf

  1. 主要是配置 storage_root_path:数据存放目录。默认在be/storage下,需要手动创建该目录。多个路径之间使用英文状态的分号 ; 分隔(最后一个目录后不要加 ;)。可以通过路径区别存储目录的介质,HDD或SSD。可以添加容量限制在每个路径的末尾,通过英文状态逗号,隔开。
  2. priority_networks=10.31.1.0/24 如果主机有多个IP,doris没办法知道具体该绑定哪个IP,此时需要进行指定。

3.2.3 修改文件句柄数据

echo "* soft nofile 204800"  >> /etc/security/limits.conf
echo "* hard nofile 204800"  >> /etc/security/limits.conf
echo "* soft nproc 204800"  >> /etc/security/limits.conf
echo "* hard nproc 204800 "  >> /etc/security/limits.conf

-- 修改 /etc/sysctl.conf, 加入这个设置
echo   fs.file-max = 6553560  >> /etc/sysctl.conf

ulimit -u 60000

source /etc/profile

3.2.4 在 FE 中添加所有 BE 节点

-- 其中 host 为 FE 所在节点 ip;port 为 fe/conf/fe.conf 中的 query_port;默认使用 root 账户,无密码登录。
mysql -uroot -p -h10.31.1.119 -P9030
-- 其中 host 为 BE 所在节点 ip;port 为 be/conf/be.conf 中的 heartbeat_service_port。
ALTER SYSTEM ADD BACKEND "10.31.1.120:9050";

image.png

3.2.5 启动BE

sh bin/start_be.sh --daemon

查看 BE 运行情况。如一切正常,isAlive 列应为 true。 image.png

最终三台都成功 image.png

3.2.6 安装fs_broker

编译broker Broker 以插件的形式,独立于 Doris 部署。如果需要从第三方存储系统导入数据,需要部署相应的 Broker,默认提供了读取 HDFS 和百度云 BOS 的 fs_broker。fs_broker 是无状态的,建议每一个 FE 和 BE 节点都部署一个 Broker。

cd /root/incubator-doris/fs_brokers/apache_hdfs_broker
sh build.sh

image.png

image.png

拷贝源码 拷贝fs_broker 的 output 目录下的相应 Broker 目录到需要部署的所有节点上。建议和 BE 或者 FE 目录保持同级。

cd /root/incubator-doris/fs_brokers/apache_hdfs_broker/output
scp -r apache_hdfs_broker root@10.31.1.119:/home/doris/
scp -r apache_hdfs_broker root@10.31.1.120:/home/doris/
scp -r apache_hdfs_broker root@10.31.1.121:/home/doris/
scp -r apache_hdfs_broker root@10.31.1.122:/home/doris/

修改相应 Broker 配置 可沿用默认值

cd /home/doris/apache_hdfs_broker/conf
vi apache_hdfs_broker.conf

image.png

启动 Broker

sh bin/start_broker.sh --daemon

添加 Broker 要让 Doris 的 FE 和 BE 知道 Broker 在哪些节点上,通过 sql 命令添加 Broker 节点列表。 使用 mysql-client 连接启动的 FE,执行以下命令:

-- 其中 host 为 Broker 所在节点 ip;port 为 Broker 配置文件中的 broker_ipc_port。
ALTER SYSTEM ADD BROKER broker_name "host1:port1","host2:port2",...;

ALTER SYSTEM ADD BROKER broker_name "10.31.1.119:8000","10.31.1.120:8000","10.31.1.121:8000","10.31.1.122:8000";

查看 Broker 状态

SHOW PROC "/brokers";

image.png

3.2.7 增加FE Observer

FE 分为 Leader,Follower 和 Observer 三种角色。 默认一个集群,只能有一个 Leader,可以有多个 Follower 和 Observer。其中 Leader 和 Follower 组成一个 Paxos 选择组,如果 Leader 宕机,则剩下的 Follower 会自动选出新的 Leader,保证写入高可用。Observer 同步 Leader 的数据,但是不参加选举。如果只部署一个 FE,则 FE 默认就是 Leader。

第一个启动的 FE 自动成为 Leader。在此基础上,可以添加若干 Follower 和 Observer。

修改 10.31.1.121上fe的配置文件 主要修改priority_networks 这个参数 priority_networks = 10.31.1.0/24

添加 Observer

-- 其中 host 为 Observer 所在节点 ip,port 为其配置文件 fe.conf 中的 edit_log_port。
ALTER SYSTEM ADD OBSERVER "host:port";

ALTER SYSTEM ADD OBSERVER "10.31.1.121:9010";

查看Observer 运行状态

SHOW PROC '/frontends';

image.png

FAQ:

1. BE连接FE出错

这个是网络的问题,具体排查日志,主机多IP的情况下,需要在配置文件中进行指定,例如: priority_networks=10.31.1.0/24

还有一个问题,我的FE节点因为是测试机,已经安装好了MySQL,结果我BE连接过去的时候,是之前安装的测试库,安装FE之前,要卸载掉主机上已安装的MySQL服务。

2. BE安装报错 - File descriptor number is less than 60000.

BE报错: image.png

解决方案:

echo "* soft nofile 204800"  >> /etc/security/limits.conf
echo "* hard nofile 204800"  >> /etc/security/limits.conf
echo "* soft nproc 204800"  >> /etc/security/limits.conf
echo "* hard nproc 204800 "  >> /etc/security/limits.conf

-- 修改 /etc/sysctl.conf, 加入这个设置
echo   fs.file-max = 6553560  >> /etc/sysctl.conf

ulimit -u 60000

source /etc/profile

image.png

3. BE FE一些其它的报错

安装过程中,因为配置文件等原因,出现了一些莫名奇妙的错误,此时可以把 $DORIS_HOME目录下的 be or fe整个目录全部删除掉,然后从源重新进行拷贝,再进行配置即可。

参考:

  1. http://doris.apache.org/master/zh-CN/installing/compilation.html#%E4%BD%BF%E7%94%A8-docker-%E5%BC%80%E5%8F%91%E9%95%9C%E5%83%8F%E7%BC%96%E8%AF%91-%E6%8E%A8%E8%8D%90
  2. https://blog.csdn.net/qq_21480329/article/details/117730233
  3. https://blog.csdn.net/longqiancao1/article/details/117665789