zookeeper java 集群_Zookeeper集群环境搭建,手写脚本启动整个集群

什么是Zookeeper

Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。

Zookeeper简介

1、Zookeeper是为别的分布式程序服务的

2、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务)

3、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统> 一名称服务等

4、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能:

4.1:管理(存储,读取)用户程序提交的数据(类似namenode中存放的metadata)

4.2:为用户程序提供数据节点监听服务

Zookeeper应用场景图

60b076165172bfbc650681e7eef185bb.png

ebcb8b51ffc255693b858093274101c6.png

Zookeeper集群机制

Zookeeper集群的角色: Leader 和 follower

只要集群中有半数以上节点存活,集群就能提供服务

Zookeeper特性

1、Zookeeper:一个leader,多个follower组成的集群

2、全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的

3、分布式读写,更新请求转发,由leader实施

4、更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行

5、数据更新原子性,一次数据更新要么成功,要么失败

6、实时性,在一定时间范围内,client能读到最新数据

zookeeper的数据存储机制

数据存储形式

zookeeper中对用户的数据采用kv形式存储

只是zk有点特别:

key:是以路径的形式表示的,那就以为着,各key之间有父子关系,比如

/ 是顶层key

用户建的key只能在/ 下作为子节点,比如建一个key: /aa  这个key可以带value数据

也可以建一个key:   /bb

也可以建key: /aa/xx

zookeeper中,对每一个数据key,称作一个znode

综上所述,zk中的数据存储形式如下:

77652685387db29a16d501b44b86c544.png

znode类型

zookeeper中的znode有多种类型:

PERSISTENT  持久的:创建者就算跟集群断开联系,该类节点也会持久存在与zk集群中

EPHEMERAL  短暂的:创建者一旦跟集群断开联系,zk就会将这个节点删除

SEQUENTIAL  带序号的:这类节点,zk会自动拼接上一个序号,而且序号是递增的

组合类型:

PERSISTENT  :持久不带序号

EPHEMERAL  :短暂不带序号

PERSISTENT  且 SEQUENTIAL   :持久且带序号

EPHEMERAL  且 SEQUENTIAL  :短暂且带序号

zookeeper的集群部署

集群选举示意图

5099ec691825a3e0b83916e363704b59.png

解压Zokeeper安装包到apps目录下

tar -zxvf zookeeper-3.4.6.tar.gz -C apps

cd /root/apps/zookeeper-3.4.6/conf

cp zoo_sample.cfg zoo.cfg

vi zoo.cfg

修改dataDir=/root/zkdata

在后面加上集群的机器:2888是leader和follower通讯端口,3888是投票的

server.1=hdp-01:2888:3888

server.2=hdp-02:2888:3888

server.3=hdp-03:2888:3888

对3台节点,都创建目录 mkdir /root/zkdata

对3台节点,在工作目录中生成myid文件,但内容要分别为各自的id: 1,2,3

echo 1 > /root/zkdata/myid

echo 2 > /root/zkdata/myid

echo 3 > /root/zkdata/myid

从hdp20-01上scp安装目录到其他两个节点

cd apps

scp -r zookeeper-3.4.6/ hdp-02:$PWD

scp -r zookeeper-3.4.6/ hdp-03:$PWD

启动zookeeper集群

zookeeper没有提供自动批量启动脚本,需要手动一台一台地起zookeeper进程

在每一台节点上,运行命令:

cd /root/apps/zookeeper-3.4.6

bin/zkServer.sh start

启动后,用jps应该能看到一个进程:QuorumPeerMain

但是,光有进程不代表zk已经正常服务,需要用命令检查状态:

bin/zkServer.sh status

能看到角色模式:为leader或follower,即正常了。

自己写个脚本,一键启动

vi zkmanage.sh

#!/bin/bash

for host in hdp-01 hdp-02 hdp-03

do

echo "${host}:$1ing....."

ssh $host "/root/apps/zookeeper-3.4.6/bin/zkServer.sh $1"

done

停止命令:sh zjmanage.sh stop

加个可执行权限:chmod +zkmanage.sh

启动命令:./zkmanage.sh start

但是出现没有Java环境变量问题,修改配置文件

vi zkmanage.sh

修改配置如下

#!/bin/bash

for host in hdp-01 hdp-02 hdp-03

do

echo "${host}:$1ing....."

ssh $host "source /etc/profile;/root/apps/zookeeper-3.4.6/bin/zkServer.sh $1"

done

sleep 2

for host in hdp-01 hdp-02 hdp-03

do

ssh $host "source /etc/profile;/root/apps/zookeeper-3.4.6/bin/zkServer.sh status"

done

启动集群结果

hdp-01:starting.....

JMX enabled by default

Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

hdp-02:starting.....

JMX enabled by default

Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

hdp-03:starting.....

JMX enabled by default

Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

JMX enabled by default

Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg

Mode: follower

JMX enabled by default

Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg

Mode: leader

JMX enabled by default

Using config: /root/apps/zookeeper-3.4.6/bin/../conf/zoo.cfg

Mode: follower

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值