經過雙 NameNode 消除單點故障node
元數據的管理方式須要改變:apache
須要一個狀態管理功能模塊:bootstrap
必須保證兩個 NN 之間可以 ssh 無密碼登陸服務器
隔離(Fence),即同一時刻僅僅有一個 NN 對外提供服務網絡
自動故障轉移爲 HDFS 部署增長了兩個新組件:ssh
ZKFC 是自動故障轉移中的另外一個新組件,是 ZooKeeper 的客戶端,也監視和管理 NN 的狀態,每一個運行 NN 的主機也運行了一個 ZKFC 進程,ZKFC 負責:分佈式
hadoop102 | hadoop103 | hadoop104 |
---|---|---|
NameNode | NameNode | |
JournalNode | JournalNode | JournalNode |
DataNode | DataNode | DataNode |
ZK | ZK | ZK |
ResourceManager | ||
NodeManager | NodeManager | NodeManager |
一、集羣規劃ide
二、ZooKeeper 分發oop
三、配置服務器編號代理
四、配置 zoo.cfg 文件
# 2是第幾號服務器 # hadoop102是這個服務器的地址 # 2888是Follower與Leader交換信息的端口 # 3888是服務器通訊端口 server.2=hadoop102:2888:3888 server.3=hadoop103:2888:3888 server.4=hadoop104:2888:3888
五、分別啓動 ZooKeeper
一、將/opt/module/下的 hadoop-2.7.2 拷貝到/opt/module/ha 目錄下
二、配置 core-site.xml
<configuration> <property> <!-- 把兩個NN的地址組裝成一個集羣mycluster --> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <!-- 指定Hadoop運行時產生文件的存儲目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/opt//module/ha/hadoop-2.7.2/data/tmp</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value> </property> </configuration>
三、配置 hdfs-site.xml
<configuration> <!-- 徹底分佈式集羣名稱 --> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <!-- 集羣中NameNode節點都有哪些 --> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通訊地址 --> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>hadoop102:9000</value> </property> <!-- nn2的RPC通訊地址 --> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>hadoop103:9000</value> </property> <!-- nn1的http通訊地址 --> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>hadoop102:50070</value> </property> <!-- nn2的http通訊地址 --> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>hadoop103:50070</value> </property> <!-- 指定NameNode元數據在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/mycluster</value> </property> <!-- 配置隔離機制,即同一時刻只能有一臺服務器對外響應 --> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <!-- 使用隔離機制時須要ssh無祕鑰登陸--> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/djm/.ssh/id_rsa</value> </property> <!-- 聲明journalnode服務器存儲目錄--> <property> <name>dfs.journalnode.edits.dir</name> <value>/opt/module/ha/hadoop-2.7.2/data/jn</value> </property> <!-- 關閉權限檢查--> <property> <name>dfs.permissions.enable</name> <value>false</value> </property> <!-- 訪問代理類:client,mycluster,active配置失敗自動切換實現方式--> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> </configuration>
四、將修改後的配置分發到其餘主機
一、在各個 JournalNode 節點上,輸入如下命令啓動 journalnode 服務
sbin/hadoop-daemon.sh start journalnode
二、在[nn1]上,對其進行格式化,並啓動
bin/hdfs namenode -format sbin/hadoop-daemon.sh start namenode
三、在[nn2]上,同步 nn1 的元數據信息
bin/hdfs namenode -bootstrapStandby
四、啓動[nn2]
sbin/hadoop-daemon.sh start namenode
五、在[nn1]上,啓動全部 datanode
sbin/hadoop-daemons.sh start datanode
六、將[nn1]切換爲 Active
bin/hdfs haadmin -transitionToActive nn1
七、查看是否 Active
bin/hdfs haadmin -getServiceState nn1
一、在 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>hadoop102:2181,hadoop103:2181,hadoop104:2181</value> </property
三、關閉全部HDFS服務:
sbin/stop-dfs.sh
四、啓動Zookeeper集羣:
bin/zkServer.sh start
五、初始化HA在Zookeeper中狀態:
bin/hdfs zkfc -formatZK
六、啓動HDFS服務:
sbin/start-dfs.sh
七、驗證
kill -9 15031
service network stop