集群高可用

更新时间:

阿里云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,整个故障切换过程无需人工介入。

image.png

YARN ResourceManager

和NameNode类似,阿里云Cloudera CDP在两台Master节点上部署了ResourceManager,一个ResourceManager实例处于活跃状态,另外一台作为备用。

由于ResourceManager内嵌的ActiveStandbyElector会对ResourceManager做健康检查和leader选举,因此ResourceManager不需要部署额外的ZKFC组件。

当活跃的ResourceManager宕机之后,会快速切换到备用的ResourceManager,切换过程无需人工介入。

image.png

元数据库

Cloudera Manager、Hive和Hue等组件都需要使用数据库存储他们的元数据信息,目前元数据库部署在Utility节点和Master-1节点上,采用主备的架构,Utility节点上的元数据库作为Master,Master-1节点上的元数据库作为Slave去复制Utility节点的元数据库的数据。

image.png

如果Utility节点宕机或者Utility节点上的MariaDB Master出现故障,仅需要简单的操作就可以将元数据库切换到cdp-master-1节点上的备库,具体操作如下:

  1. 在cdp-master-1上运行命令:mysql 进入mysql终端

  2. 停止MariaDB Slave的IO线程:stop slave io_thread

  3. 关闭MariaDB的slave角色:stop slave

  4. 删除目录/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

  5. 修改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
  1. 重启MariaDB:service mysql restart

  2. 在cdp-master-1上运行命令:mysql 进入mysql终端,执行命令:reset master

  3. 将CM的数据库切换到从库上:修改在Utility节点的配置文件:vi /etc/cloudera-scm-server/db.properties

# 将com.cloudera.cmf.db.host修改为当前机器的fdqn
com.cloudera.cmf.db.host=[MariaDB slave所在机器的fdqn]
  1. 重启CM:service cloudera-scm-server restart

  2. hive/hue/rman的数据库地址可以在CM的管控界面进行配置并重启以生效,以Hue为例

hue界面