Docker容器部署Doris
这个ip到底是什么呢,如果你在宿主机上使用了虚拟机,到底是用哪一个IP,可能很多人会搞不明白,如果宿主机上的本地ip和虚拟机上的ip是一样的,那么就用本地ip;如果不一样假设你宿主机的ip是:192.168.1.15,虚拟机的IP是192.168.1.56,那么一定要虚拟机的IP。这里是一个很大的坑。是不可能成功的,因为还要看你的电脑是否支持AVX2指令集,怎么看自己的电脑是否支持AVX2指令集,
一、首先准备一台虚拟机;
二、然后在虚拟机里面安装Docker;
三、搭建Doris的Docker版本也是一堆的坑,今天就记录一下是怎么搭建成功的。
这是官方的搭建方法,永远没有成功的。最新的版本(doris:2.0.0_alpha-fe-x86_64是需要AVX2的,没有装不成功)
apache/doris:2.0.0_alpha-fe-x86_64
apache/doris:2.0.0_alpha-be-x86_64
是不可能成功的,因为还要看你的电脑是否支持AVX2指令集,怎么看自己的电脑是否支持AVX2指令集,通过命令cat /proc/cpuinfo |grep avx2如果什么都没有返回说明是不支持的。
所以需要换镜像,换一个be不需要AVX2的镜像,fe不区分有没有avx2的
apache/doris:1.2.2-be-x86_64-noavx2
apache/doris:1.2.2-fe-x86_64
下载镜像:
docker pull apache/doris:1.2.2-be-x86_64-noavx2
docker pull apache/doris:1.2.2-fe-x86_64
四、在安装doris之前在虚拟机执行这段:
sysctl -w vm.max_map_count=2000000
然后执行这段命令,安装doris的fe和be,由于是在本地,所以只安装一个fe,一个be:
docker run -itd --name=fe --env FE_SERVERS="fe1:{当前机器的内网IP}:9010" --env FE_ID=1 -p 8030:8030 -p 9030:9030 -v /data/fe/doris-meta:/opt/apache-doris/fe/doris-meta -v /data/fe/log:/opt/apache-doris/fe/log --net=host apache/doris:1.2.2-fe-x86_64
docker run -itd --name=be --env FE_SERVERS="fe1:{当前机器的内网IP}:9010" --env BE_ADDR="{当前机器的内网IP}:9050" -p 8040:8040 -v /data/be/storage:/opt/apache-doris/be/storage -v /data/be/log:/opt/apache-doris/be/log --net=host apache/doris:1.2.2-be-x86_64-noavx2
官方提示:注意需要修改 ${当前机器的内网IP} 替换为当前机器的内网IP。
这个ip到底是什么呢,如果你在宿主机上使用了虚拟机,到底是用哪一个IP,可能很多人会搞不明白,如果宿主机上的本地ip和虚拟机上的ip是一样的,那么就用本地ip;如果不一样假设你宿主机的ip是:192.168.1.15,虚拟机的IP是192.168.1.56,那么一定要虚拟机的IP。这里是一个很大的坑。
配置好之后,开始执行上面的脚本,发现会报错
the self host 192.168.1.158 does not equal to the host in ROLE file 127.0.0.1. You need to set 'priority_networks' config in fe.conf to match the host 127.0.0.1
如果碰到这个错误,大家可能会想到是不是fe.conf里面要配置priority_networks,但是这个时候你的fe服务都没有起来,所以没地方可以修改。
怎么办呢?
其实是因为每次安装的时候都会在虚拟机的/data目录下面有两个文件一个be,一个fe。所以每次安装的时候都必须把/data里面的文件删除,这些文件有可能在/opt下面。只要删除,再去安装的时候就没问题了。
还有一个地方会容易出错,就是要先创建子网网桥,这个地方不用修改,直接执行就可以了。
docker network create --driver bridge --subnet=172.20.80.0/24 doris-network
如果要删除子网网桥用这种方法,如果创建子网网桥是在虚拟机里面执行的,删除也是在虚拟机里面删除:
#docker network inspect 子网名称(填写自己的)
#docker network prune
然后选择“Y”
正确的如下:
docker run -itd --name=fe --env FE_SERVERS="fe1:192.168.56.10:9010" --env FE_ID=1 -p 8030:8030 -p 9030:9030 -v /data/fe/doris-meta:/opt/apache-doris/fe/doris-meta -v /data/fe/log:/opt/apache-doris/fe/log --net=host apache/doris:1.2.2-fe-x86_64
docker run -itd --name=be --env FE_SERVERS="fe1:192.168.56.10:9010" --env BE_ADDR="192.168.56.10:9050" -p 8040:8040 -v /data/be/storage:/opt/apache-doris/be/storage -v /data/be/log:/opt/apache-doris/be/log --net=host apache/doris:1.2.2-be-x86_64-noavx2
在浏览器上访问:http://192.168.56.10:8030访问fe,http://192.168.56.10:8040访问be
默认的账号root,密码为空可以直接登录进去;
修改密码,在虚拟机输入,不需要进入到fe和be的容器里面
mysql -h 192.168.56.10 -P9030 -uroot
SET PASSWORD FOR 'root' = PASSWORD('xxxx');
问题来了:
如果虚拟机重启了,直接使用docker restart fe,docker restart be重启fe和be。如果发现be注册不到fe,那么重新安装,记得删除/data的文件,重新安装就可以连接上了。
更多推荐
所有评论(0)