Zookeeper入门

Zookeeper入门

1.什么是zookeeper

Zookeeper是一个数据库,是一个使用树形结构存储结构的数据库,可以拥有高可用的集群,机器分为两种角色leader+follower,leader负责写入follower负责分担读的压力,一个集群只有一个leader通过选举算法来实现,必须确保机器个数为2n+1(奇数),集群中的所有机器都参与选举,票数最高的机器成为leader,leader写入的数据通过Paxos算法将数据同步到follower。

2.zookeeper的配置

#心跳的事件间隔
tickTime=2000
#初始化同步数据花费的时间 10个tickTime
initLimit=10
#leader和follwer之间互相发送心跳,检测对方失效的时间间隔 5个tickTime
syncLimit=5
#数据文件的储存目录.
dataDir=E:\Mr.liao\zookeeper-3.4.10\data
# 端口
clientPort=2181

3.zookeeper中的节点

3.1 永久节点
    数据被持久化,用户不调用删除,数据永远不会被删除
3.2 临时节点
    客户端正在连接时保留,断开后删除(用来做注册中心)
3.3 顺序节点
    用来做分布式主键、分布式锁

4.常用命令(来自网络)

前提将zookeeper目录的bin文件添加到path环境变量

连接到服务端:zkCli  -server ip:2181
切换连接:connect ip:2181
查看节点:ls  /节点名
创造节点: create /节点名 【-e临时节点】【-s顺序节点】【值】
启动ZK服务:       sh bin/zkServer.sh start
查看ZK服务状态: sh bin/zkServer.sh status
停止ZK服务:       sh bin/zkServer.sh stop
重启ZK服务:       sh bin/zkServer.sh restart
显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容
显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据
创建文件,并设置初始内容: create /zk "test" 创建一个新的 znode节点“ zk ”以及与它关联的字符串
获取文件内容: get /zk 确认 znode 是否包含我们所创建的字符串
修改文件内容: set /zk "zkbak" 对 zk 所关联的字符串进行设置
删除文件: delete /zk 将刚才创建的 znode 删除
退出客户端: quit
帮助命令: help
可以通过命令:echo stat|nc 127.0.0.1 2181 来查看哪个节点被选择作为follower或者leader
使用echo ruok|nc 127.0.0.1 2181 测试是否启动了该Server,若回复imok表示已经启动。
echo dump| nc 127.0.0.1 2181 ,列出未经处理的会话和临时节点。 echo kill | nc 127.0.0.1 2181 ,关掉server
echo conf | nc 127.0.0.1 2181 ,输出相关服务配置的详细信息。
echo cons | nc 127.0.0.1 2181 ,列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。
echo envi |nc 127.0.0.1 2181 ,输出关于服务环境的详细信息(区别于 conf 命令)。
echo reqs | nc 127.0.0.1 2181 ,列出未经处理的请求。
echo wchs | nc 127.0.0.1 2181 ,列出服务器 watch 的详细信息。
echo wchc | nc 127.0.0.1 2181 ,通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。
echo wchp | nc 127.0.0.1 2181 ,通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径。

5.java客户端

    maven:
    <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
    </dependency>
    java代码:
    package cn.zyp;


import java.util.concurrent.TimeUnit;
import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient;
import org.apache.zookeeper.CreateMode;

public class ZkTest {

    public static void main(String[] args) throws InterruptedException {
        String zkUrl = "localhost:2181";
        // 创建连接设置url 响应时间
        ZkClient zk = new ZkClient(zkUrl, 10000, 5000);
        // 创建一个永久节点
        zk.createPersistent("/user");
        // 创建两个顺序节点
        String zName = zk.create("/user/ls", "boy", CreateMode.PERSISTENT_SEQUENTIAL);
        String zName1 = zk.create("/user/ls", "boy", CreateMode.PERSISTENT_SEQUENTIAL);
        System.out.println(zName);
        System.out.println(zName1);
        // 创建一个临时节点
        zk.createEphemeral("/user/zs", "girl");
        Thread.sleep(Integer.MAX_VALUE);

        // 监控
        zk.subscribeDataChanges("/user", new IZkDataListener() {

            public void handleDataChange(String arg0, Object arg1) throws Exception {
                // 修改触发
                System.out.println("修改成功");

            }

            // 删除时触发
            public void handleDataDeleted(String arg0) throws Exception {
                System.out.println("删除成功");
            }

        });

        while (true) {
            TimeUnit.SECONDS.sleep(5);
        }
    }

}

注意:如果要使用readData方法,必须用byte数组接收

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值