Zookeeper系列一:Zookeeper介绍、Zookeeper安装配置、ZK Shell的使用

 

一、Zookeeper介绍

1. 介绍Zookeeper之前先来介绍一下分布式

1.1 分布式主要是下面两个方面:

1) 任务拆分

  任务拆分指的是把传统的单节点服务拆分成多个节点服务部署到不同的机器上对外提供服务。比如一个传统服务有订单+支付+物流等3个模块,拆分成订单系统、支付系统、物流系统3个服务。
2) 节点分工

  如上面的服务拆分后,订单系统、支付系统、物流系统各司其职
说明:

分布式解决高可用,高并发的。

集群解决的是高可用。

集群从物理上来定义,分布式一种工作方式。
例如:一个工作任务需要10个小时(单节点)
分布式:10台机器,任务只需要1个小时就能够完成
集群:10台机器,任务还是10个小时。

1.2 分布式协作中的难点:

如果让你设计一个分布式系统,你预见到什么问题?
1) 保证节点高可用(节点故障)
2) 数据的一致性
3) 通讯异常
4) 网络分区
.......

2.  Zookeeper简介

Zookeeper就是用来解决分布式协作中的难点的

zookeeper是google的chubby项目开源实现。最早是hadoop的子项目

Zookeeper的使用场景:

小米米聊、淘宝Taokeeper其实是类zookeeper。

Kafka使用zookeeper。消息发布订阅,其中zk就是用于检测节点崩溃。实现主题的发现,并且保持主题的生产和消费状态。

Hbase三段查找,Root-Region=》Meta Region=》Region(Table)。hbase的元数据信息放在HBase。HMaster挂掉,马上要节点恢复。
Hadoop。NameNode(SecondaryNameNode),HA Hadoop。一般情况下一个简单的hadoop集群,只有一个NameNode,如果NameNode挂掉,hadoop集群不可用。HA Haoop里面就要用到zk。

3. Zookeeper解决哪些问题

3.1 Master节点管理

  解决的问题:Master高可用(挂掉以后,谁来负责工作),保证唯一。

3.2 配置文件管理

  解决的问题:统一把配置文件存放zk,由ZK统一分发修改的内容到各台机器。

3.3 发布与订阅

  发布者(producer)将数据发布到zk节点上,供订阅者(consumer)动态获取

3.4 分布式锁

  分布式环境访问同一个资源,由第三方配锁实现。
  解决的问题:由zk统一进行协调,保证数据的一致性。

3.5 集群的管理

  Worker集群监控。保证主数据和备份数据的一致

二、Zookeeper安装配置

环境准备:

一台安装有jdk的虚拟机:192.168.152.130

1. 安装

1.1.下载

cd /software
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

1.2.解压

tar -zxvf zookeeper-3.4.6.tar.gz

2. 配置

说明:这里配置的是伪分布式的zookeeper

注意:配置之前一定要在/etc/hosts里面配置主机映射,否则会报错误:

ERROR [master:3890:QuorumCnxManager$Listener@517] - Exception while listening
java.net.SocketException: Unresolved address

vim /etc/hosts

2.1 先建立zookeeper的三个数据目录

mkdir -p /zookeeper/zk1
mkdir -p /zookeeper/zk2
mkdir -p /zookeeper/zk3

2.2 查看zookeeper的配置文件(已删掉多余的配置和注释)

vim zoo_sample.cfg
tickTime=2000   #session的会话时间 以ms为单位
initLimit=10 #服务器启动以后,master和slave通讯的时间
syncLimit=5 #master和slave之间的心跳检测时间,检测slave是否存活
dataDir=/tmp/zookeeper #保存zk的快照和数据
clientPort=2181 #客户端访问zk的端口

2.3 复制zoo_sample.cfg为zoo1.cfg添加如下配置

cp zoo_sample.cfg zoo1.cfg
vim zoo1.cfg

配置:

#session的会话时间 以ms为单位
tickTime=2000 #服务器启动以后,master和slave通讯的时间
initLimit=10 #master和slave之间的心跳检测时间,检测slave是否存活
syncLimit=5 #(这个目录可以自行指定)
dataDir=/zookeeper/zk1 #客户端访问zk的端口
clientPort=2181
#master对应于前面在hosts里面配置的主机映射 2888是数据同步和消息传递端口,3888是选举端口
server.1=master:2888:3888 #
master对应于前面在hosts里面配置的主机映射 2889是数据同步和消息传递端口,3889是选举端口
server.2=master:2889:3889

#
master对应于前面在hosts里面配置的主机映射 2890是数据同步和消息传递端口,3890是选举端口
server.3=master:2890:3890
 

2.4 复制zoo1.cfg为zoo2.cfg添加如下配置

cp zoo1.cfg zoo2.cfg
vim zoo2.cfg
#session的会话时间 以ms为单位
tickTime=2000 #服务器启动以后,master和slave通讯的时间
initLimit=10 #master和slave之间的心跳检测时间,检测slave是否存活
syncLimit=5 #(这个目录可以自行指定)
dataDir=/zookeeper/zk2 #客户端访问zk的端口
clientPort=2182 #master对应于前面在hosts里面配置的主机映射 2888是数据同步和消息传递端口,3888是选举端口
server.1=master:2888:3888 #
master对应于前面在hosts里面配置的主机映射 2889是数据同步和消息传递端口,3889是选举端口
server.2=master:2889:3889

#
master对应于前面在hosts里面配置的主机映射 2890是数据同步和消息传递端口,3890是选举端口
server.3=master:2890:3890

2.5 复制zoo1.cfg为zoo3.cfg添加如下配置

cp zoo1.cfg zoo3.cfg
vim zoo3.cfg
#session的会话时间 以ms为单位
tickTime=2000 #服务器启动以后,master和slave通讯的时间
initLimit=10 #master和slave之间的心跳检测时间,检测slave是否存活
syncLimit=5 #(这个目录可以自行指定)
dataDir=/zookeeper/zk3 #客户端访问zk的端口
clientPort=2183
#master对应于前面在hosts里面配置的主机映射 2888是数据同步和消息传递端口,3888是选举端口
server.1=master:2888:3888 #
master对应于前面在hosts里面配置的主机映射 2889是数据同步和消息传递端口,3889是选举端口
server.2=master:2889:3889

#
master对应于前面在hosts里面配置的主机映射 2890是数据同步和消息传递端口,3890是选举端口
server.3=master:2890:3890

2.6 手动建立myid文件且指定在zk数据目录,也就是dataDir指定的路径(不管真分布还是伪分布都需要指定)

echo 1 >> /zookeeper/zk1/myid
echo 2 >> /zookeeper/zk2/myid
echo 3 >> /zookeeper/zk3/myid

 说明:

myid文件内容分别为1,2,3对应于zk配置文件的server.1,server.2,server.3

2.7 测试zookeeper分布式是否搭建成功

分别启动三个zookeeper

cd /software/zookeeper-3.4.6/bin/
./zkServer.sh start /software/zookeeper-3.4.6/conf/zoo1.cfg
./zkServer.sh start /software/zookeeper-3.4.6/conf/zoo2.cfg
./zkServer.sh start /software/zookeeper-3.4.6/conf/zoo3.cfg

查看3个zookeeper的状态

cd /software/zookeeper-3.4.6/bin/
/zkServer.sh status /software/zookeeper-3.4.6/conf/zoo1.cfg
/zkServer.sh status /software/zookeeper-3.4.6/conf/zoo2.cfg
/zkServer.sh status /software/zookeeper-3.4.6/conf/zoo3.cfg

可以看到第2个zookeeper是leader,第1个和第3个为follower,到此zookeeper分布式搭建完成!!!

2.8 Zookeeper常用命令

启动:
./zkServer.sh start /software/zookeeper-3.4.6/conf/zoo1.cfg
./zkServer.sh start /software/zookeeper-3.4.6/conf/zoo2.cfg
./zkServer.sh start /software/zookeeper-3.4.6/conf/zoo3.cfg 停止:
./zkServer.sh stop /software/zookeeper-3.4.6/conf/zoo1.cfg
./zkServer.sh stop /software/zookeeper-3.4.6/conf/zoo2.cfg
./zkServer.sh stop /software/zookeeper-3.4.6/conf/zoo3.cfg 查看状态:
/zkServer.sh status /software/zookeeper-3.4.6/conf/zoo1.cfg
/zkServer.sh status /software/zookeeper-3.4.6/conf/zoo2.cfg
/zkServer.sh status /software/zookeeper-3.4.6/conf/zoo3.cfg

2.9 Zookeeper真分布式部署在master、slave1、slave2 三台不同的服务器上

server1..../conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeper/zk
clientPort=2181 server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

server2..../conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeper/zk
clientPort=2181 server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

server3..../conf/zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/zookeeper/zk
clientPort=2181 server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

注意:

真分布必须是奇数台,因为必须满足n/2+1=m,m必须大于部署zk机器数的一半(n/2)可用才认为集群可用,而且奇数台更节省资源
2/2+1=2 一台不能坏
3/2+1=2 可以坏掉一台

4/2+1=3 只能坏一台
5/2+1=3 可以坏2台

三、ZK Shell的使用

1. 连接zk

zkCli.sh [-server ip:port]

示例:

连接到master(127.0.0.1 master)这台机器上2181的zookeeper

./zkCli.sh -server master:2181

2. 列出zk中的节点

ls、ls2

 示例:

3. 创建节点

create [-s] [-e] path data acl

说明:

zk的节点分为两种:临时节点(随着zk session消亡而自动删除)、持久节点(一直存在)

-s: 顺序节点

-e: 临时节点

acl:访问权限控制

示例:

3.1 创建一个zk-test的节点,数据是123 不带-s 、-e默认是持久节点

create /zk-test "123"

3.2 创建顺序节点

create  -s   /zk-test  “test123”

多次执行创建顺序节点的命令,可以看到zookeeper的内部会对顺序节点的名称进行自增控制

3.3 创建临时节点

create -e /zk-test123 "test1234"

说明:

临时节点依赖于顺序节点,临时节点下不能再创建临时节点,顺序节点下才可以创建临时节点

3.4 创建子节点test

create  /zk-test ""
create /zk-test/test "1"
ls /zk-test/test

4. 删除节点命令

delete 

示例:

删除节点zk-test,如果zk-test下面还有子节点得先删除子节点,才能删除zk-test

delete /zk-test/test
delete /zk-test

递归删除一个znode

rmr path 

示例:

删除zk-test及其下面的子节点

rmr  /zk-test

5. 获取节点信息

get

 示例:

create /zk-123  “abc”
get /zk-123

结果说明:

结果
cZxid = #创建节点时zk内部自己分配的id
Ctime = #创建节点的时间
mZxid = #修改的id
mtime = 修改的时间
pZxid = 子节点最后一次被修改的id
cVersion = 0 #拥有的子节点被改的话,该值随着改变
dataVersion = 0 #数据版本
aclVersion = 0 # 访问控制权限的版本
ephemeralOwner = 0X0 #临时节点还是持久节点 临时节点值不为0(值为当前会话id),持久节点值永远为0
dataLength = 3 #数据长度
numChildren = 0 #子节点个数

6. 更新节点数据

set  /zk-123 “d”

7. 连接到指定节点

connect host:port

 示例:

连接到2181
connect master:2181 连接到2182
connect master:2182 连接到2183
connect master:2183

说明:

这个命令是在已经连接到zookeeper之后,在里面切换到其他zookeeper时使用 

8. 设置配额

配额:给某个目录指定多少存储空间或者允许创建多少个节点

setquota -n|-b val path

参数说明:

n 指定可以设置多少个子节点

b 指定可以设置多大空间(byte)

示例:

setquota -n 5 /zk-123
create /zk-123/1 1
create /zk-123/2 2
create /zk-123/3 3
create /zk-123/4 4
create /zk-123/5 5
create /zk-123/6 6

说明:

对于配额不是硬性的提示,超过配额还是可以继续创建,只不过在日志里面有提示

配额的用途:

限制子节点的创建个数和分配空间的大小,如指定某个session有多少空间可以用

9. 查看配额

listquota path

10. 查看节点的状态

stat path

示例:

查看节点zk-123的状态

stat  /zk-123

 
posted @ 2018-09-03 00:31  小不点啊  阅读(21728)  评论(1)  编辑  收藏  举报
 
评论列表

 
 

#1楼 2019-08-09 10:26 jupiter_gao

很详细, 很好
 
昵称: 小不点啊
园龄: 5年5个月
粉丝: 394
关注: 4

< 2023年2月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 1 2 3 4
5 6 7 8 9 10 11

搜索

 
 

最新评论

 
 
Copyright 2023 小不点啊
Powered by .NET 7.0 on Kubernetes

zk-复制安装的更多相关文章

  1. zk ui安装 (选装,页面查看zk的数据)

    # 使用WEB UI查看监控集群-zk ui安装 cd /usr/local git clone https://github.com/DeemOpen/zkui.git yum install -y ...

  2. mysql组复制安装

    参考文档 https://blog.csdn.net/li123128/article/details/80744568 https://www.cnblogs.com/ctulzq/p/863109 ...

  3. postgresSQL主从流复制安装

    命令行运维: https://blog.csdn.net/zhangzeyuaaa/article/details/77941039 安装流程: 先准备类库: yum -y install readl ...

  4. ZK框架笔记2、ZK框架安装、相关类库、web及zk配置

    1.先去ZK官网注册一个账号 2.在MyEclipse菜单栏中Help----Eclipse Marketplace中搜索ZK Studio,点击install安装即可         3.相关类库 ...

  5. Centos7.3-mysql5.7复制安装过程

    一.环境 192.168.56.102 为主服务器 192.168.56.101 为从服务器 Mysql5.7.20 二进制安装包环境 1. 下载免编译安装包并进行安装 从官网下载 mysql-5.7 ...

  6. mysql多源复制安装

    多源复制的意思是多主一从. 多源复制的前提是必须要开启GTID模式. master1 :192.168.1.110 master2 :192.168.1.111 slave :192.168.1.15 ...

  7. mysql 和 hive 和分布式zookeeper和HBASE分布式安装教程

    一,mysql 安装mysql5.7完整教程1. yum -y install mysql-server直接执行语句后等待就好已安装: mysql-community-server.x86_64 0: ...

  8. ClickHouse之集群搭建以及数据复制

    前面的文章简单的介绍了ClickHouse,以及也进行了简单的性能测试.本次说说集群的搭建以及数据复制,如果复制数据需要zookeeper配合. 环境: 1. 3台机器,我这里是3台虚拟机.都安装了c ...

  9. 云服务器 - 安装zookeeper单机环境

    由于电脑中病毒,被人当做肉鸡挖矿了...所以很多东西都要重装, 之前没有写过zk如何安装,所以安装的时候顺便来记录一下分享出来 第一步上传zk安装包到服务器,如图: 解压: tar -zxvf zoo ...

  10. zookeeper集群安装及使用详解

    1. Zookeeper简介 ZooKeeper是一个开源的分布式框架,提供了协调分布式应用的基本服务.它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronizatio ...

随机推荐

  1. 两个集合之间数据过滤linq

    //以下为前台多字段循环匹配if (!input.Filter.IsNullOrEmpty()) { var keysList = input.Filter.Split(" ".T ...

  2. 如何用revit+bimfilm快速完成径向动画制作

    推荐:将 NSDT场景编辑器 加入你的3D开发工具链. 在实际的施工中,我们会遇到诸如一些管道保温层包覆的施工内容,所以在制作它们的施工动画时,我们需要用径向剖切保温层来表达管道保温层包覆过程的施工状 ...

  3. Cesium渲染模块之VAO

    1. 引言 Cesium是一款三维地球和地图可视化开源JavaScript库,使用WebGL来进行硬件加速图形,使用时不需要任何插件支持,基于Apache2.0许可的开源程序,可以免费用于商业和非商业 ...

  4. OpenLayers多源数据加载

    一.实验内容 栅格瓦片数据加载: 矢量数据加载: 矢量瓦片数据加载. 二.实验步骤 2.1 加载已经封装的在线瓦片地图 <!DOCTYPE html> <html lang=&quo ...

  5. LeetCode-442 数组中重复的数据

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-all-duplicates-in-an-array 题目描述 给你一个长度为 n 的整 ...

  6. echarts 各个配置项详细说明总结

    theme = { // 全图默认背景 // backgroundColor: 'rgba(0,0,0,0)', // 默认色板 color: ['#ff7f50','#87cefa','#da70d ...

  7. 两行CSS让页面提升了近7倍渲染性能

    参考:https://juejin.cn/post/7168629736838463525 content-visibility.contain-intrinsic-size属性

  8. java.sql.SQLException: Access denied for user ‘root‘@‘localhost‘ (using password: YES)问题

    此报错大多数存在的问题为mysql密码错误,需要去JDBC文件中寻找url查看是否密码错误.

  9. redis运维与管理

    redis内存存储,速度极快 丰富的附件功能 1.持久化功能:降存储在内存的数据保存到硬盘 2.发布与订阅:将消息同时分发给多个客户端 3.过期键功能:为键设置一个过期时间,让它在指定的时间之后自动被 ...

  10. vue 使用import之后就会报Object(...) is not a function的错

    最近在学习vue,学到了路由,vue-router, 写demo的时候,想引入import VueRotuer from "vue-router",但是添加这句引用浏览器就会报错, ...