StarRocks集群部署

标签: 无 分类: 未分类 创建时间:2022-03-17 06:28:23 更新时间:2024-11-25 11:32:01

前言

老板准备搭建Starrocks集群,但是设备不够,阿里云两台服务器4核8G,内网两台服务器,有一个路由器,有固定IP,经过尝试和环境搭建,我探索出如下的方案设计,其实如果仔细的阅读官方的文档,多处都强调了至少三个节点才能组成集群的,但是不亲自实验,就是会不死心的。

  • (1) 离线数据同步
    该方案主要是使用了阿里开源的数据同步工具 DataX 和可视化开源工具 DataX-Web,通过相关的脚本和配置,可以实现定时任务,准时实对数据进行备份和数据转移。该方案可以实现不同数据源的同步,比如SqlServer 到SqlServer,也可以实现SqlServer到starrocks数据,工具可以搭建在内网虚拟机中,对数据库服务器不产生性能影响,只是通过网络进行数据查询和插入,性能取决于带宽,

  • (2) Starrocks双机热备
    因为四台服务器,分属两个网络,根据starrocks安装部署要求,FF必须为奇数,不能实现starrocks的三台服务器的高可用性,但是可以部署一个Follwer和一个Observer,实现读的高可用性,也就是实现了数据的双机热备,但是不能实现写的高可用性。

  • (3) Starrocks多机集群
    限于starrocks配置的要求,FF和BE的配置文件中的 priority_networks 监听的IP地址,必须是本机网卡的地址,不能通过转发等形式实现,但是可以通过OpenVPN实现两个不同网络的连接,这样在阿里云和内网环境中就可以实现虚拟专用网,并部署3台以上的高可用集群。但是该方案的缺点就是不能实现通常意义上的高可用性,限制于OpenVPN实现的服务端和客户端模式的问题,虽然形成了局域网,但是网络的连通性取决于作为OpenVPN服务端端设备是否正常运行,而且关于OpenVPN的性能如何,是否有网络的损失,暂时未又充分的数据说明。

该方案有了新的说明,可以通过部署 OpenVPN 高可用集群(可以查看 OpenVPN之高可用集群),解决OpenVPN Server单点失效的问题,这样就可以实现了阿里云网络和内网进行联通,同时可以配置Starrocks的高可用集群了。

  • (4) 高可用Linux集群
    可以借助于其他的软件,搭建不同网络环境下的Linux高可用集群,是否可行,还有带进一步的研究。
参考文章:
1.ClickHouse vs StarRocks选型对比
2.openvpn服务高可用的三种方案 这里的三种方案,实现openvpn server的高可用性:1.在vpn客户端使用多个配置文件实现(由用户选择拨号);2.通过在客户端配置文件实现负载均衡;3.通过域名加DNS轮询的方式实现负载均衡(DNS自动分配VPN)。
3.StarRocks集群管理 StarRocks可以通过滚动升级的方式,平滑进行升级。升级顺序是先升级BE,再升级FE。StarRocks保证BE后向兼容FE。升级的过程可以分为:测试升级的正确性,滚动升级,观察服务。BE、FE启动顺序不能颠倒。因为如果升级导致新旧 FE、BE 不兼容,从新 FE 发出的命令可能会导致旧的 BE 挂掉。但是因为已经部署了新的 BE 文件,BE 通过守护进程自动重启后,即已经是新的 BE 了。
4.实时数仓不用愁,StarRocks+Flink来解忧!

1.高可用性

什么是高可用,以及如何实现高可用,我暂时不做过多的介绍,一个集群就可以实现高可用了,可以 参考文章 调研报告之系统高可用

2.负载均衡

实现高可用的第一个条件,就是要负载均衡,如果一台服务挂掉了,如和自动切换到另外的一台服务上面呢?

(1) 代码方式
自己在应用层代码进行重试和负载均衡。比如发现一个连接挂掉,就自动在其他连接上进行重试。应用层代码重试需要应用自己配置多个StarRocks前端节点地址。

(2) JDBC Connector
如果使用 mysql jdbc connector 来连接StarRocks,可以使用 jdbc 的自动重试机制:

1
jdbc:mysql://[host:port],[host:port].../[database][?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]... 

(3) ProxySQL
ProxySQL 是一个灵活强大的 MySQL 代理层, 可以实现读写分离,支持 Query 路由、SQL Cache,动态加载配置、故障切换和 SQL 过滤等功能。StarRocks 的 FE 进程负责接收用户连接和查询请求,其本身是可以横向扩展且高可用的,但是需要用户在多个 FE 上架设一层 proxy,来实现自动的连接负载均衡。

参考文章:
1.StarRocks负载均衡

2.集群架构

1.3节点的StarRocks集群,每台机器上均会部署StarRocks的FE与BE服务,除此之外,如果我们要用到MySQL同步服务,则可以在第一个节点上额外部署MySQL同步组件(包括Bifrost、Kafka、Econvert),当然也可以选择额外一台机器来部署同步组件;如果不需要MySQL同步服务,则不需要安装。

2.一般数量为奇数(2n+1), 使用多数派(n+1)确认, 可容忍少数派(n)故障;

参考文章:
1.第1.5章:StarRocks部署–集群部署
2.StarRocks 集群部署 这里部署了三台服务器,三台服务器上分别部署了FF和BE

3.扩容和缩容

FE扩缩容时要注意:

(1) Follower FE(包括Master)的数量必须为奇数,建议部署3个,组成高可用(HA)模式即可。
(2) 当 FE 处于高可用部署时(1个Master,2个Follower),建议通过增加 Observer FE 来扩展 FE 的读服务能力。当然也可以继续增加 Follower FE,但几乎是不必要的。
(3) 通常一个 FE 节点可以应对 10-20 台 BE 节点。建议总的 FE 节点数量在 10 个以下。而3个即可满足绝大部分需求。
(4) helper 不能指向 FE 自身,必须指向一个或多个已存在并且正常运行中的 Master/Follower FE。

参考文章:
1.扩容缩容 官方文档
2.Dorris扩容和缩容

4.集群部署

我这里测试的网络环境有点特殊,是阿里云的两台安装了CentOS8的服务器,公司内网中在Hyper-V中安装了CentOS8的虚拟机,为了使内网这台虚拟机对外可见,需要使用公司路由器设置端口转发,公司申请了固定的ip地址。

节点名称 节点IP 部署组件
node01 集群IP StarRocks FE&BE
node02 集群IP StarRocks FE&BE
node03 集群IP StarRocks FE&BE

我突然发现了一个严重的问题,就是如果使用外网IP,就会造成一个难以估量的问题,就是无法创建集群。于是我又找了一些资料,注意点地方有下面几点:

(1) be总磁盘空间按3副本计算的话, 需要数据量*3, 然后预留40%作为后台compaction及中间数据存放
(2) 同一节点可部署多个be, 但如果要求3副本数据, 则必须3个机器部署3个be
(3) be的数量多少直接决定了查询速度
(4) fe 分为Folloer(选一个leader) 和 Observer
(5) FE 节点数据至少为1(1 个 Follower)。当部署 1 个 Follower 和 1 个 Observer 时,可以实现读高可用。当部署 3 个 Follower 时,可以实现读写高可用(HA)。
(6) Follower 的数量必须为奇数,Observer 数量随意。
(7) 根据以往经验,当集群可用性要求很高是(比如提供在线业务),可以部署 3 个 Follower 和 1-3 个 Observer。如果是离线业务,建议部署 1 个 Follower 和 1-3 个 Observer。
(8) 如果 FE 和 BE 混部,需注意资源竞争问题,并保证元数据目录和数据目录分属不同磁盘。
(9) 因为有多网卡的存在,或因为安装过 docker 等环境导致的虚拟网卡的存在,同一个主机可能存在多个不同的 ip。当前 Doris 并不能自动识别可用 IP。所以当遇到部署主机上有多个 IP 时,必须通过 priority_networks 配置项来强制指定正确的 IP。当配置完 priority_networks 并启动 FE 或 BE 后,只是保证了 FE 或 BE 自身的 IP 进行了正确的绑定。而在使用 ADD BACKEND 或 ADD FRONTEND 语句中,也需要指定和 priority_networks 配置匹配的 IP,否则集群无法建立。

我这里有三台阿里云的服务器,其中服务器一为账号A的阿里云服务器,安装了OpenVPN server;服务器二和服务器三为账号B的两台阿里云服务器,可以组成局域网,安装了OpenVPN client和starrocks;内网中有一台群晖的NAS设备,部署了一台虚拟机,安装了OpenVPN Server;还有一台服务器使用Hyper-V虚拟出来了三台虚拟机,其中两台安装了starrocks和OpenVPN Client,一台安装了OpenVPN Server。三台OpenVPN Server组成了VPN的高可用性,剩下的OpenVPN Client组成专用网,负责starrocks的高可用性,为了实现集群的对外访问,fe和be的配置文件priority_networks中,除了要指明OpenVPN的ip地址之外,还要指定另外的ip地址,比如阿里云的服务器,就是阿里云上的局域网地址,内网的服务器就是内网的局域网地址,这样通过路由器的端口转发,就可以发现处在openvpn网络中的starrocks集群。复杂的网络拓扑图如下:

参考文章:
1.第1.2章:StarRocks部署–部署环境准备
2.doris02-编译安装 这里的注意事项很多,上面的大部分注意事项就是这里说的。
3.ZooKeeper 04 - ZooKeeper 集群的节点为什么必须是奇数个 关于为什么Follower的数量必须是奇数,可以参考这篇文章,我觉得ZooKeeper中集群要解决的脑裂问题,也是starrocks必须解决的问题。
4.部署在阿里云上 be 配置外网加入fe失败 这里也遇到了外网ip加入fe失败的问题,阿里云提出了解决方案就是买他们的产品。
5.部署场景问题梳理 这里一些问题的梳理,比如:集群有add信息,但是ip识别出错;服务器同步超时;fe进程存在,但是fe状态false;进程查不到
6.在线绘图

1.创建用户

因为我作为管理员,就懒的创建新的用户了,直接用root账号进行安装和配置了,可以新建一个starrocks用户,并创建密码

1
2
3
4
5
6
7
## 创建用户
useradd starrocks
## 配置密码
passwd starrocks

## 切换用户
su starrocks

2.配置hosts

编辑节点名称和ip地址对应,三台机器上设置如下,因为我的三台电脑,分数不同的局域网,故使用的是外网IP,如果三台机器属于同一个局域网,应该设置的是局域网地址。

1
2
3
4
5
6
## 编辑节点名称和ip地址对应
vi /etc/hosts
## 添加
node01集群IP node01
node02集群IP node02
node03集群IP node03

3.配置免密登录

1
2
3
4
5
6
7
## 生成密钥
ssh-keygen -t rsa -C "node01"
## 拷贝密钥,将 .ssh/id_rsa.pub 中的内容,拷贝到 ~/.ssh/authorized_keys 文件中,三台机器中authorized_keys都要有三台机器的id_rsa.pub中的内容
## 当然也可以使用ssh-copy-id命令
ssh-copy-id node01
## 将本地的id_rsa.pub文件内容,拷贝到node02节点的 /home/starrocks/.ssh/authorized_keys 文件夹中,输入用户名密码之后就可以了
ssh-copy-id -i ~/.ssh/id_rsa.pub starrocks@node02
参考文章:
1.SSH 三步解决免密登录
2.ssh: permission denied (publickey) 修改 PasswordAuthentication yes #允许密码认证 ,重启 systemctl restart sshd
3.ubuntu配置SSH免密码登陆,提示Permission denied (publickey).

4.部署准备

阿里云的防火墙或者是安全组,记得配置 ‘8030|8040|9010|9020|9030’ 这几个端口放行,如果进行端口转发的话,记得开启这几个端口转发。将文件复制到三台机器上,这个就不说了,在三台服务器上上传一模一样的配置文件

5.部署FE

我在这里卡了很久,启动之后,查看日志,总是出现 :frontend 127.0.0.1:9010 is not added to cluster yet. 意思是某一个地址没有加入到集群中。我是阿里云的机器,使用ifconfig查看的时候,会有一个回环地址和网卡地址,根据参考资料我尝试了修改fe.conf的配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
## 修改配置文件
vi fe/conf/fe.conf
## 设置 priority_networks设置相匹配的IP
priority_networks = 192.168.1.60

## 创建元数据目录
mkdir -p fe/meta

## 启动node01节点的fe,自动成为了 Leader
./bin/start_fe.sh --daemon
## 连接实例
mysql -h 127.0.0.1 -P9030 -uroot
## 先将实例添加入集群,ALTER SYSTEM ADD FOLLOWER "host:port";
## host为机器的IP,如果机器存在多个IP,需要选取priority_networks里的IP,port为edit_log_port,默认为9010。
mysql> alter system add follower "node01:9010";

## 删除实例 edit_log_port 默认为 9010
mysql> alter system drop follower "fe_host:edit_log_port";

## 配置为观察者模式
mysql> ALTER SYSTEM ADD OBSERVER "host:port";

## 启动node01和node02的实例,首次启动必须指定 helper,host:port
## host为helper节点的IP,如果有多个IP,需要选取priority_networks里的IP。port为edit_log_port,默认为9010。
./bin/start_fe.sh --helper node03:9010 --daemon

## 查看集群状态
mysql> SHOW PROC '/frontends'\G

注意
(1) 这里设置follower和helper的地方,设置的host都需要使用本机的ip地址,也就是使用 ifconfig 中查询到的ip地址,所以在使用端口转发的情况就不会试用了。
(2) 如果在 fe.conf 或者是 be.conf 的中设置 priority_networks 不是本机的ip地址,就可能启动不了。如果有多个ip,可以在priority_networks中配置多个ip,这样就可以实现内网集群通信,外网查询,例如查询ifconfig中的ip地址:

1
2
## 10.9.0.4 用作集群地址,172.24.148.5 用作外网访问地址
priority_networks = 10.9.0.4;172.24.148.5

(3) follower或者是observer的端口要一致
(4) 使用show proc命令查看状态的时候,如果无法加入集群,可以使用drop先删除节点,然后删除节点上的meta目录,再重新添加节点,并启动节点。

6.部署BE

编辑be/conf/be.conf的配置文件,设置 priority_networks ,修改Java堆内存,避免GC建议16G以上;

1
2
3
4
5
6
7
8
9
10
11
12
## 创建存储目录
mkdir -p storage
## 通过mysql客户端添加BE节点,默认端口 9050
mysql> ALTER SYSTEM ADD BACKEND "host:port";
## 启动
bin/start_be.sh --daemon

## 删除
mysql > ALTER SYSTEM DROPP BACKEND "host:port";

## 确认启动状态
mysql> SHOW PROC '/backends'\G

7.跨网段集群方案

问题

(1) invalid cluster id

(2) frontend 172.24.148.4:9010 is not added to cluster yet
问题主要是没有配置fe.conf的 priority_networks

1
2
frontend 172.24.148.4:9010 is not added to cluster yet. role UNKNOWN
2022-03-18 18:41:08,444 WARN (main|1) [Catalog.getClusterIdAndRole():1008] current node is not added to the group. please add it first. sleep 5 seconds and retry, current helper nodes:

(3) frontend 127.0.0.1:9010 is not added to cluster yet

参考文章:
1.安装与部署 这是Apache Doris的安装部署文件,里面有详细的单机和集群部署说明。

(4) ip address range configured for priority_networks does not include the current IP address

(5) line 119: ulimit: open files: cannot modify limit: Operation not permitted

1
2
3
4
## 编辑文件
vi /etc/profile
## 取消文件限制
ulimit -n 65535

(6) Fail to get master client from cache. host= port=0 code=THRIFT_RPC_ERROR

(7) failed to get fe node type from helper node: 192.168.40.81:9010. response code: 400
可能是版本不同导致的问题,但是我重新安装和配置了,还是不行,并不是版本的问题。

【尝试】
(1) 尝试重新安装最新版本的,两台机器都使用最新版本的代码进行安装,不行。

(2) 尝试只开起一个 follower,另外一个是 OBSERVER,不可以

(3) 因为两台虚拟机node02,node03,有两个网卡,一个的是物理网卡,一个使用的是openvpn的虚拟网卡,我尝试了使用物理网卡进行连接,做 follower 和 observer 集群可以,但是使用openvpn的虚拟网卡,就出现了无法加入集群的问题。

作为maseter的节点的日志显示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2022-03-23 10:06:44,662 INFO (nioEventLoopGroup-3-8|116) [BaseAction.handleRequest():88] receive http request. url=/role?host=10.9.0.4&port=9010
2022-03-23 10:06:44,662 WARN (nioEventLoopGroup-3-8|116) [MetaBaseAction.isFromValidFe():98] request is not from valid FE. client: 10.9.0.1
2022-03-23 10:06:44,976 INFO (tablet checker|32) [TabletChecker.checkTablets():312] finished to check tablets. unhealth/total/added/in_sched/not_ready: 0/0/0/0/0, cost: 0 ms
2022-03-23 10:06:44,976 INFO (tablet checker|32) [TabletChecker.runAfterCatalogReady():188] TStat :
TStat num of tablet check round: 30 (+1)
TStat cost of tablet check(ms): 0 (+0)
TStat num of tablet checked in tablet checker: 0 (+0)
TStat num of unhealthy tablet checked in tablet checker: 0 (+0)
TStat num of tablet being added to tablet scheduler: 0 (+0)
TStat num of tablet schedule round: 580 (+20)
TStat cost of tablet schedule(ms): 24 (+0)
TStat num of tablet being scheduled: 0 (+0)
TStat num of tablet being scheduled succeeded: 0 (+0)
TStat num of tablet being scheduled failed: 0 (+0)
TStat num of tablet being scheduled discard: 0 (+0)
TStat num of tablet priority upgraded: 0 (+0)
TStat num of tablet priority downgraded: 0 (+0)
TStat num of clone task: 0 (+0)
TStat num of clone task succeeded: 0 (+0)
TStat num of clone task failed: 0 (+0)
TStat num of clone task timeout: 0 (+0)
TStat num of replica missing error: 0 (+0)
TStat num of replica version missing error: 0 (+0)
TStat num of replica unavailable error: 0 (+0)
TStat num of replica redundant error: 0 (+0)
TStat num of replica missing in cluster error: 0 (+0)
TStat num of balance scheduled: 0 (+0)
TStat num of colocate replica mismatch: 0 (+0)
TStat num of colocate replica redundant: 0 (+0)

2022-03-23 10:06:44,978 INFO (Routine load scheduler|37) [RoutineLoadScheduler.process():76] there are 0 job need schedule
2022-03-23 10:06:44,978 WARN (Routine load task scheduler|38) [RoutineLoadTaskScheduler.process():103] no available be slot to scheduler tasks, wait for 10 seconds to scheduler again, you can set max_routine_load_task_num_per_be bigger in fe.conf, current value is 5
2022-03-23 10:06:45,071 INFO (tablet scheduler|31) [TabletScheduler.adjustPriorities():382] adjust priority for all tablets. changed: 0, total: 0
2022-03-23 10:06:46,091 WARN (heartbeat-mgr-pool-4|103) [Util.getResultForUrl():336] failed to get result from url: http://10.9.0.4:8030/api/bootstrap?cluster_id=1047167524&token=ff455fb4-2f55-4ef4-9fba-78ef83b82fe2. Connection refused
2022-03-23 10:06:46,092 WARN (heartbeat mgr|25) [HeartbeatMgr.runAfterCatalogReady():142] get bad heartbeat response: type: FRONTEND, status: BAD, msg: got exception, name: 10.9.0.4_9010_1648000684518, queryPort: 0, rpcPort: 0, replayedJournalId: 0, feStartTime: \N, feVersion: null

作为 observer 日志显示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2022-03-23 10:07:35,689 WARN (main|1) [Catalog.getClusterIdAndRole():996] current node is not added to the group. please add it first. sleep 5 seconds and retry, current helper nodes: [10.9.0.6:9010]
2022-03-23 10:07:40,786 WARN (main|1) [Catalog.getFeNodeTypeAndNameFromHelpers():1116] failed to get fe node type from helper node: 10.9.0.6:9010. response code: 400
2022-03-23 10:07:40,787 WARN (main|1) [Catalog.getClusterIdAndRole():996] current node is not added to the group. please add it first. sleep 5 seconds and retry, current helper nodes: [10.9.0.6:9010]
2022-03-23 10:07:45,884 WARN (main|1) [Catalog.getFeNodeTypeAndNameFromHelpers():1116] failed to get fe node type from helper node: 10.9.0.6:9010. response code: 400
2022-03-23 10:07:45,885 WARN (main|1) [Catalog.getClusterIdAndRole():996] current node is not added to the group. please add it first. sleep 5 seconds and retry, current helper nodes: [10.9.0.6:9010]
2022-03-23 10:07:50,982 WARN (main|1) [Catalog.getFeNodeTypeAndNameFromHelpers():1116] failed to get fe node type from helper node: 10.9.0.6:9010. response code: 400
2022-03-23 10:07:50,982 WARN (main|1) [Catalog.getClusterIdAndRole():996] current node is not added to the group. please add it first. sleep 5 seconds and retry, current helper nodes: [10.9.0.6:9010]
2022-03-23 10:07:56,080 WARN (main|1) [Catalog.getFeNodeTypeAndNameFromHelpers():1116] failed to get fe node type from helper node: 10.9.0.6:9010. response code: 400
2022-03-23 10:07:56,081 WARN (main|1) [Catalog.getClusterIdAndRole():996] current node is not added to the group. please add it first. sleep 5 seconds and retry, current helper nodes: [10.9.0.6:9010]
2022-03-23 10:08:01,178 WARN (main|1) [Catalog.getFeNodeTypeAndNameFromHelpers():1116] failed to get fe node type from helper node: 10.9.0.6:9010. response code: 400
2022-03-23 10:08:01,179 WARN (main|1) [Catalog.getClusterIdAndRole():996] current node is not added to the group. please add it first. sleep 5 seconds and retry, current helper nodes: [10.9.0.6:9010]
2022-03-23 10:08:06,276 WARN (main|1) [Catalog.getFeNodeTypeAndNameFromHelpers():1116] failed to get fe node type from helper node: 10.9.0.6:9010. response code: 400
2022-03-23 10:08:06,276 WARN (main|1) [Catalog.getClusterIdAndRole():996] current node is not added to the group. please add it first. sleep 5 seconds and retry, current helper nodes: [10.9.0.6:9010]
2022-03-23 10:08:11,334 WARN (main|1) [Catalog.getFeNodeTypeAndNameFromHelpers():1116] failed to get fe node type from helper node: 10.9.0.6:9010. response code: 400
2022-03-23 10:08:11,334 WARN (main|1) [Catalog.getClusterIdAndRole():996] current node is not added to the group. please add it first. sleep 5 seconds and retry, current helper nodes: [10.9.0.6:9010]
2022-03-23 10:08:16,435 WARN (main|1) [Catalog.getFeNodeTypeAndNameFromHelpers():1116] failed to get fe node type from helper node: 10.9.0.6:9010. response code: 400
2022-03-23 10:08:16,436 WARN (main|1) [Catalog.getClusterIdAndRole():996] current node is not added to the group. please add it first. sleep 5 seconds and retry, current helper nodes: [10.9.0.6:9010]
2022-03-23 10:08:21,533 WARN (main|1) [Catalog.getFeNodeTypeAndNameFromHelpers():1116] failed to get fe node type from helper node: 10.9.0.6:9010. response code: 400
2022-03-23 10:08:21,533 WARN (main|1) [Catalog.getClusterIdAndRole():996] current node is not added to the group. please add it first. sleep 5 seconds and retry, current helper nodes: [10.9.0.6:9010]
2022-03-23 10:08:26,631 WARN (main|1) [Catalog.getFeNodeTypeAndNameFromHelpers():1116] failed to get fe node type from helper node: 10.9.0.6:9010. response code: 400
2022-03-23 10:08:26,631 WARN (main|1) [Catalog.getClusterIdAndRole():996] current node is not added to the group. please add it first. sleep 5 seconds and retry, current helper nodes: [10.9.0.6:9010]
2022-03-23 10:08:31,729 WARN (main|1) [Catalog.getFeNodeTypeAndNameFromHelpers():1116] failed to get fe node type from helper node: 10.9.0.6:9010. response code: 400
2022-03-23 10:08:31,729 WARN (main|1) [Catalog.getClusterIdAndRole():996] current node is not added to the group. please add it first. sleep 5 seconds and retry, current helper nodes: [10.9.0.6:9010]
2022-03-23 10:08:36,827 WARN (main|1) [Catalog.getFeNodeTypeAndNameFromHelpers():1116] failed to get fe node type from helper node: 10.9.0.6:9010. response code: 400
2022-03-23 10:08:36,827 WARN (main|1) [Catalog.getClusterIdAndRole():996] current node is not added to the group. please add it first. sleep 5 seconds and retry, current helper nodes: [10.9.0.6:9010]
2022-03-23 10:08:41,925 WARN (main|1) [Catalog.getFeNodeTypeAndNameFromHelpers():1116] failed to get fe node type from helper node: 10.9.0.6:9010. response code: 400
2022-03-23 10:08:41,926 WARN (main|1) [Catalog.getClusterIdAndRole():996] current node is not added to the group. please add it first. sleep 5 seconds and retry, current helper nodes: [10.9.0.6:9010]
2022-03-23 10:08:47,023 WARN (main|1) [Catalog.getFeNodeTypeAndNameFromHelpers():1116] failed to get fe node type from helper node: 10.9.0.6:9010. response code: 400
2022-03-23 10:08:47,024 WARN (main|1) [Catalog.getClusterIdAndRole():996] current node is not added to the group. please add it first. sleep 5 seconds and retry, current helper nodes: [10.9.0.6:9010]
2022-03-23 10:08:52,121 WARN (main|1) [Catalog.getFeNodeTypeAndNameFromHelpers():1116] failed to get fe node type from helper node: 10.9.0.6:9010. response code: 400
2022-03-23 10:08:52,122 WARN (main|1) [Catalog.getClusterIdAndRole():996] current node is not added to the group. please add it first. sleep 5 seconds and retry, current helper nodes: [10.9.0.6:9010]
2022-03-23 10:08:57,219 WARN (main|1) [Catalog.getFeNodeTypeAndNameFromHelpers():1116] failed to get fe node type from helper node: 10.9.0.6:9010. response code: 400
2022-03-23 10:08:57,220 WARN (main|1) [Catalog.getClusterIdAndRole():996] current node is not added to the group. please add it first. sleep 5 seconds and retry, current helper nodes: [10.9.0.6:9010]

(3) 因为使用node03作为master启动的时候,node02无法加入集群,但是我交换了两者的位置,将node02作为master启动,使用node03使用–helper参数加入node02组成的集群,发现竟然可以成功的加入到集群中,这更加的让我感到迷惑了。

参考文章:
1.开源版1.19.0部署fe集群 这里说的是版本问题,但是我的版本是一致的
2.[GitHub] [incubator-doris] hf200012 opened a new issue #5292: FE宕机启动错误问题
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。