如何在shell上进行Shiva master group修复

  使用报错
内容纲要

概要说明


本案例用于解决集群内 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 就无法对外提供服务;
修复逻辑主要分为以下几步:

  1. 选择一个功能正常的 Shiva Master 节点,并将该节点变成集群唯一的 Shiva Master ;
  2. 停止其他 shiva Master 角色
  3. 删除其他 shiva Master 数据路径下的元数据库;
  4. 启动其他 shiva Master 角色
  5. 将其他的 shiva master 添加到 Shiva 集群

操作步骤


1、选择一个功能正常的 Shiva Master 节点,并将改节点变成集群唯一的 Shiva Master

获取状态正常的 Shiva Master 的pod name

file

此处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]

参见截图:

file

2、停止其他 shiva Master 角色

3、删除其他 shiva Master 数据路径下的元数据库

数据路径 data_path 可以从下列位置获取:

file

登录到其他的shiva master节点上,删除对应的数据目录(除了第一步选择的正常 master 节点之外,其他节点的数据都需要删除):

$ cd /mnt/disk1/shiva-master/data
$ ls
metadb
$ rm -rf metadb/

file
file

4、启动其他 shiva Master 角色

file

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步添加的节点即为添加成功:

file

FAQ


1、如果是不小心误删了一个Shiva Master角色,那么是同样的操作,只是需要在步骤3中,选择一个新的节点安装一个新的Shiva Master角色,然后按照相同的步骤添加进Master Group即可

2、如果有组件依赖于Shiva,那么做完修复操作需要配置对应的组件服务,并且重启

例如使用了基于Shiva的holodesk表,那么需要在修复完成后,对 inceptor 进行配置服务并且重启方能生效,重启完后可以检查下 inceptor server节点的/etc/inceptorx/conf/hive-site.xml中 master group 信息是否正确:
file

这篇文章对您有帮助吗?

平均评分 5 / 5. 次数: 1

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。