溫馨提示×

HDFS在Linux下如何實現高可用性

小樊
35
2025-09-29 15:56:52
欄目: 智能運維

HDFS在Linux下實現高可用性的核心步驟

1. 集群規劃與環境準備

  • 節點規劃:至少部署3個NameNode節點(用于Active/Standby切換)、3個JournalNode節點(存儲編輯日志,需奇數個保證仲裁)、多個DataNode節點(存儲實際數據);同時部署ZooKeeper集群(至少3節點,用于監控NameNode狀態和管理故障轉移)。
  • 環境要求:所有節點安裝相同版本的Hadoop;配置節點間SSH免密登錄(方便故障轉移時的操作);關閉防火墻或放行必要端口(如NameNode的8020/RPC端口、50070/HTTP端口,JournalNode的8485端口,ZooKeeper的2181端口)。

2. 配置核心Hadoop參數

2.1 修改core-site.xml

設置HDFS的默認文件系統地址和ZooKeeper集群地址(用于自動故障轉移):

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value> <!-- 集群邏輯名稱 -->
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>zk1:2181,zk2:2181,zk3:2181</value> <!-- ZooKeeper集群地址 -->
    </property>
</configuration>
2.2 修改hdfs-site.xml

配置NameNode高可用相關的關鍵參數:

<configuration>
    <!-- 集群邏輯名稱 -->
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>
    <!-- 定義NameNode節點ID(如nn1、nn2) -->
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
    </property>
    <!-- 每個NameNode的RPC地址 -->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>nn1-host:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>nn2-host:8020</value>
    </property>
    <!-- 每個NameNode的HTTP地址(用于Web UI) -->
    <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>nn1-host:50070</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>nn2-host:50070</value>
    </property>
    <!-- 共享編輯日志目錄(JournalNode存儲地址) -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://jn1-host:8485;jn2-host:8485;jn3-host:8485/mycluster</value>
    </property>
    <!-- 客戶端故障轉移代理(自動選擇Active NameNode) -->
    <property>
        <name>dfs.client.failover.proxy.provider.mycluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    <!-- 故障轉移隔離機制(SSH強制終止Standby進程) -->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    <!-- SSH私鑰路徑(用于故障轉移時的遠程操作) -->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/hadoop/.ssh/id_rsa</value>
    </property>
    <!-- JournalNode數據存儲目錄 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/path/to/journalnode/data</value>
    </property>
</configuration>

3. 啟動JournalNode服務

JournalNode負責存儲NameNode的編輯日志(EditLog),確保Active和Standby NameNode的元數據一致。在所有JournalNode節點上執行:

$HADOOP_HOME/sbin/hadoop-daemon.sh start journalnode

4. 格式化并啟動NameNode

  • 格式化主NameNode:在其中一個NameNode節點(如nn1)上執行格式化(僅第一次啟動時需要):
    $HADOOP_HOME/bin/hdfs namenode -format
    
  • 啟動主NameNode
    $HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
    
  • 同步元數據到Standby NameNode:在Standby NameNode節點(如nn2)上執行,將主NameNode的元數據復制到本地:
    $HADOOP_HOME/bin/hdfs namenode -bootstrapStandby
    
  • 啟動Standby NameNode
    $HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
    

5. 啟動ZooKeeper Failover Controller (ZKFC)

ZKFC用于監控NameNode的狀態,并在Active NameNode故障時自動觸發故障轉移。在每個NameNode節點上啟動ZKFC:

$HADOOP_HOME/sbin/hadoop-daemon.sh start zkfc

6. 啟動DataNode服務

在所有DataNode節點上啟動DataNode服務,向Active和Standby NameNode報告數據塊信息:

$HADOOP_HOME/sbin/hadoop-daemon.sh start datanode

7. 驗證高可用性

  • 檢查集群狀態:使用以下命令查看NameNode和DataNode的運行情況:
    hdfs dfsadmin -report
    
    輸出應顯示Active和Standby NameNode均處于“live”狀態。
  • 模擬故障切換:手動停止Active NameNode(如nn1)的NameNode服務:
    $HADOOP_HOME/sbin/stop-dfs.sh --config $HADOOP_HOME/etc/hadoop nn1
    
    等待10-30秒后,再次執行hdfs dfsadmin -report,應看到Standby NameNode(如nn2)已切換為Active狀態。此時訪問HDFS(如hdfs dfs -ls /)仍能正常工作,驗證了自動故障轉移的有效性。

通過以上步驟,HDFS在Linux環境下實現了高可用性,能夠有效應對NameNode單點故障,保障數據服務的連續性。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女