分布式系统学习技术点三:zookeeper篇一(入门)

本文详细介绍了Zookeeper的概念、应用场景及环境搭建方法。同时涵盖了Zookeeper的基本概念如集群角色、会话、节点等,并提供了客户端使用的具体步骤,最后还讲解了Zookeeper的权限控制机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

zookeeper是什么

    一种分布式应用协调服务,解决分布式数据的一致性,将那些复杂的、容易出错的分布式一致性封装起来,构成一个可靠的原语集,并提供一系列简单易用的接口给用户使用。

zookeeper的典型应用场景

1、数据发布与订阅服务

应用配置集中到节点上,应用启动时主动获取,并在节点上注册一个watcher,每次配置更新都会通知到应用。

2、负载均衡

多个应用服务与zk保持连接,在zk上都会注册一个节点,如果某一个应用服务出现了问题,则这个节点会在zk中删除,那么zk就能保证服务器列表一直是最新的可用列表

3、命名服务

提供一个全局唯一的名称。例如数据库的主键唯一性,在分布式的情况下,zk则可以提供一个全局唯一自增的的主键id。

4、分布式通知/协调

不同的系统都监听同一个节点,一旦有了更新,另一个系统能够收到通知。

二、zookeeper中的基本概念

1、集群角色:

集群角色有3种:Leader、Follower、Observer。

Leader:整个zookeeper集群中的核心。

Follower:zookeeper集群中的跟随者。

Observer:服务器充当观察者角色

2、会话:

指客户端与zookeeper服务器的连接,zookeeper中的会话就叫session,客户端靠与zookeeper建立一个TCP的长连接来维持一个session,客户端在启动的时候首先会与zookeeper建立一个TCP连接,通过这个连接,客户端能通过心跳检测与服务器保持有效的会话,也能向zk发送请求并响应。

3、节点:

集群中的一台zk服务器称为一个节点、数据模型中的一个单元znode也为一个节点。zookeeper的数据模型是一棵树,树的节点就是znode,znode中可以保存信息,znode分为两种:持久型和临时型。

所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点——不会因为创建该节点的客户端会话失效而消失。

和持久节点不同的是,临时节点的生命周期和客户端会话绑定。也就是说,如果客户端会话失效,那么这个节点就会自动被清除掉。注意,这里提到的是会话失效,而非连接断开。另外,在临时节点下面不能创建子节点。

25151024_qY6o.png

4、版本:

当数据节点数据发生了更新则版本号会加一,版本存在的目的是为了解决分布式中的事务,通过版本提供悲观锁和乐观锁。

版本类型说明
version    当前数据节点内容的版本号
cversion当前数据节点子节点的版本号
aversion当前数据节点ACL变更的版本号

5、事件监听器(watcher):

zk允许用户在指定节点上注册一些watcher,当数据节点发生变化时,zk服务器会把这个变化的通知发送给该watcher。

6、ACL权限控制:

access control lists的简写,zookeeper采用ACL策略来进行权限控制。控制数据节点增删改查的权限。

三、zookeeper环境搭建

这里模拟在一台物理机(linux虚拟机)上搭建3个zookeeper集群。

1、下载zookeeper:http://www.apache.org/dyn/closer.cgi/zookeeper/

2、解压到你的物理机上,这里我解压到了/opt目录下,同时拷贝出3个zookeeper,便于搭建3个集权

224729_LjST_3161152.png

3、创建配置文件:在conf目录下根据给的zoo_sample.cfg拷贝出一个zoo.cfg文件,然后编辑

配置数据存放的位置:dataDir=/var/zk,其他两个分别配置为/var/zk2,/var/zk3

配置端口:2181,其他两个分别配置为2182,2183

配置集群的ip和端口(3个都配置一样):

server.1=192.168.1.105:2888:3888
server.2=192.168.1.105:2889:3889
server.3=192.168.1.105:2890:3890

225225_6ZiM_3161152.png

4、在dataDir的路径下各新建一个myid文件,内容分别记录1、2、3。代表了集群中的server.1,server.2,server.3。

5、启动zk。(启动文件在bin目录下)(分别启动其他两个zk)

./zkServer.sh start

225904_qmqk_3161152.png

6、确认是否3个都已经启动了

使用jps命令确定是否有3个进程。

230438_8mC3_3161152.png

使用telnet命令连接其中一个zk服务器,使用stat命令查看状态

122401_orzl_3161152.png

四、zookeeper客户端使用

1、连接客户端:

./zkCli.sh -timeout 5000  -server 192.168.1.104:2181

2、创建节点:

create [-s] [-e] path data acl:-s代表顺序节点,-e代表临时节点(只在当前连接的会话有效)

create /node_1 data1

3、查看节点状态与值:

get path [watch]

get /node_1

180355_iDPV_3161152.png

相关说明:

cZxid:创建是分配的唯一事务id。

ctime:创建时间

mZxd:更新时分配的唯一事务id

mtime:修改时间

pzxid:当前节点的子节点最后一次修改的事务id(子节点的修改包括增加了一个子节点或者删除了一个子节点)

。。。

4、修改节点

set path data [version]

set /node_1 data2

修改之后数据节点的版本号dataVersion就会增加1。

5、删除节点

delete path [version]:只能删除没有子节点的节点

rmr path:可以删除某个节点下的所有节点。当某个节点存在子节点的时候,会把子节点也会删除掉。

6、设置与查看节点的子节点个数和数据的长度:

setquota -n|-b val path:-n代表子节点个数;-b代表节点数据长度。

listquota path:查看

delquota [-n|-b] path:删除

五、zookeeper的权限控制

权限由3部分组成:
     * 1、权限模式(scheme):ip、digest
     * 2、授权对象:
     *      ip权限模式:具体授权的ip
     *      digest权限模式:具体授权的用户Base64(SHA-1(username:password))
     * 3、权限(permission):create(C)、delete(D)、Read(R)、write(W)、admin(A)

 

转载于:https://my.oschina.net/silence88/blog/881490

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值