05.Hadoop:利用zookeeper模拟实现HA高可用

本节主要内容:

利用zookeeper模拟实现HA高可用

1.系统环境:

OS:CentOS Linux release 7.5.1804 (Core)

CPU:2核心

Memory:1GB

运行用户:root

JDK版本:1.8.0_252

Hadoop版本:cdh5.16.2

2.集群各节点角色规划为:

172.26.37.245 node1.hadoop.com---->namenode,zookeeper,journalnode,hadoop-hdfs-zkfc

172.26.37.246 node2.hadoop.com---->datanode,zookeeper,journalnode

172.26.37.247  node3.hadoop.com---->datanode

172.26.37.248  node4.hadoop.com---->namenode,zookeeper,journalnode,hadoop-hdfs-zkfc

172.26.37.248  node4.hadoop.com---->SecondaryNameNode取消

一.安装

node1.hadoop.com主机

        # yum -y install zookeeper-server hadoop-hdfs-journalnode hadoop-hdfs-zkfc

node2.hadoop.com主机

        # yum -y install zookeeper-server hadoop-hdfs-journalnode

node4.hadoop.com主机

        # yum -y install zookeeper-server hadoop-hdfs-journalnode hadoop-hdfs-zkfc hadoop-hdfs-namenode

二.配置文件

1./etc/hadoop/conf/core-site.xml变更(所有节点)

        # cp -p /etc/hadoop/conf/core-site.xml /etc/hadoop/conf/core-site.xml.20200617

        # vi /etc/hadoop/conf/core-site.xml

变更为以下内容

<configuration>

    <property>

        <name>fs.defaultFS</name>

        <value>hdfs://cluster1</value>

        <!--创建集群地址--> 

    </property>

    <property>

        <name>hadoop.tmp.dir</name>

        <value>/home/hadoop/tmp</value> 

        <!--声明hadoop的缓存文件目录-->

    </property>

    <property>

        <name>ha.zookeeper.quorum</name>

         <value>node1.hadoop.com:2181,node2.hadoop.com:2181,node4.hadoop.com:2181</value>

        <!--声明那些主机部署zookeeper-->

    </property>

</configuration>

2./etc/hadoop/conf/hdfs-site.xml变更(所有节点)

        # cp -p /etc/hadoop/conf/hdfs-site.xml /etc/hadoop/conf/hdfs-site.xml.20200617

        # vi /etc/hadoop/conf/hdfs-site.xml

<configuration>

    <property>

        <name>dfs.nameservices</name>

        <value>cluster1</value>

        <!--自定义HDFS服务名-->

    </property>

    <property>

        <name>dfs.ha.namenodes.cluster1</name>

        <value>node1,node4</value>

        <!--参与到HA的namemode节点名称;注意:这里自定义起名,后面后这些节点的解析-->

    </property>

    <property>

        <name>dfs.namenode.rpc-address.cluster1.node1</name>

        <!--这里是对node1这个节点的名称解析,同时指明rpc的端口-->

        <value>node1.hadoop.com:9000</value>

    </property>

    <property>

        <name>dfs.namenode.http-address.cluster1.node1</name>

        <!--这里是对node1这个节点的名称解析,同时http管理地址的端口-->

        <value>node1.hadoop.com:50070</value>

    </property>

    <property>

        <name>dfs.namenode.rpc-address.cluster1.node4</name>

        <value>node4.hadoop.com:9000</value>

    </property>

    <property>

        <name>dfs.namenode.http-address.cluster1.node4</name>

        <value>node4.hadoop.com:50070</value>

    </property>

    <property>

        <name>dfs.ha.automatic-failover.enabled</name>

        <!--HA当中的失败自动转移,默认是关闭的,手动打开-->

    <value>true</value>

    </property>

    <property>

        <name>dfs.namenode.shared.edits.dir</name>

        <value>qjournal://node1.hadoop.com:8485;node2.hadoop.com:8485;node4.hadoop.com:8485/cluster1</value>

        <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->

    </property>

    <property>

        <name>dfs.client.failover.proxy.provider.cluster1</name>

        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

        <!-- 实现故障切换调用的类 -->

    </property>

    <property>

        <name>dfs.journalnode.edits.dir</name>

        <value>/home/hadoop/data/journaldata/jn</value>

        <!-- 指定JournalNode集群在对nameNode的目录进行共享时,存储数据的磁盘路径 -->

    </property>

    <property>

        <name>dfs.ha.fencing.methods</name>

        <value>shell(/bin/true)

              sshfence

        </value>

        <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行--> 

    </property>

    <property>

        <name>dfs.ha.fencing.ssh.private-key-files</name>

        <value>/home/hadoop/.ssh/id_rsa</value>

        <!-- 使用sshfence隔离机制时需要ssh免登陆 -->

    </property>

    <property>

        <name>dfs.ha.fencing.ssh.connect-timeout</name>

        <value>10000</value>

        <!--配置sshfence隔离机制超时时间-->

    </property>

    <property>

        <name>dfs.namenode.handler.count</name>

        <value>100</value>

    </property>

    <property>

        <name>dfs.namenode.name.dir</name>

        <value>file:///data/hdfs/name</value>

    </property>

    <property>

        <name>dfs.datanode.name.dir</name>

        <value>file:///data/hdfs/data</value>

    </property>

</configuration>

3./etc/zookeeper/conf/zoo.cfg(node1.2.4节点)

        # cp -p /etc/zookeeper/conf/zoo.cfg /etc/zookeeper/conf/zoo.cfg.org

        # vi /etc/zookeeper/conf/zoo.cfg

追加以下内容

server.1=node1.hadoop.com:2888:3888

server.2=node2.hadoop.com:2888:3888

server.3=node4.hadoop.com:2888:3888

<!--声明ha系统中,安装了zookeeper的主机和端口-->

        每台主机写入对应的myid

node1

# echo "1" >/var/lib/zookeeper/myid

node2

# echo "2" >/var/lib/zookeeper/myid

node4

# echo "3" >/var/lib/zookeeper/myid

node1,针对上面的server.1;其他主机分别为2,3

三.启动服务

0.处理好datanode节点和原namenode节点服务;接前环境,关闭Node1的namenode服务

        # service hadoop-hdfs-namenode  stop

1.启动所有节点的zookeeper(node1.2.4)

        # cd /var/lib/zookeeper

        # mkdir version-2

        # chown -R zookeeper:zookeeper /var/lib/zookeeper

        # chmod -R 755 /var/lib/zookeeper

        # service zookeeper-server start

        # service zookeeper-server status

2.启动所有节点的journode(node1.2.4)

/home/hadoop/data/journaldata/jn 先创建

        # mkdir -p /home/hadoop/data/journaldata/jn

        # chown -R hdfs:hdfs /home/hadoop/data/journaldata/jn

        # service hadoop-hdfs-journalnode  start

        # service hadoop-hdfs-journalnode  status

3.在主节点node1上进行数据格式化

        # sudo -u hdfs hdfs namenode -format  //namenode节点格式化

        # sudo -u hdfs hdfs zkfc -formatZK    //初始化高可用,

4.namenode节点上启用namenode服务(node1.4)

        # service hadoop-hdfs-namenode start

        # service hadoop-hdfs-namenode status

5.namenode节点上启动zkfc服务(node1.4)

        # service hadoop-hdfs-zkfc start

        # service hadoop-hdfs-zkfc status

6.备份节点上执行数据同步

        # sudo -u hdfs hdfs namenode -bootstrapStandby

7.数据同步后登陆不同namenode:50070

一个为active

一个为standby

如果为双active或双standby,请检查配置及启动顺序

8.node1关闭active节点的namenode服务

        # service hadoop-hdfs-namenode stop

        # service hadoop-hdfs-namenode status

备份主动变为active


9.node1启动namenode服务,状态不会抢占为active,变为stanby

        # service hadoop-hdfs-namenode start

        # service hadoop-hdfs-namenode status


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342