一个regionserver 注册了两次,主机名和ip 各一次,引起hbase(phoenix)服务异常。

先说下基础环境,zk,hbase部署在k8s,hdfs物理部署。beh-manager(简称manager)管理所有组件。

manager死活连不上hbase服务,仔细查看报错,发现域名对应的ip地址有问题,已经不是当前了,log显示为192.168.217.27,实际已经变为192.168.199.199.

com.google.protobuf.ServiceException: org.apache.hadoop.net.ConnectTimeoutException: 10000 millis timeout while waiting for channel to be ready for connect. ch : java.nio.channels.SocketChannel[connection-pending remote=manager-hbase-hmaster-1.manager-hbase.manager.svc.cluster.local/192.168.217.27:60000]
	at org.apache.hadoop.hbase.ipc.AbstractRpcClient.callBlockingMethod(AbstractRpcClient.java:239)
	at org.apache.hadoop.hbase.ipc.AbstractRpcClient$BlockingRpcChannelImplementation.callBlockingMethod(AbstractRpcClient.java:331)
	at org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$BlockingStub.isMasterRunning(MasterProtos.java:58383)
	at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation$MasterServiceState.isMasterRunning(ConnectionManager.java:1584)
	at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.isKeepAliveMasterConnectedAndRunning(ConnectionManager.java:2238)
	at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.getKeepAliveMasterService(ConnectionManager.java:1855)
	at org.apache.hadoop.hbase.client.MasterCallable.prepare(MasterCallable.java:38)
	at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithRetries(RpcRetryingCaller.java:124)
	at org.apache.hadoop.hbase.client.HBaseAdmin.executeCallable(HBaseAdmin.java:4131)
	at org.apache.hadoop.hbase.client.HBaseAdmin.executeCallable(HBaseAdmin.java:4124)
	at org.apache.hadoop.hbase.client.HBaseAdmin.getClusterStatus(HBaseAdmin.java:2808)
	at com.bonc.manager.rest.modules.function.dao.FunctionHbaseDao.getHbaseStatus(FunctionHbaseDao.java:97)
	at

phoenix服务也有问题,错误现象跟之前遇到过的很像,SYSTEM.CATALOG PENDING_OPEN。
在这里插入图片描述
参考之前的解决思路,使用assign强行指定region,失败。

hbase(main):003:0> assign 'f887b1b747d984631fa21825fda0700f'
ERROR: 10000 millis timeout while waiting for channel to be ready for connect. ch : java.nio.channels.SocketChannel[connection-pending remote=/192.168.68.22:60020]

仔细查看各个容器对应的ip,未发现192.168.68.22,也无法ping通。但是60010页面确实存在该node,而且还有两个region。这里比较奇怪的就是一个regionserver 注册了两次,主机名和ip 各一次。
重启regionsever1,应该就是68.22,但现在ip已变成68.28.

60010查看

在这里插入图片描述
删除regionserver2验证,原ip 192.168.119.193,ip变为192.168.119.196;主机名也变为ip。
在这里插入图片描述
后查看regionserver日志,发现报错“Master passed us a different hostname to use”,
google发现问题相关解释,原因可能出在dns解析。
https://issues.apache.org/jira/browse/HBASE-14958

将hbase服务重置,还是存在ip,主机同时存在的问题,实际只有两个regionserver。68.3为regionserver1,再次使用assign命令成功。
在这里插入图片描述
连接测试失败,查看具体region状态,也没有部署成功。
在这里插入图片描述

再次执行assign貌似成功了,成功分配。
高兴地太早,出现大量not deployed,开始修复之旅。
在这里插入图片描述

最终判定为hbase自身注册机制问题,引发原因为容器环境没有给master配置所有节点的host主机映射。
下面这篇文章说的比较清楚了,https://blog.csdn.net/bryce123phy/article/details/83182942。

最终修改方案为手动通过hostalias 更新master的hosts文件解决。
但该解决方案需要根据对应环境进行修改,比较麻烦。

其他:
40.1环境 yarn服务突然挂了,nm死活连不上rm,最后发现rm双standby,
强行通过命令切换一个rm变为active后正常。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐