1. 首先配置zk为完全分布式
a. 分发zk的安装包到各个节点
b. 配置环境变量
c. 修改zoo.cfg(每个zk服务器的该文件配置均相同(myid文件不同))
server.1=v100:2888:3888
server.2=v200:2888:3888
server.3=v300:2888:3888
d. 配置每个zk server的myid文件
echo 1 >>/hadoop/zookeeper/myid
echo 2 >>/hadoop/zookeeper/myid
echo 3 >>/hadoop/zookeeper/myid
f. 测试zk服务器集群
1. 在每个主机上启动zkserver
zkServer.sh start
2. 使用client的shell来进行连接
zkCli.sh -server这个命令可以连接到其它服务器的zk上,如果不加就是连接到本机
zkCli.sh -server v200:2181
3. zkServer.sh status这个命令来查看我们的zk是leader还是follower
2. 配置namenode的HA的配置文件
3. 启动journalnode,将edit文件同步到jns下
1. 在jn节点上启动jn进程
$>hadoop-daemon.sh start journalnode
2. 启动完成JN后,需要在disk上完成俩个nn的元数据同步工作
a. 如果正在构建新的hdfs集群,需要首先只在一台新的namenode上进行format工作
b. 若已经格式化文件系统或者在non-ha的集群上启用ha功能,需要复制现有nn的目录(~/hadoop/dfs/name)复制到另一台的nn的相同的目录下,然后在未格式化的nn上执行以下的命令hdfs namenode -bootstrapStandby,该命令保证jn有足够多的edit来启动俩个nn
注意:这里应该先启动我们的以前的namenode用以下的命令,要不会连接拒接
hdoop-daemon.sh start namenode
c. 如果正在将非HA 转换为HA的话,你需要执行hdfs namenode -initializeSharedEdits命令会从local的namenode编辑日志的目录数据初始化到jns的目录下(这个命令在我们以前的namenode上执行)
在执行这个命令的时候会出现错误:说这个目录已经被锁定了
来到这个文件夹下边发现有个in_use.lock 这个是一个锁定文件,表示这个进程正在使用,如果停掉这个文件的话,我们的in_use.lock文件就会消失,用以下命令
hadoop-daemon.sh stop namenode
这时在我们的本机再执行hdfs namenode -initializeSharedEdits这个命令就好了
d. 启动俩个nn,和平时启动namenode一样
e. 通过webui查看每个nn的状态
4. 配置hadoop的namenode的ha的自动failover
1. 自动容灾需要引入俩个组件
zk的Quorum进程
zk的ZKFC(ZookeeperFailoverController)进程
2. 组件
Failure detection:故障检测:每个namenode都和zk连接,如果机器故障,这个会话session就会过期,通知其它的namenode节点要触发容灾了
Active NameNode election:active namenode推选,作为active节点,ZKFC是zk的新组件,监控并管理nn的状态,每一个nn节点都运行了zkfc进程,zkfc进程负责如下问题:
a. Health monitoring:周期性ping处理,如果遇到异常情况,健康监视器标记为不健康的状态
b. ZooKeeper session management
c. ZooKeeper-based election
3. 部署zk
a. 有zk的进程是轻量级的,可以将zk配置到nn节点上,
b. 停止整个集群
c. 添加俩个新的参数
【hdfs-site.xml】
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
这个配置的意思是启用自动容灾
【core-site.xml】
<property>
<name>ha.zookeeper.quorum</name>
<value>v100:2181,v200:2181,v300:2181</value>
</property>
这个配置的意思是指定ha在zookeeper 的集群
4. 初始化HA的状态到zk中去在一个namenode节点上去运行
hdfs zkfc -formatZK //格式化zk
运行完这个命令后,本质是在我们的zk集群中创建、hadoop-ha/rxcd的层级目录结构
在zk上创建znode存放自动容灾的数据
5. 启动集群
start-dfs.sh
//可以手动启动zkfc
hdfs --daemon start zkfc
6. 验证自动容灾