集群高可用
阿里云Cloudera CDP默認支持集群中組件HDFS NameNode、YARN ResourceManager以及Hive Metastore Server的高可用,此外對于Hive、Hue等組件用于存儲元數據的元數據庫MariaDB也做了主從備份,能最大限度保證服務的可用性和數據的可恢復性。
組件布局
高可用集群采用3 Master架構,為了節省您的硬件成本,我們默認會從3個Master節點里拿出一個節點作為Utility工具節點。
HDFS NameNode
對于HDFS NameNode,阿里云Cloudera CDP在兩臺Master節點上均部署了NameNode組件,其中一臺處于活躍狀態,另外一臺作為備用。
在Master節點和Utility節點上均部署了JournalNode,保證NameNode日志的高可用。此外,為了保證處于活躍狀態NameNode宕機之后,能自動切換到備用的NameNode,在兩臺Master節點上部署了FailoverController,整個故障切換過程無需人工介入。
YARN ResourceManager
和NameNode類似,阿里云Cloudera CDP在兩臺Master節點上部署了ResourceManager,一個ResourceManager實例處于活躍狀態,另外一臺作為備用。
由于ResourceManager內嵌的ActiveStandbyElector會對ResourceManager做健康檢查和leader選舉,因此ResourceManager不需要部署額外的ZKFC組件。
當活躍的ResourceManager宕機之后,會快速切換到備用的ResourceManager,切換過程無需人工介入。
元數據庫
Cloudera Manager、Hive和Hue等組件都需要使用數據庫存儲他們的元數據信息,目前元數據庫部署在Utility節點和Master-1節點上,采用主備的架構,Utility節點上的元數據庫作為Master,Master-1節點上的元數據庫作為Slave去復制Utility節點的元數據庫的數據。
如果Utility節點宕機或者Utility節點上的MariaDB Master出現故障,僅需要簡單的操作就可以將元數據庫切換到cdp-master-1節點上的備庫,具體操作如下:
在cdp-master-1上運行命令:
mysql
進入mysql終端停止MariaDB Slave的IO線程:
stop slave io_thread
關閉MariaDB的slave角色:
stop slave
刪除目錄
/var/lib/mysql
目錄下的文件master.info 和 relay-log.info:cd /var/lib/mysql; mv master.info master.info.bak; mv relay-log.info relay-log.info.bak
修改MariaDB的配置文件:
vi /etc/my.cnf
# 刪除:
read_only
relay-log = relay-bin
relay-log-index = relay-bin.index
# 添加:
log_bin = mysql-bin
log-bin-index = mysql-bin.index
binlog_format = ROW
max_binlog_size = 100M
重啟MariaDB:
service mysql restart
在cdp-master-1上運行命令:
mysql
進入mysql終端,執行命令:reset master
將CM的數據庫切換到從庫上:修改在Utility節點的配置文件:
vi /etc/cloudera-scm-server/db.properties
# 將com.cloudera.cmf.db.host修改為當前機器的fdqn
com.cloudera.cmf.db.host=[MariaDB slave所在機器的fdqn]
重啟CM:
service cloudera-scm-server restart
hive/hue/rman的數據庫地址可以在CM的管控界面進行配置并重啟以生效,以Hue為例