概要说明
本案例用于解决集群内 Shiva Master 运行异常,个别 master 启动失败的问题;
在shell下利用可执行文件 shiva_tool 修复 master group;
当 Shiva Master的 master.log 中有如下报错,可以使用此方法修复:
[FATAL] [2020-03-03 15:15:38 053061] [7] [raft.cc:Open:218][raft instance : metadb init raft error]
[FATAL] [2020-03-03 15:15:38 053068] [7] [metadb.cc:Init:1648][open metadb failed, error:kInternalServerError:open raft instance failed when open metadb., master will abort]
注意:修复的前置条件是至少有一台 Shiva Master 的状态是正常的!用以进入 pod 且可以执行shiva_tool脚本;
详细说明
Shiva安装时默认推荐的 Shiva Master 节点数应该至少是3,当 Master group 只剩少数节点存活时,为了保证 Master 提供的数据的一致性,此时 Master 就无法对外提供服务;
修复逻辑主要分为以下几步:
- 选择一个功能正常的 Shiva Master 节点,并将该节点变成集群唯一的 Shiva Master ;
- 停止其他 shiva Master 角色
- 删除其他 shiva Master 数据路径下的元数据库;
- 启动其他 shiva Master 角色
- 将其他的 shiva master 添加到 Shiva 集群
操作步骤
1、选择一个功能正常的 Shiva Master 节点,并将改节点变成集群唯一的 Shiva Master
获取状态正常的 Shiva Master 的pod name
此处pod id为:shiva-master-shiva1-898056471-dc2sf
进入对应的podshiva-master-shiva1-898056471-dc2sf
,使用shiva_tool脚本执行set_master_group命令,将自己变成该集群唯一的Shiva Master
$ kubectl exec -it shiva-master-shiva1-898056471-dc2sf bash
$ /usr/shiva-master/bin/shiva_tool --cmd=set_master_group --address=172.22.17.2:9630
# 172.22.17.2:9630 为该shiva master 所在的服务器ip 和shiva master 端口;
# 输出如下的[set master group to [172.22.17.2:9630] success] 即为成功
[NOTICE][2020-02-11 14:39:51 839806][180][rpc_client.h:PostCall:152][logid:1581403191453044, server:172.22.17.2:9630, cmd:SetReplicas:[172.22.17.2:9630], code:kOk, msg:ok, cost:36531us]
[NOTICE][2020-02-11 14:39:51 839898][180][tool.cc:SetMasterGroup:284][set master group to [172.22.17.2:9630] success]
参见截图:
2、停止其他 shiva Master 角色
3、删除其他 shiva Master 数据路径下的元数据库
数据路径 data_path 可以从下列位置获取:
登录到其他的shiva master节点上,删除对应的数据目录(除了第一步选择的正常 master 节点之外,其他节点的数据都需要删除):
$ cd /mnt/disk1/shiva-master/data
$ ls
metadb
$ rm -rf metadb/
4、启动其他 shiva Master 角色
5、进入第一步选择的Shiva Master pod,将其他的 shiva master 添加到 Shiva 集群
此处以添加3节点为例:
$ kubectl exec -it shiva-master-shiva1-898056471-dc2sf bash
$ /usr/shiva-master/bin/shiva_tool --master_group=172.22.17.2:9630 --cmd=add_master_member --address=172.22.17.3:9630
# master_group=172.22.17.2:9630 为该shiva master 所在的服务器ip 和端口;
# cmd=add_master_member 为shiva 集群添加 master 的命令;
# address=172.22.17.3:9630 为需要添加到该集群的 shiva master 的服务器ip 和端口;
执行完添加操作后,可以通过执行 curl -XGET ${WEBSERVER_IP}:4567/cluster_info
,根据返回结果查看是否添加成功
当输出结果中的master group 列表中有第5步添加的节点即为添加成功:
FAQ
1、如果是不小心误删了一个Shiva Master角色,那么是同样的操作,只是需要在步骤3中,选择一个新的节点安装一个新的Shiva Master角色,然后按照相同的步骤添加进Master Group即可
2、如果有组件依赖于Shiva,那么做完修复操作需要配置对应的组件服务,并且重启
例如使用了基于Shiva的holodesk表,那么需要在修复完成后,对 inceptor 进行配置服务并且重启方能生效,重启完后可以检查下 inceptor server节点的/etc/inceptorx/conf/hive-site.xml
中 master group 信息是否正确: