hadoop高可用性部署

高可用hdfs部署

当你使用hadop进入一段时间后,你可能会碰到更高的要求。系统稳定吗?uptime时间能达到100%?为了可以安抚这类担心情绪你须要作更多的工做.在集群里hadoop的NameNode是SPOF模式,加上backup namenode保证namenode数据在硬盘正确完整的存储,但一旦进程或者服务器挂掉,以及不得不进行的硬件更换升级致使停机,集群同样会处于不可用状态,这也是运行中的hadoop生态系统最麻烦的事情。这时候你就只能重启,或者在另一个服务器上启动一个namenode.node

为保证高可用性,咱们必须有1台StandbyNamenode角色的服务器,它可以随时保持与namenode服务器的状态同步,随时可以接替namenode的工做。最简单的办法是StandbyNamenode与namenode都使用NFS远程挂载一个如出一辙的地址来作存储。这样当namenode的edits更改时StandbyNamenode可以随时知道。nfs的方案可能不够健壮,可是足够说服其它人安心了。apache

准备一台服务器做为nfs服务端。硬盘网卡须要最好质量的。预算足够的话建议购买专业的存储主机。服务器

下面是配置过程:ssh

为保证始终只有一个namenode是处于激活状态的。也就是始终只有一个namenode能够写edits,必须有一个方法用来阻止非激活状态的namenode去写这个文件。称为fencing方法,在配置
dfs.ha.fencing.methods里边指定。ide

为保证主备namenode的快速切换,全部DataNode都会同时配置这2个namenode的地址,同时向这2个namenode发送信息和心跳。 这2个namenode谁先启动谁就处于初始激活状态。oop

客户端的datanode
hdfs-site.xml 配置以下:orm

<property>
<name>fs.defaultFS</name>
<value>hdfs://clusternamenode</value>
</property>
server

<property>
<name>dfs.nameservices</name>
<value>clusternamenode</value>
</property>

<property>
<name>dfs.ha.namenodes.clusternamenode</name>
<value>namenode1,namenode2</value>
</property>xml

namenode1,namenode2是你准备用于做为主备namenode的服务器。最多就2台!!进程

由于有2个namenode因此不少配置都要分别设置
<property>
<name>dfs.namenode.rpc-address.clusternamenode.namenode1</name>
<value>namenode1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.clusternamenode.namenode2</name>
<value>namenode2:8020</value>
</property>

指定每一个NameNode监听的rpc通讯端口
the fully-qualified RPC address for each NameNode to listen on

这些配置也要做相应修改只是不一样端口
dfs.namenode.servicerpc-address.clusternamenode.namenode1
dfs.namenode.servicerpc-address.clusternamenode.namenode2
dfs.namenode.http-address.clusternamenode.namenode1
dfs.namenode.http-address.clusternamenode.namenode2
dfs.namenode.shared.edits.dir file:///mnt//namenode-shared 指定nfs挂载的路径


HDFS客户端检查目前激活的namenode是哪一个的驱动
<property>
<name>dfs.client.failover.proxy.provider.clusternamenode</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

fencing方法

<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>

<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/${yourname}/.ssh/id_rsa</value>
</property>

<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
sshfence使用ssh链接的方式来拦截杀死服务进程,以防止它修改edits文件
dfs.ha.fencing.ssh.private-key-files 是ssh的登陆验证文件路径。你必须在2台namenode上互相设置免密码登陆。
若是没有这个文件 /home/${yourname}/.ssh/id_rsa 。你能够用命令ssh-keygen从新生成。
dfs.ha.fencing.ssh.connect-timeout 是sshfence的超时失效时间,到这个时间就认为失败了。

上面的设置咱们已经实现了 向2台namenode发送信息跟保持心跳,同时防止2台namenode同是处于激活状态。可是激活的namenodey一旦挂掉,
仍是须要手动运行命令 bin/hdfs haadmin -failover来切换,zookeeper能帮咱们自动运行这个命令.
须要一个zookeeper的监控团。在生常环境中至少须要3个节点的zookeeper来组成这个监控团。zookeeper的节点只能是单数。
同时hdfs内置了一个zookeeper的客户端ZKFailoverController,这个组件的做用是管理跟监控namenode的状态,同时向zookeeper争取一个称为znode锁。
这个锁处于激活状态,该namenode处于激活状态

zookeeper与ZKFailoverController的配置以下:(注意在生产环境中咱们至少须要3台zookeeper)

<property>
<name>ha.zookeeper.quorum</name>
<value>192.168.2.20</value>
</property>

重启集群后在namenode上运行:
bin/hdfs zkfc -formatZK //启动zookeeper的监控客户端。
到此高可用性的hdfs就上线了,接下来配置一套高可用hbase。

 

高可用hbase部署

先中止hbase集群

配置conf/hbase-site.xml

<property>
<name>hbase.rootdir</name>
<value>hdfs://clusternamenode/hbase</value>
</property>

//clusternamenode 就是上面配置的hadoop namenode.

你可能须要删除zookeeper上面的 /hbase目录/splitlogs 这个文件。

hbase.zookeeper.property.quorum 192.168.2.20,192.168.2.21,192.168.2.22 zookeeper监管列表
运行是环境变量配置conf/hbase-env.sh :
HBASE_MANAGES_ZK false 不使用内置的zookeeper服务

启动hbasebin/start-hbase.sh

相关文章
相关标签/搜索