搭建集群免秘钥的两个需求场景
- 管理脚本远程管理节点,再集群中随便挑一台,把公钥发给所有
- 搭建HA时,NameNode的zkfc需要免秘钥,用来管理自己和对方(故障应对)
HA配置大体过程
- 逻辑物理映射
- JN相关配置,信息描述
- 故障发生时免秘钥配置(还有一种是shell脚本)
要点
- 记得格式化之前启动JN
- 第一台格式化之后启动,并且让后续NameNode以standby启动,就不用格式化了
- ZKFC有三只手:zk,自己的namenode,还有对另外一个namenode。因此免秘钥不仅要和自己,还有和对方
配置 部署
不能直接格式化,两个namenode。需要先开启jn和zk。配置具体如下图
-
启动三个节点JN(包含免秘钥过程),配置zk
-
NameNode格式化
-
启动第一个nn
-
zk格式化 hdfs zkfc -formatZK (在zk上创建一个新节点)
-
start-dfs.sh
HA
------------------------------------------
tar xf zookeeper
这里三个节点两个端口号的原因:
zk两个状态,可用和不可用。
zk作为分布式协调,zk集群应该要一直可靠运行。因此用主从模型leader和follower,所有增删改都由f交给leader。
挂了之后无主模型,要推举新的leader,对外继续提供服务
200ms之内就可以恢复leader,挂了之后用3888选leader
之所以可以快,是因为选举过程不用使用争抢。server.x的这个x数字平时平级,在需要选举时,亮出id,谁大谁就是leader。
zk两个id,其中有一个事物id:zxid,还有一个server id
有事物时,不能强要求强一致性,强一致性可能破坏可用性。
一般有过半机制的存在,即有一半在事务决策或者选择leader通过就行
zookeeper中设置了三个节点:
server.1=192.168.72.12:2888:3888
server.2=192.168.72.13:2888:3888
server.3=192.168.72.14:2888:3888
以我这三个节点为例,如果只启动第一个节点(指令:zkServer.sh start)
那么会提示not running
如果启动12,就会使2变为leader,因为这个时候已经过半了;即使再启动3,3也和1一样,是follower
最后的关键来了。
如果kill -9 加上第一个nn
那么第一个节点zkfc还在,nn直接gg,node02去zk里争抢创建新点,变成active
即使重启node01 的nn:hadoop-daemon.sh start namenode
此时node02还是active,node01变为standby
如果kill -9 加上第二个zkfc
那么第一个节点的zkfc将node02变为standby,同时将node01变为active
如果这个时候重新启动第二个zkfc:hadoop-daemon.sh start zkfc,并且kill -9 加上第一个zkfc
那么第二个节点的zkfc将node01变为standby,同时将node02变为active
其实这意味着zkfc被再次启动可以立刻参与到环境中去
HA之后再次启动过程
按照上表重新部署
- node02、node03、node04依次zkServer.sh start,由于过半机制的存在,node02为leader
- node01作为管理节点,start-dfs.sh
- 停止:stop-dfs.sh;zkServer.sh stop
zookeeper的监听者功能(watcher)
- zkCli.sh
- ls /
- ls /hadoop-ha/mycluster