Zookeeper

Zookeeper

什么是Zookeeper

是一个分布式协调服务,就是为用户的分布式程序提供协调服务。
本身也是一个分布式程序(只要节点半数以上存活,zookeeper就可以对外提供服务)
是为别的分布式程序服务的
在这里插入图片描述

作用

核心功能:
1、管理用户程序提交的数据(数据一般多为状态信息)
2、为用户程序提供数据节点的监听服务

应用场景:
1、主从协调
2、服务器的动态上下线
3、统一的配置管理
4、统一的名称服务

网站系统动态上下线
网站系统动态上下线
爬虫系统动态上下线
爬虫系统动态上下线

分布式共享锁:
在这里插入图片描述

特点

1、zookeeper集群包含两个角色:Leader 、follower
2、全局数据的一致性:每一个server都保存了一份相同的数据副本。client无论连接哪个server数据都是一致的
3、分布式读写,更新请求转发,写请求只能与leader来实现。follower会将请求发给 leader来写(随便一台机器都可以读),更新数据请求要顺序执行(按照请求按照发送的前后顺序执行)。
3、数据更新的原子性:一次数据要么更新成功,要么更新失败(leader和follwer一致)
4、实时性:在一定时间范围内,client能读到最新的数据(follwer发送需要些的内容发给leader,然后leader写入需要一定时间)
5、数据全局一致性
6、只是存储数据的状态

安装

zookeeper的架构
在这里插入图片描述

1、解压并配置环境变量
tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/apps
cd /opt/apps

drwxr-xr-x. 10 tom  tom  4096 323 2017 zookeeper-3.4.10

chown root:root -R zookeeper-3.4.10

vi /etc/profile
source /etc/profile

配置zk的参数

cd zookeeper-3.4.10/conf
cp zoo_sample.cfg zoo.cfg

vi zoo.cfg

# The number of milliseconds of each tick
tickTime=2000     # 每个心跳的间隔时间2# The number of ticks that the initial
# synchronization phase can take
initLimit=10  # 初始化zk的等待时间 10次心跳
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5  #超时时间
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/opt/apps/zookeeper-3.4.10/data
# the port at which the clients will connect
clientPort=2181   # 对客户端暴露的端口号

# 增加以下内容,配置服务器节点
#autopurge.purgeInterval=1
server.1=qianfeng001:2888:3888
server.2=qianfeng002:2888:3888
server.3=qianfeng003:2888:3888


:wq 保存

cd ..
创建dataDir
mkdir data

echo "1" >> data/myid


分发安装包
cd ..

scp -r zookeeper-3.4.10 root@qianfeng002:$PWD
scp -r zookeeper-3.4.10 root@qianfeng003:$PWD


修改其他节点上的myid文件内容
qianfeng002:
echo "2" >/opt/apps/zookeeper-3.4.10/data/myid

qianfeng003:
echo "3" >/opt/apps/zookeeper-3.4.10/data/myid

启动zk
bin/zkServer.sh start

bin/zkServer.sh status

选举机制

1、全新集群,第一次启动zookeeper的选举过程(Id大的为老大)

先启动第一台机器,选举,第一台机器发送选票,满足不了半数存活的要求,LOOKING状态

继续启动第二个机器,选举,第一轮选举,平手,都知道对方的存在。第二轮选举,都选Id号大的,则选出2为Leader

。。。。

2、非全新集群启动过程,选举机制:

1、由 数据的version,节点的Id、逻辑时钟来决定谁是老大

数据的version,数据新的version就大

逻辑:

1、逻辑时钟小的选举结果被忽略,会重新投票

​ leader挂了,选举的过程中,leader又起来了

2、统一逻辑时钟,数据版本大的为大

3、数据版本相同,Id大的为leader

操作

shell

bin/zkCli.sh (进入zookeeper)

help
ZooKeeper -server host:port cmd args
        stat path [watch]
        set path data [version]   修改数据
        ls path [watch]   加上watch监听数据
        delquota [-n|-b] path
        ls2 path [watch]
        setAcl path acl
        setquota -n|-b val path
        history
        redo cmdno
        printwatches on|off
        delete path [version]
        sync path
        listquota path
        rmr path
        get path [watch]     获取某个目录的数据
        create [-s] [-e] path data acl
        addauth scheme auth
        quit
        getAcl path
        close
        connect host:port

zookeeper下的目录称为znode
znode的数据大小限制最大为1M
zookeeper一般来说都是用来记录数据的状态信息
在这里插入图片描述

节点类型

在这里插入图片描述

1、创建短暂的节点(只在创建的客户端存在的情况下存在,如果创建的客户端断开与服务端的连接,节点会自动删除)
create -e sz2222222 86465485
2、创建带序列的节点(默认的所有的节点在创建的时候都有一个序号,都是序列的。只不过-s表示序号显示在节点名称上。每一个目录下的序号都是重新从0开始,创建节点时加不加-s参数,节点都占用一个序号)
create -s sz2222222 86465485

监听器:
ls path [watch] 加上watch监听数据
get path [watch]

每个监听器只执行一次

高可用(HA)hadoop2.xx之后出现 7*24小时不间断服务

为什么要用高可用

在这里插入图片描述

高可用机制的两个改变:

在这里插入图片描述

1、元数据的存储方式发生了变化,从namenode改变到Qjournal服务器
2、状态的改变 用ZKFC来控制

预防脑裂的方式:1、ssh kill-9 namenode  2、自定义脚本

yarn的高可用 补图

在这里插入图片描述

搭建高可用(HA)

组成:
HDFS:
namenode 2个
datanode n个
zookeeper 3个(奇数个)
Qjournal 3个
ZKFC 2个

YARN:
resourceManager n个
nodemanager n个

规划:
zookeeper一般是单独的集群 Qjournal 3个
active 的namenode 单独一台
active的resourcemanager单独一台
standby:随便
datanode/nodemanager n台
在这里插入图片描述

配置HA

配置ssh免密,从备用namenode到其他节点(因为备用namenode随时可能成为老大)

配置hdfs的高可用

1、vi hdfs-site.xml
在这里插入图片描述


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、vi core-site.xml
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
3、分发
在这里插入图片描述

重新升级或重新格式化

升级步骤:
1、启动journal node
在这里插入图片描述
2、启动以前节点上的namenode
在这里插入图片描述
3、在新的namenode节点上执行同步镜像文件(在其他机器上)
在这里插入图片描述
4、同步日志文件到journal node上,在旧的namenode节点上执行
在这里插入图片描述
5、格式化ZKFC(在旧的namenode上做)
在这里插入图片描述
6、启动hdfs
start-dfs,sh

重新格式化步骤:

1、删除所有节点上的hadoop data 目录
2、启动ZK(所有节点)
3、启动journalnode(所有节点)
4、格式化namenode(只需要namenode上做)
5、同步fsimage
6、关闭namenode
7、格式化ZKFC
8、启动
在这里插入图片描述
在这里插入图片描述

配置yarn的高可用

yarn-site.xml配置

<?xml version="1.0"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->
<configuration>

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

<!--是否启动yarn的rm的HA功能-->
<property>
  <name>yarn.resourcemanager.ha.enabled</name>
  <value>true</value>
</property>

<!--是否开启失败自动转移-->
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
<value>false</value>
</property>

<!--yarn的rm的HA的服务ID-->
<property>
  <name>yarn.resourcemanager.cluster-id</name>
  <value>qianfengyarn</value>
</property>
<!--yarn的rm的HA的服务ids的逻辑rmid的列表-->
<property>
  <name>yarn.resourcemanager.ha.rm-ids</name>
  <value>rm1,rm2</value>
</property>
<!--为逻辑rm1配置所启动的主机-->
<property>
  <name>yarn.resourcemanager.hostname.rm1</name>
  <value>hadoop01</value>
</property>
<!--为逻辑rm2配置所启动的主机-->
<property>
  <name>yarn.resourcemanager.hostname.rm2</name>
  <value>hadoop02</value>
</property>
<!--为逻辑rm1配置web ui监控端口-->
<property>
  <name>yarn.resourcemanager.webapp.address.rm1</name>
  <value>hadoop01:8088</value>
</property>
<!--为逻辑rm2配置web ui监控端口-->
<property>
  <name>yarn.resourcemanager.webapp.address.rm2</name>
  <value>hadoop02:8088</value>
</property>
<!--配置zk集群所在主机-->
<property>
  <name>yarn.resourcemanager.zk-address</name>
  <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>

</configuration>

HA的管理员命令

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值