Zookeeper Quick Start

分布式理论

相关 CAP 理论

CAP 理论指出对于一个分布式计算系统来说,不可能同时满足以下三点:

  • 一致性:在分布式环境中,一致性是指数据在多个副本之间是否能够保持一致的特性,等同于所有节点访问同一份最新的数据副本。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致的状态。
  • 可用性:每次请求都能获取到正确的响应,但是不保证获取的数据为最新数据。
  • 分区容错性:分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。

BASE 理论

BASE 是 Basically Available(基本可用)、Soft-state(软状态) 和 Eventually Consistent(最终一致性) 三个短语的缩写。

  • 基本可用:在分布式系统出现故障,允许损失部分可用性(服务降级、页面降级)。
  • 软状态:允许分布式系统出现中间状态。而且中间状态不影响系统的可用性。这里的中间状态是指不同的 data replication(数据备份节点)之间的数据更新可以出现延时的最终一致性。
  • 最终一致性:data replications 经过一段时间达到一致性。

ZooKeeper安装

#利用wget命令下载压缩包,注意源代码与运行文件的区别
wget url
# 解压
tar -zxvf 名字
#加入环境变量
cd /etc/profile.d
vim zooKeeper.sh
#加入以下两句话,然后保存退出
export ZOOKEEPER_HOME=/www/server/zookeeper-3.6.2/
export PATH=$ZOOKEEPER_HOME/bin:$PATH
# 刷新
source /etc/profile
#之所以不直接改profile文件,是为了以后维护方便,有改动时直接维护特定的sh文件就行了

ZooKeeper命令使用

全部命令

zkServer

# 启动服务端
zkServer.sh start
# 如果启动错误就用这个命令看看出现了什么问题,
zkServer.sh start-foreground
# 端口被占用可以在zoo.cfg添加这句话
admin.serverPort=xxxx
# 查看状态
zkServer.sh status


zkCli

# 启动客户端
zkCli.sh
# 查看某个路径下的目录(不是内容)
ls /path
#查看详细信息,老版是ls2
ls -s /path
# 查看某个路径下的内容
get /path
#查看详细信息
get -s /path
#查看节点状态
stat /path
# 创建节点,-s是创建顺序结点,-e是创建临时结点
create [-s] [-e] path data acl
# 修改
set /path data [version]
# 删除
delete /path [version]



四字命令

Java使用ZooKeeper

maven依赖引入

注意,如果一直报一下错误

Exception in thread "main" org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for

可以从一下几个方面排查

  1. 服务器上客户端是否运行
  2. 端口防火墙是否打开
  3. 网络是否顺畅
  4. sessionTimeOut要大于tickTime
  5. 注意引入的依赖有没有版本冲突
<!--        原生jar包-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.5.3-beta</version>
        </dependency>
<!--        工具jar包-->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-client</artifactId>
            <version>4.0.0</version>
        </dependency>

原生使用

连接

 ZooKeeper keeper = new ZooKeeper("192.168.32.1:2181", 4000, new Watcher() {
            @Override
            public void process(WatchedEvent watchedEvent) {
                if (Event.KeeperState.SyncConnected == watchedEvent.getState()) {
                    System.out.println("连接成功");
                }
            }
        });

使用

简单的使用调用ZooKeeper这个类的对象的方法就行了

框架使用

连接

CuratorFramework curatorFramework= CuratorFrameworkFactory.
                builder().connectString("testlove.cn:2181").
                sessionTimeoutMs(4000).retryPolicy(new
                ExponentialBackoffRetry(1000,3)).
                namespace("").build();
        curatorFramework.start();

使用

存储结构

为树状结构,以Key:value的形式存储数据,也被叫做znode,下表是一些节点属性

cZxid 创建节点时的事务ID
ctime 创建节点时的时间
mZxid 最后修改节点时的事务ID
mtime 最后修改节点时的时间
pZxid 表示该节点的子节点列表最后一次修改的事务ID,添加子节点或删除子节点就会影响子节点列表,但是修改子节点的数据内容则不影响该ID(注意,只有子节点列表变更了才会变更pzxid,子节点内容变更不会影响pzxid)
cversion 子节点版本号,子节点每次修改版本号加1
dataversion 数据版本号,数据每次修改该版本号加1
aclversion 权限版本号,权限每次修改该版本号加1
ephemeralOwner 创建该临时节点的会话的sessionID。(*如果该节点是持久节点,那么这个属性值为0)*
dataLength 该节点的数据长度
numChildren 该节点拥有子节点的数量(只统计直接子节点的数量)

节点特性

  1. 同一级key名字唯一
  2. 创建结点时要用全路径
  3. 可以自动创建顺序结点
  4. session关闭,临时结点清除

权限控制

getAcl 命令:获取某个节点的 acl 权限信息。
setAcl 命令:设置某个节点的 acl 权限信息。
addauth 命令:输入认证授权信息,注册时输入明文密码,加密形式保存。
通过 [scheme:id:permissions] 来构成权限列表。
1、scheme:代表采用的某种权限机制,包括 world、auth、digest、ip、super 几种。
2、id:代表允许访问的用户。
3、permissions:权限组合字符串,由 cdrwa 组成,其中每个字母代表支持不同权限, 创建权限 create(c)、删除权限 delete(d)、读权限 read(r)、写权限 write(w)、管理权限admin(a)。
posted @ 2021-06-23 10:17  茕祇  阅读(51)  评论(0编辑  收藏  举报