一.编译前准备
1.1 环境准备
主机配置:
IP | 主机名 | 部署 | |
---|---|---|---|
10.31.1.119 | hp5 | FE | FS_Broker |
10.31.1.120 | hp6 | BE | FS_Broker |
10.31.1.121 | hp7 | BE | FS_Broker,FE Observer |
10.31.1.122 | hp8 | 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
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
1.2.4 查看docker版本
yum list docker-ce --showduplicates | sort -r
1.2.5 安装docker
yum install docker-ce
yum install <FQPN> # 例如:yum install docker-ce-20.10.9
1.2.6 启动并加入开机启动
systemctl start docker
systemctl enable docker
1.2.7 验证安装是否成功
docker version
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
检查镜像
docker images
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
2.3 下载源码
启动镜像后,你应该已经处于容器内。可以通过以下命令下载 Doris 源码(已挂载本地源码目录则不用):
git clone https://github.com/apache/incubator-doris.git
2.4 编译 Doris
cd /root/incubator-doris
sh build.sh --clean --be --fe --ui
编译完成后,产出文件在 output/ 目录中
三. 安装部署
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
meta_dir是元数据存放位置。默认值为 ${DORIS_HOME}/doris-meta,我看已经创建好了目录。
JAVA_OPTS 默认 java 最大堆内存为 4GB,可以根据真实环境进行调整。
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
- 主要是配置 storage_root_path:数据存放目录。默认在be/storage下,需要手动创建该目录。多个路径之间使用英文状态的分号 ; 分隔(最后一个目录后不要加 ;)。可以通过路径区别存储目录的介质,HDD或SSD。可以添加容量限制在每个路径的末尾,通过英文状态逗号,隔开。
- 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";
3.2.5 启动BE
sh bin/start_be.sh --daemon
查看 BE 运行情况。如一切正常,isAlive 列应为 true。
最终三台都成功
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
拷贝源码
拷贝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
启动 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";
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';
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报错:
解决方案:
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. BE FE一些其它的报错
安装过程中,因为配置文件等原因,出现了一些莫名奇妙的错误,此时可以把 $DORIS_HOME目录下的 be or fe整个目录全部删除掉,然后从源重新进行拷贝,再进行配置即可。