hdfs、zookeepeer之HA模式
HA简介
1.所谓HA,即高可用(high available)
2.消除单点故障,避免集群瘫痪,hdfs中namenode保存了整个集群的元数据,如果namenode所在机器宕机,则整个集群瘫痪,HA
能够即使将备用的namenode替代宕机节点的namenode
3.当机器出现故障,或需要升级等操作时,HA起到了很好的作用
准备工作
1.硬件需求:
三台主机(网络均能ping通、ssh免密服务)
2.软件需求:
①jdk 我使用的是jdk1.8.0_131
②hadoop 我使用hadoop-2.7.2
③zookeeper 我使用zookeeper-3.4.10
以上软件单独的配置我就不说了,网上有很多安装教程,下面我主要说明搭建HA的一些原理、步骤。
HA工作原理
图解:
说明:
①集群文件共享区主要存放每个处于active的namenode所写的edit-profile文件和fsimage镜像,供其它备份的namenode节点(即standby namenode)
同步,及时更新集群的元数据信息
②代理区的FailoverController有active和standby两种,它们分别控制同一主机上namenode,防止脑裂现象(brain split)
如:当主机hadoop1和主机hadoop2网络连接异常时,原本hadoop1上的namenode为active,它并没有宕机,而主机hadoop2认为它宕机了,FailoverControlle
stanby 准备将自己主机上的namenode提升为active状态
为了防止脑裂现象,FailoverController stanby会先发送请求给FailoverController active去将它控制的namenode改变为stanby状态,之后hadoop2的namenode
才能为active状态
③JournalNode的作用:两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,
会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNS中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。
standby可以确保在集群出错时,命名空间状态已经完全同步了。
④zookeeper投票选举:zookeeper集群通过心跳检测,监视着集群中各个节点的健康状态,如果发现有节点下线,将自动删除该节点在zookeeper中的信息,进行重新
投票选举。
选举制度
- 默认选举节点数大的作为leader
- leader必须得到集群中半数以上的节点的选举
- 票数相当时,节点值小的节点把自己的票数给大的
hdfs-HA搭建过程
一、zookeeper集群配置
①将zookeeper安装目录下的conf文件夹下zoo-template.cfg改为zoo.cfg,并且做如下配置
修改zookeeper的启动目录:dataDir=/opt/module/zookeeper-3.4.10/data/zkData,并且在安装目录下建立出该路径文件夹
在/opt/module/zookeeper-3.4.10/data/zkData下建立一个myid文件,文件内写集群配置中对应的主机号
添加集群配置:
server.1=centos101:2888:3888 (在centos101主机上/opt/module/zookeeper-3.4.10/data/zkData/myid中写1)
server.2=centos102:2888:3888 (在centos102主机上/opt/module/zookeeper-3.4.10/data/zkData/myid中写2)
server.3=centos103:2888:3888 (在centos103主机上/opt/module/zookeeper-3.4.10/data/zkData/myid中写3)
启动zookeeper集群:分别在每台主机上启动zookeeper
cneos101中 zookeeper-3.4.10/bin/zkServer.sh start
cneos102中 zookeeper-3.4.10/bin/zkServer.sh start
cneos103中 zookeeper-3.4.10/bin/zkServer.sh start
查看启动状态
zookeeper-3.4.10/bin/zkServer.sh status
出现Mode: follower才表示zookeeper集群启动成功,注意:等所有主机都启动zookeeper后才能保证集群中有选举结果,才能查看到集群状态
二、hdfs集群配置
zookeeper结合hdfs的配置写在下面两个配置内了
hdfs-site.xml配置
<configuration>
<!--规定副本数-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--规定集群服务名称-->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!--规定指定集群下的namenode的名称-->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!--指定集群下的namenode的rpc通讯地址-->
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>centos101:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>centos102:8020</value>
</property>
<!--指定集群下的namenode的http通讯地址-->
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>centos101:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>centos102:50070</value>
</property>
<!--指定集群下的所有namenode共享journal nodes的位置-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://centos101:8485;centos102:8485;centos103:8485/mycluster</value>
</property>
<!--将namenode提起为active时的代理类-->
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property> <!--权限检查开关-->
<property>
<name>dfs.permissions.enable</name>
<value>false</value>
</property> <!--仿脑裂的隔离机制-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<!--仿脑裂的隔离机制使用ssh私钥地址-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/ljm/.ssh/id_rsa</value>
</property>
<!--开启自动故障转移zookeeper-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
core-site.xml配置
<configuration>
<!-- 指定集群 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property> <!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/HA/hadoop-2.7.2/data/tmp</value>
</property> <!-- JournalNode存储数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/module/HA/hadoop-2.7.2/data/tmp/jn</value>
</property>
<!-- 配置zookepeer集群地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>centos101:2181,centos102:2181,centos103:2181</value>
</property> </configuration>
三、启动hdfs-HA集群
首次搭建需要
①启动启动所有journalnode
命令:sbin/hadoop-daemon.sh start journalnode
注意:格式化hdfs前,必须启动所有journalnode
②格式化hdfs
命令:bin/hdfs namenode -format
③启动zookeeper(可以写一个脚本一次性启动)
cneos101中 zookeeper-3.4.10/bin/zkServer.sh start
cneos102中 zookeeper-3.4.10/bin/zkServer.sh start
cneos103中 zookeeper-3.4.10/bin/zkServer.sh start
检查zookeeper
zookeeper-3.4.10/bin/zkServer.sh status
④格式化hdfs中的zkfc (即代理FailoverController)
命令:/bin/hdfs zkfc -formatZK
⑤可以一次性启动hdfs
命令:sbin/start-dfs.sh
结果如下:
hdfs、zookeepeer之HA模式的更多相关文章
- hadoop hdfs ha 模式
这是我自己在公司一个搭建公司大数据框架是自己的选项,在配置yarn ha 出现了nodemanager起不来的问题于是我把yarn搭建为普通yarn 如果有人解决 高yarn的nodemanager问 ...
- HA模式下历史服务器配置
笔者的集群是 HA 模式的( HDFS 和 ResourceManager HA).在 ” Hadoop-2.5.0-cdh5.3.2 HA 安装" 中详细讲解了关于 HA 模式的搭建,这里就不再赘述 ...
- Hadoop-2.X HA模式下的FSImage和EditsLog合并过程
补充了一下NameNode启动过程中有关FSImage与EditsLog的相关知识. 一.什么是FSImage和EditsLog 我们知道HDFS是一个分布式文件存储系统,文件分布式存储在多个Data ...
- 一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)
1)集群规划:主机名 IP 安装的软件 运行的进程master 192.168.199.130 jdk.hadoop ...
- 搭建HBase的本地模式、伪分布式、全分布式和HA模式
一.安装HBase: 我这里选择的是hbase-1.3.1-bin.tar.gz版本解压HBase: tar -zxvf hbase-1.3.1-bin.tar.gz -C ~/training 配置 ...
- [hadoop][会装]HBase集群安装--基于hadoop ha模式
可以参考部署HBase系统(分布式部署) 和基于无HA模式的hadoop下部署相比,主要是修改hbase-site .xml文件,修改如下参数即可: <property> <name ...
- [hadoop][会装]hadoop ha模式安装
1.简介 2.X版本后namenode支持了HA特性,使得整个文件系统的可用性更加增强. 2.安装前提 zookeeper集群,zookeeper的安装参考[hadoop][会装]zookeeper安 ...
- 大数据技术之Hadoop3.1.2版本HA模式
大数据技术之Hadoop3.1.2版本HA模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Hadoop的HA特点 1>.主备NameNode 2>.解决单点故障 ...
- 分布式集群HA模式部署
一:HDFS系统架构 (一)利用secondary node备份实现数据可靠性 (二)问题:NameNode的可用性不高,当NameNode节点宕机,则服务终止 二:HA架构---提高NameNode ...
随机推荐
- 今天发布MVC项目一直找不到页面
刚开始以为是framwork版本太高,服务器没安装. 后面想到应用池版本忘记选了
- vue-复制功能插件-兼容性最好的插件
记录给自己用,不进同一次坑: https://github.com/Inndy/vue-clipboard2
- multipart/form-data请求与文件上传的细节
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- docker快速入门02——在docker下开启mysql5.6 binlog日志
1.检查容器状态 [root@localhost ~]# docker ps 执行这个命令可以看到所有正在运行当中的容器,如果加上-a参数,就可以看到所有的容器包括停止的. 我们可以看到容器正在运行当 ...
- mysql统计表中条目个数的方法举例
说明:以下标红且加大括号的均需要替换为实际待查询的表名或数据库名. [1].统计某张或某几张表的数据量: select count(*) from {TABLE_NAME}; #or select c ...
- Share:《THE ULTIMATE XSS PROTECTION CHEATSHEET FOR DEVELOPERS》
Ajin Abraham(OWASP Xenotix XSS Exploit Framework的作者哦!)编写的<THE ULTIMATE XSS PROTECTION CHEATSHEET ...
- Django学习系列13:Django ORM和第一个模型
ORM—对象关系映射器,是一个数据抽象层,描述存储在数据库中的表,行和列.处理数据库时,可以使用熟悉的面向对象方式,写出更好的代码. 在ORM的概念中,类对应数据库中的表,属性对应列,类的单个实例表示 ...
- mongodb 3.0 WT 引擎性能测试(转载)
网上转载来的测试,仅供参考.原文地址:http://www.mongoing.com/benchmark_3_0 类机器. 测试均在单机器,单实例的情况下进行. 机器A(cache 12G,即内存&g ...
- 关于reverse()和sort()方法的返回值问题
关于reverse()和sort()方法的返回值问题 先说结论:reverse()和sort()方法的返回值并不是当前步骤排序后的数组,而是数组的引用. 展示如下: var arr = [2, ...
- 解决 Maven项目进行编译( mvn compile )时出现的错误
错误信息: 在 pom.xml 文件 设置一下Maven的属性 <!--Maven 属性--> <properties> <!--项目的编码格式--> <pr ...