上篇文章大致写了对Doris这个数据库的初步认识,从官方的文档结构,到其技术架构,以及最简单的主从节点部署,大致聊了下对它的第一眼感受。
但是对于一个集群来说,如果只有1个master,和一个slaver,那显然是玩不尽兴的,咱又不差机器对吧。
上篇文章按照官方文档中《快速开始》的指示,很快就部署好了一个FE实例跟一个BE实例的最小规模集群,除了遇到2个小坑之外(官方文档其实也都有描述),整个部署过程都很顺利。
本想着这一次,要在上次的基础上先扩大FE的数量,像文档描述的那样,让master至少跑起来3个实例,但是发现了一个问题,那就是集群如何添加多个FE节点,Doris的官网并没有详细说明,仅仅只是轻飘飘的一笔带过。
在我看来,文档中唯一关于这个的有价值描述,就是下面这个模糊的说明,其它详细的就没有了(莫非我没有找到?)

也就是这个模糊的文档说明,着实把我坑了一把,下面就来说说我详细被坑的过程,也许可以给你避避坑。
0. 事先声明
我当前部署的Doris版本为1.2.3,且用的普通部署方式,也就是下载编译好的xgz压缩包,直接给解压到服务器目录的方式。
在网上找了一些类似的添加FE节点遇到问题的解决方案,但无一例外都没法解决我遇到的问题,我只能怀疑可能跟不同的版本,解决方案不一样有关。
1. 准备工作
既然官方文档里没有找到如何添加后续FE节点的详细说明(先干啥,后干啥),那么我就只能根据之前添加BE的经验来进行。
既然是增加FE,那么自然而然首先想到的,就是把当前已经成功运行的FE解压后的软件包给拷贝到想要部署的第二个FE节点,遵循的步骤如下:
1. 拷贝已成功运行的FE节点的整个家目录到第二个FE节点的对应目录下;

2. 养成好的习惯,创建专门用于运行Doris服务的用户(以后运维,你就会发现它的便利性),并将当前Doris家目录的权限赋给doris用户,且为了以后升级方便,最好创建一个doris-fe的符号链接:ln -s apache-doris-fe-1.2.3-bin-x86_64 doris-fe;
3. 拷贝过来之后第一件事情,就是确定在新的FE机器上,配置文件(fe.conf)中有哪些地方需要修改:

看到图中被框出来的部分,我都建议你进行修改,用专门的目录干专业的事情;
4. 根据配置中的要求,创建当前新FE节点对应的日志目录,元数据存储目录,并且把所有权都赋给doris用户;
5. 进入到Doris家目录的bin目录中,运行start-fe.sh这个脚本来启动fe服务。
以上就是fe节点的准备工作,至此,第二个fe服务就启动起来了。
但是,目前因为还没有加入到集群,因此从日志可以看到,大量的unknown信息:

2. 第1个坑
以上准备工作就绪,接下来就可以通过MySQL客户端连接到最初的fe节点,将新的fe加入到集群中。
mysql-client -h ${第一个FE节点IP} -P ${query_port} -uroot (初始集群是没有密码的)
然后,在命令行执行如下fe加入指令:

这里需要注意的是,因为这个指令我没有在官网上直接找到,而是根据它的如下描述:

也就是说,我第一次把这个指令给写成了这个:

然后告诉我这里有语法错误,我只能慢慢尝试,这才把这个语句写对,而且,在尝试的过程中,即便我的指令后来写对了,在执行时,依然出现了一些个稀奇古怪的错误,比如下面这个:

一时没有找到原因,但是当我多执行几次之后,它又好了,要知道,这期间我可是啥都没动哦。
另外,还有一个值得注意的地方,就是那个fe节点的端口,因为官网没有说明,所以这个端口我第一次写错了,给写成了rpc通信端口,后面报错说不对,我才反应过来是要填edit_log_port才行。

3. 第2个坑
因为之前的be就是通过上面这个操作顺序而加入到集群的,所以我就理所应当的觉得,fe的加入也应该是这个顺序和步骤。
结果,现实狠狠打了我一巴掌,以下是执行加入命令后,这个新加的fe节点的后台日志:

日志显示,当前fe节点的版本跟最初启动的fe节点版本不一致,这个问题其实官网给了相关的线索,但其实对于解决问题来说,却还远远不够,官网是这么说的:

意思是当前的这个cluster id跟第一个启动的fe的cluster id不一样,并告诉了你这个cluster id在哪个文件里。
于是,我去查看了这两个fe的机器中,找到了VERSION这个文件,打开一看发现,确实cluster id不一样。
于是,我就想着把第一个fe的这个cluster id的值给拷贝到第二个fe的cluster id中,让第二个fe跟第一个保持一致。

那么这样一来,是不是问题就解决了呢?
并不是。
4. 第3个坑
修改好第二个fe的VERSION文件中的cluster id之后,重启第二个fe的进程发现,日志中还有报错,如下:

瞧,这次虽然不报cluster id不一致了,但又告诉你它的token又是无效的,这可咋整?
难道这个token的值,也必须要跟第一个fe保持一致吗?可官网没有明确说呀。
不管怎样,抱着试一试心态,咱再把第二个fe中VERSION文件的token值也换成跟第一个fe的保持一致。

果然,再次将这个token给换过来之后,

第二个fe的运行终于正常了。
5. 查看fe集群状态
这个时候,除了可以看到fe服务的日志打印正常外,还可以通过MySQL客户端连接任意一个fe,查看fe的运行情况:

当然,也可以通过fe提供的web页面来查看:

后续,根据官网所说,为了方便这个fe master,也就是leader的选举顺利,最好部署奇数个follower:

于是,我又用同样的操作方法,又加入了一台新的follower,自此,fe集群就有了3个follower:

不知道细心的你发现没有,当第3个follower加入时,我们的leader换人了,变成了最新加入的那个follower节点。
6. 最后
就这样,历经一番折腾之后,一个有着3个follower节点的doris集群就部署好了。
总体感觉上,相比CK的部署来说,Doris的部署难度要稍微大一点。
当然,对于be节点的后续加入,相对来说就要比fe更加简单,只需要修改对于be节点的文件句柄数量,然后启动be服务,再通过MySQL客户连接执行添加backend的语句就可以,因为几乎没有难度,这里就不再赘述。
最后,希望我的这趟不大不小的趟坑之旅能帮到你,咱下期再见。
