c语言sscanf函数的用法是什么
348
2022-11-25
记录一次事故处理50%kudu表无法进行正常访问
记录一次事故处理50%kudu表无法进行正常访问
测试环境kudu集群事故,影响:测试效果,测试进度,生产发布延迟,需警惕,特此写出过程操作需谨慎!操作需谨慎!操作需谨慎!任务环境都要以生产环境而对待!
事故原因:
运维查看信息日志后,做近一步处理
1.重启kudu—tablet发现无法启动
2.然后重新查看相关日志
Check failed: _s.ok() Bad status: IO error: Unable to write consensus meta file for tablet e99481bc28d84bd69ccf328bed071d6b to path /data/ktwd/consensus-meta/e99481bc28d84bd69ccf328bed071d6b: Call to mkstemp() failed on name template /data/ktwd/consensus-meta/e99481bc28d84bd69ccf328bed071d6b.kudutmp.XXXXXX: Too many open files (error 24)F1219 1354 raft_consensus.cc:3052]
3.发现文件句柄不够影响io写入,运维停止kudu_tablet,操作
这时运维解决不了-上报平台owner后处理
事故分析:
1.问相关运维如何操作的,查看相关记录命令
2.查看kudu_tablet相关日志
3.检查kudu健康状态
cluster
ksck:检查kudu集群的健康
kudu cluster ksck
事故处理:
1.找出所有的有问题的kudu_table,并列出来
这里就不贴了
2.如何修复此问题
如何处理这种情况呢?优先考虑恢复tablet server。先查询下有没有节点tablet server服务已经关闭了,有的话,再先启动tablet server服务。然后重新ksck一下,查看tablet副本的可用情况情况。如果tablet server无法恢复,可以考虑下面的方法。下面的方法可能会导致对该tablet最近的修改数据丢失
使用到的kudu提供的命令行工具: kudu remote_replica unsafe_change_config7。
kudu remote_replica unsafe_change_config
3.修改文件句柄
4.重启tablet-server
重启tablet-server
5.python脚本过滤条件批处理修复
有多张表,不能访问,可以使用程序解析ksck输出的内容,批量处理生成修改一致性配置的命令,然后批量修改该命令
import re #获取tablet id def search1(line): searchObj = re.match(r'Tablet (\w{32}) .+ not RUNNING',line) if searchObj: return searchObj.group(1) else: return None #获取running的server id 主机名 def search2(line): searchObj = re.match(r'(\w{32}) \(([\w|-]+):\d+\): RUNNING',line) #获取正则匹配中()包含的信息 if searchObj: return searchObj.group(1) + ',' + searchObj.group(2) else: return None #读取tablet-id.txt with open('tablet-id.txt','r') as f : lists = f.readlines() #写commond.txt f= open('commond.txt','w') #tablet server ts='' #tablet id ti='' #server id si='' command_pre='sudo -u kudu kudu remote_replica unsafe_change_config ' #拼接后的命令 command='' #匹配计数器 cnt=0 for i in lists: i = i.strip() #cnt为0时查找 tablet id那行 if cnt==0 and search1(i) is not None: ti = search1(i) cnt += 1 continue #匹配tablet id之后的三行 if cnt>0 : cnt += 1 #匹配server running的行 searchObj = search2(i) if searchObj is not None: #对返回结果server name和id进行拆分 l=searchObj.split(',') si = l[0] ts = l[1] #四行都匹配完写文件 if cnt==4: if len(ts)>0 and len(ti)>0 and len(si)>0: command = command_pre + ts + ' ' + ti + ' ' + si + '\n' print command f.write(command) cnt = 0 ts='' ti='' si='' f.close()
总结
1.tablet server关闭时,tablet的移动(不能同时迁移2台)
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~