溫馨提示×

Hadoop在Linux中如何實現高可用性

小樊
33
2025-10-14 06:15:46
欄目: 智能運維

Hadoop在Linux中實現高可用性的核心步驟

一、準備工作

在開始配置前,需完成以下基礎準備:

  • 環境要求:選擇CentOS 7、Ubuntu 20.04等主流Linux發行版;所有節點安裝JDK 8及以上版本(建議統一版本以避免兼容性問題);為每個節點分配靜態IP地址,并配置主機名與DNS解析(確保節點間可通過主機名互相訪問)。
  • 網絡與安全:關閉防火墻(測試階段)或開放必要端口(如HDFS的8020、50070端口,YARN的8030、8088端口);配置SSH免密登錄(NameNode、ResourceManager節點間需能無密碼互相訪問,便于故障轉移時執行遠程命令)。
  • 時間同步:安裝并配置NTP服務(如chrony),確保所有節點時間一致(時間偏差過大會導致ZooKeeper協調失敗或數據不一致)。
  • ZooKeeper集群:部署3或5節點的ZooKeeper集群(奇數節點保證多數派原則),用于監控NameNode和ResourceManager的狀態及協調故障轉移。

二、配置NameNode高可用性(HDFS HA)

NameNode是HDFS的核心元數據管理組件,其高可用性通過Active/Standby模式+共享存儲+ZooKeeper協調實現:

  1. 配置共享存儲
    使用JournalNode集群(至少3節點)作為NameNode元數據的共享存儲。在hdfs-site.xml中添加以下配置:
    <property>
      <name>dfs.namenode.shared.edits.dir</name>
      <value>qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/cluster1</value>
    </property>
    <property>
      <name>dfs.journalnode.edits.dir</name>
      <value>/path/to/journalnode/data</value>
    </property>
    
    JournalNode負責同步Active NameNode的元數據修改,Standby NameNode通過讀取共享存儲保持與Active節點元數據一致。
  2. 配置NameNode元數據目錄
    hdfs-site.xml中指定Active和Standby NameNode的本地元數據存儲路徑:
    <property>
      <name>dfs.namenode.name.dir</name>
      <value>/path/to/namenode/dir1,/path/to/namenode/dir2</value>
    </property>
    
  3. 配置HDFS服務標識
    core-site.xml中設置HDFS的默認文件系統為nameservice(邏輯集群名),并指定ZooKeeper集群地址:
    <property>
      <name>fs.defaultFS</name>
      <value>hdfs://cluster1</value>
    </property>
    <property>
      <name>ha.zookeeper.quorum</name>
      <value>zoo1:2181,zoo2:2181,zoo3:2181</value>
    </property>
    
  4. 配置NameNode實例
    hdfs-site.xml中定義nameservice下的NameNode節點(如namenode1、namenode2),并指定其RPC和HTTP地址:
    <property>
      <name>dfs.ha.namenodes.cluster1</name>
      <value>namenode1,namenode2</value>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.cluster1.namenode1</name>
      <value>namenode1:8020</value>
    </property>
    <property>
      <name>dfs.namenode.rpc-address.cluster1.namenode2</name>
      <value>namenode2:8020</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.cluster1.namenode1</name>
      <value>namenode1:50070</value>
    </property>
    <property>
      <name>dfs.namenode.http-address.cluster1.namenode2</name>
      <value>namenode2:50070</value>
    </property>
    
  5. 啟用自動故障轉移
    hdfs-site.xml中開啟自動故障轉移功能:
    <property>
      <name>dfs.ha.automatic-failover.enabled</name>
      <value>true</value>
    </property>
    
  6. 啟動JournalNode與NameNode
    • 在所有JournalNode節點上執行hdfs --daemon start journalnode啟動JournalNode服務;
    • 在主NameNode節點上執行hdfs namenode -format格式化元數據;
    • 啟動主NameNode:hdfs --daemon start namenode;
    • 在Standby NameNode節點上執行hdfs namenode -bootstrapStandby同步主節點元數據;
    • 啟動Standby NameNode:hdfs --daemon start namenode。
  7. 啟動ZKFC(自動故障轉移控制器)
    在每個NameNode節點上執行hdfs --daemon start zkfc,ZKFC會監控NameNode的健康狀態(通過ZooKeeper),當Active NameNode故障時,自動觸發Standby節點接管服務。

三、配置ResourceManager高可用性(YARN HA)

ResourceManager負責YARN集群的資源調度,其高可用性通過主備ResourceManager+ZooKeeper協調實現:

  1. 配置YARN服務標識
    core-site.xml中設置YARN的默認資源管理器地址:
    <property>
      <name>yarn.resourcemanager.ha.enabled</name>
      <value>true</value>
    </property>
    <property>
      <name>yarn.resourcemanager.cluster-id</name>
      <value>yarn1</value>
    </property>
    <property>
      <name>yarn.resourcemanager.ha.rm-ids</name>
      <value>rm1,rm2</value>
    </property>
    <property>
      <name>yarn.resourcemanager.zk-address</name>
      <value>zoo1:2181,zoo2:2181,zoo3:2181</value>
    </property>
    <property>
      <name>yarn.resourcemanager.hostname.rm1</name>
      <value>resourcemanager1</value>
    </property>
    <property>
      <name>yarn.resourcemanager.hostname.rm2</name>
      <value>resourcemanager2</value>
    </property>
    
  2. 配置ResourceManager故障轉移
    yarn-site.xml中設置故障轉移策略(如基于ZooKeeper的自動故障轉移):
    <property>
      <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
      <value>true</value>
    </property>
    <property>
      <name>yarn.resourcemanager.ha.fencing.method</name>
      <value>shell</value>
    </property>
    <property>
      <name>yarn.resourcemanager.ha.fencing.script</name>
      <value>/path/to/fence_script.sh</value>
    </property>
    
    fencing.script用于在故障轉移時隔離故障節點(如殺死殘留進程),避免腦裂問題。
  3. 啟動ResourceManager
    在主ResourceManager節點上執行start-yarn.sh,備用ResourceManager會自動同步主節點狀態。通過yarn rmadmin -getServiceState rm1命令可查看ResourceManager狀態。

四、數據備份與恢復策略

  1. 定期備份元數據
    使用hdfs dfsadmin -fetchImage命令定期將NameNode的元數據下載到本地或遠程存儲(如NFS、S3),確保元數據不會因節點故障丟失。
  2. 數據多副本存儲
    hdfs-site.xml中設置dfs.replication(默認3副本),確保數據分布在多個DataNode上,即使某個節點故障,數據仍可從其他副本讀取。
  3. 災難恢復演練
    定期模擬NameNode或DataNode故障,驗證備份數據的可用性(如從備份中恢復元數據,重新啟動集群)。

五、監控與告警配置

  1. 內置監控工具
    使用Hadoop自帶的Web UI(如NameNode的50070端口、ResourceManager的8088端口)監控集群狀態,包括NameNode健康、ResourceManager資源使用率、DataNode數量等。
  2. 第三方監控工具
    集成Prometheus+Granafa或Ganglia,收集集群的性能指標(如CPU、內存、磁盤IO、網絡帶寬),設置告警規則(如NameNode CPU使用率超過80%、DataNode宕機數量超過閾值),及時通知運維人員處理。

六、測試高可用性

  1. 模擬NameNode故障
    停止主NameNode的namenode進程,觀察Standby NameNode是否在幾秒內自動切換為Active狀態(通過jps命令查看進程狀態,或訪問NameNode Web UI確認)。
  2. 模擬ResourceManager故障
    停止主ResourceManager的resourcemanager進程,檢查備用ResourceManager是否自動接管服務(通過YARN Web UI查看ResourceManager狀態)。
  3. 模擬DataNode故障
    停止某個DataNode進程,驗證數據是否仍可正常讀寫(通過hdfs dfs -put/hdfs dfs -get命令測試),并確認集群會自動將該DataNode標記為“dead”,不再向其分配任務。

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