在NameNode HA中,会出现脑裂问题吗?怎么解决脑裂?

提问者:帅平 问题分类:面试刷题
在NameNode HA中,会出现脑裂问题吗?怎么解决脑裂?
1 个回答
伤疤
伤疤
假设 NameNode1 当前为 Active 状态,NameNode2 当前为 Standby 状态。如果某⼀时刻NameNode1 对应的 ZKFailoverController 进程发⽣了“假死”现象,那么 Zookeeper 服务端会认为 NameNode1 挂掉了,根据前⾯的主备切换逻辑,NameNode2 会替代 NameNode1 进⼊Active 状态。但是此时 NameNode1 可能仍然处于 Active 状态正常运⾏,这样 NameNode1和 NameNode2 都处于 Active 状态,都可以对外提供服务。这种情况称为脑裂。
发布于:1年前 (2023-02-16) IP属地:四川省
满天都是派星べ
满天都是派星べ
脑裂对于NameNode这类对数据⼀致性要求⾮常⾼的系统来说是灾难性的,数据会发⽣错乱且⽆法恢复。zookeeper社区对这种问题的解决⽅法叫做 fencing,中⽂翻译为隔离,也就是想办法把旧的 Active NameNode 隔离起来,使它不能正常对外提供服务。
在进⾏ fencing 的时候,会执⾏以下的操作:
1. ⾸先尝试调⽤这个旧 Active NameNode 的 HAServiceProtocol RPC 接⼝的transitionToStandby ⽅法,看能不能把它转换为 Standby 状态。
2. 如果 transitionToStandby ⽅法调⽤失败,那么就执⾏ Hadoop 配置⽂件之中预定义的隔离措施,Hadoop ⽬前主要提供两种隔离措施,通常会选择 sshfence:sshfence:通过 SSH 登录到⽬标机器上,执⾏命令 fuser 将对应的进程杀死;
shellfence:执⾏⼀个⽤户⾃定义的 shell 脚本来将对应的进程隔离。
发布于:1年前 (2023-02-16) IP属地:四川省
我来回答