• Hadoop(五)zookeeper 搭建高可用集群


    ############################################---------- zookeeper 安装 -------------###############################

    zookeeper
    特征
    leader 投票发起和决议,更新系统状态
    follower 参与【选举】,处理并反馈客户请求
    预设5台:
    1、2分别启动后因为未过半都处于观望
    3启动后,1、2、3都选择3,数量过半因此3为leader,1、2为follower
    4、5启动后因为领导已经产生,则自动沦为follower
    zookeeper存活条件 半数以上节点活(节点数量为奇数)
    全局数据一致 每个服务器都是一个相同的副本,数据一致,客户端连接上哪台服务器都可以
    所有客户端的请求 同一个用户会根据发送请求的先后顺序依次处理
    数据更新原子性 单次数据更新只有成功和失败两种可能性
    数据更新实时性 在一定的时间内,client可以读到最新数据

    数据结构如图

    # 需要提前准备好jdk环境
    # 解压步骤省略
    # 切换目录:
    cd /opt/bigdata/hadoop
    # 创建目录:
    mkdir zookeeper
    # 建立软连接:
    ln -s zookeeper345/ zookeeper/
    # 创建数据目录:
    mkdir zookeeper/zkdata
    # 修改zookeeper配置文件:
    cd /opt/bigdata/hadoop/zookeeper345/conf
    # 重命令 zoo.sample.cfg
    mv zoo.sample.cfg zoo.cfg
    vi zoo.cfg

    #------------ 配置信息 ----------------#
    tickTime=2000 毫秒,服务器和客户端之间,服务器之间心跳间隔,最小超时为2倍
    initLimit=10 follower启动后与leader之间同步数据,并且确定可以对外服务状态的最大时限为10*tickTime
    syncLimit=5 follower和leader之间如果在syncLimit*tickTime时间内无法通过心跳确认,则leader判定该follower死亡,移出服务列表
    dataDir=/opt/bigdata/hadoop/zookeeper/zkdata
    clientPort=2181
    server.1=vbserver:2888:3888
    server.2=vmslave1:2888:3888
    server.3=vmslave2:2888:3888
    server.4=vmslave3:2888:3888


    # 在zkdata目录中创建myid文件,并将当前host下对应的服务器编号1/2/3/4存在其中
    # 配置环境变量:
    export ZK_HOME=/opt/bigdata/hadoop/zookeeper345
    export PATH=$ZK_HOME/bin:$ZK_HOME/sbin:$PATH

    # 激活环境变量:
    source /etc/profile

    # 复制以上过程至其他三台机器后,分别在4台机器上启动zookeeper服务 zkServer.sh stop 关闭服务
    [root@vmslave1 ~]# zkServer.sh start
    -----------------
    JMX enabled by default
    Using config: /opt/bigdata/hadoop/zookeeper345/sbin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
    -----------------

    # 在每台机器上查看服务状态
    [root@vmslave1 ~]# zkServer.sh status
    -----------------
    JMX enabled by default
    Using config: /opt/bigdata/hadoop/zookeeper345/sbin/../conf/zoo.cfg
    Mode: follower
    -----------------

     

    ############################################---------- hadoop ha 安装 -------------###############################

    [root@vbserver hadoop]# pwd
    /opt/bigdata/hadoop/hadoop260/etc/hadoop

    #----------------hadoop evironment-----------------#
    [root@vbserver hadoop]# vi hadoop-env.sh
    export JAVA_HOME=/opt/bigdata/java/jdk180
    export HADOOP_PID_DIR=/opt/bigdata/hadoop/hadoop260/data/pids

    #----------------hadoop core-site.xml-----------------#
    [root@vbserver hadoop]# vi core-site.xml
    <configuration>
    <!--设定集群访问路径:kbcluster-->
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://kbcluster</value>
    </property>
    <!--设定临时目录-->
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/bigdata/hadoop/hadoop260/data/tmp</value>
    </property>
    <!--设定zookeeper集群目录-->
    <property>
    <name>ha.zookeeper.quorum</name>
    <value>vbserver:2181,vmslave1:2181,vmslave2:2181,vmslave3:2181</value>
    </property>
    </configuration>

    #----------------hadoop hdfs-site.xml-----------------#
    <configuration>
    <!--设定文件块备份数-->
    <property>
    <name>dfs.replication</name>
    <value>2</value>
    </property>
    <!--设定集群服务名称:kbcluster-->
    <property>
    <name>dfs.nameservices</name>
    <value>kbcluster</value>
    </property>
    <!--设定集群kbcluster的namenode自定义名称列表-->
    <property>
    <name>dfs.ha.namenodes.kbcluster</name>
    <value>nn1,nn2</value>
    </property>
    <!--分别设定所有namenode名称列表的rpc访问地址-->
    <property>
    <name>dfs.namenode.rpc-address.kbcluster.nn1</name>
    <value>vbserver:9000</value>
    </property>
    <property>
    <name>dfs.namenode.rpc-address.kbcluster.nn2</name>
    <value>vmslave1:9000</value>
    </property>
    <!--分别设定所有namenode名称列表的http访问地址-->
    <property>
    <name>dfs.namenode.http-address.kbcluster.nn1</name>
    <value>vbserver:50070</value>
    </property>
    <property>
    <name>dfs.namenode.http-address.kbcluster.nn2</name>
    <value>vmslave1:50070</value>
    </property>
    <!--设定所有节点的共享编辑日志journal地址列表-->
    <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://vbserver:8485;vmslave1:8485;vmslave2:8485;vmslave3:8485/kbcluster</value>
    </property>
    <!--设定隔离方法名称:即同一时刻只能有一台服务器对外响应-->
    <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
    </property>
    <!--使用隔离机制是需要私钥进行无秘访问-->
    <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
    </property>
    <!--设定journal节点存储目录-->
    <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/opt/bigdata/hadoop/hadoop260/data/journalnode</value>
    </property>
    <!--关闭权限检查-->
    <property>
    <name>dfs.permissions.enabled</name>
    <value>false</value>
    </property>
    <!--启动client访问失败动态代理-->
    <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
    </property>
    <!--设置client访问失败自动切换代理-->
    <property>
    <name>dfs.client.failover.proxy.provider.kbcluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    </configuration>

    #----------------hadoop yarn-site.xml-----------------#
    <configuration>
    <!--设置nodemanager附属服务-->
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    <!--启用resourcemanager的高可用(ha)集群-->
    <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
    </property>
    <!--启用resourcemanager的集群标识-->
    <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>kbcluster-yarn</value>
    </property>
    <!--启用resourcemanager(ha)集群的resoucemanager名称列表-->
    <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
    </property>
    <!--分别设置resourcemanager(ha)集群的resoucemanager名称的hostname-->
    <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>vbserver</value>
    </property>
    <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>vmslave1</value>
    </property>
    <!--设置resourcemanager(ha)集群的zookeepr集群地址列表-->
    <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>vbserver:2181,vmslave1:2181,vmslave2:2181,vmslave3:2181</value>
    </property>
    <!--启用resourcemanager(ha)集群可恢复功能-->
    <property>
    <name>yarn.resourcemanager.recovery.enabled</name>
    <value>true</value>
    </property>
    <!--指定resourcemanager(ha)集群的状态信息存储在zookeepr集群-->
    <property>
    <name>yarn.resourcemanager.store.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
    </configuration>

    #——-----------------------#
    在etc/hadoop下的 slaves里,配置【全部】的机器

    #——---------二次格式化需要注意--------------#
    1. 把全部机器的data/下文件夹变成新的 journalnode 和 pids

    2. 全部机器分别启动journalnode

    #----------------初始化hadoop ha集群-----------------#
    #---------- 分别启动 所有节点上的journal服务 ------------#
    [root@vbserver sbin]# hadoop-daemon.sh start journalnode
    [root@vmslave1 sbin]# hadoop-daemon.sh start journalnode
    [root@vmslave2 sbin]# hadoop-daemon.sh start journalnode
    [root@vmslave3 sbin]# hadoop-daemon.sh start journalnode
    #---------- nn1上格式化 ------------#
    [root@vbserver sbin]# hdfs namenode -format
    [root@vbserver sbin]# hadoop-daemon.sh start namenode
    #---------- nn2上同步nn1上的元数据信息 ------------#
    [root@vmslave1 sbin]# hdfs namenode -bootstrapStandby
    [root@vmslave1 sbin]# hadoop-daemon.sh start namenode #启动后通过网页测试


    #----------------启动hadoop ha集群 (建议写脚本一键启动hadoop ha集群)-----------------#
    #---------- 分别启动 所有节点上的zookeepr服务 ------------#
    [root@vbserver sbin]# zkServer.sh start
    [root@vmslave1 sbin]# zkServer.sh start
    [root@vmslave2 sbin]# zkServer.sh start
    [root@vmslave3 sbin]# zkServer.sh start
    #---------- nn1上启动hadoop ha集群 ------------#
    [root@vbserver sbin]# start-all.sh
    #---------- 单独启动nn2上的resourcemanager ------------#
    [root@vmslave1 sbin]# yarn-daemon.sh start resourcemanager

    #----------------关闭hadoop ha集群 (建议写脚本一键启动hadoop ha集群)-----------------#
    [root@vbserver sbin]# zkServer.sh stop
    [root@vmslave1 sbin]# zkServer.sh stop
    [root@vmslave2 sbin]# zkServer.sh stop
    [root@vmslave3 sbin]# zkServer.sh stop
    #---------- nn1上启动hadoop ha集群 ------------#
    [root@vbserver sbin]# stop-all.sh
    #---------- 单独启动nn2上的resourcemanager ------------#
    [root@vmslave1 sbin]# yarn-daemon.sh stop resourcemanager

    # 将 /data/tmp/dfs/name 和 data的权限设定为777

    ####
    高可用集群,zookeeper 启动成功,zkfc 显示启动成功。namenode节点DFSZKFailoverController进程未启动,并且web页面两个namenode都为standby状态。
    原因:可能是之前对zoo.cfg文件作了修改导致的问题。
    解决办法:重新格式化zkfc就可以 :hdfs zkfc -formatZK

    #-------------- 服务列表列表检查 -------------#
    [root@vbserver sbin]# jps
    22065 NameNode
    22545 DFSZKFailoverController
    22753 NodeManager
    22371 JournalNode
    22172 DataNode
    21917 QuorumPeerMain
    22639 ResourceManager

    [root@vmslave1 sbin]# jps
    12848 NodeManager
    12577 DataNode
    12756 DFSZKFailoverController
    13028 ResourceManager
    12453 QuorumPeerMain
    12666 JournalNode
    12507 NameNode

    [root@vmslave2 sbin]# jps
    7152 NodeManager
    7059 JournalNode
    6970 DataNode
    6908 QuorumPeerMain

    [root@vmslave3 sbin]# jps
    6976 JournalNode
    6833 QuorumPeerMain
    6887 DataNode
    7070 NodeManager

    #--------------- 查看 nn1 nn2 状态 --------------------#
    # 通过网页检查 kbcluster nn1和nn2两个namenode resourcemanager的状态

  • 相关阅读:
    Java集合类总结 (三)
    Java集合类总结 (二)
    Java集合类总结 (一)
    发布方配ASP.NET网站服务器
    Ubuntu重启搜狗输入法
    常用期刊检索
    latex 写大论文图目录中图注过长解决方案
    understanding backpropagation
    Ubuntu安装Adobe Reader
    【转】pdf文件自动切白边
  • 原文地址:https://www.cnblogs.com/sabertobih/p/13550751.html
Copyright © 2020-2023  润新知