Zookeeper 入门

其实和nacos差不多

Zookeeper特点

1)Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。

2)集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所 以Zookeeper适合安装奇数台服务器。

3)全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。

4)更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行。 5)数据更新原子性,一次数据更新要么成功,要么失败。

6)实时性,在一定时间范围内,Client能读到最新数据。

作用

注册中心

监控服务

统一配置管理

软负载均衡

Zookeeper的安装

前置安装

(1)安装 JDK

(2)拷贝 apache-zookeeper-3.5.7-bin.tar.gz 安装包到 Linux 系统下

(3)解压到指定目录 [atguigu@hadoop102 software]$ tar -zxvf apache-zookeeper-3.5.7- bin.tar.gz -C /opt/module/

(4)修改名称 [atguigu@hadoop102 module]$ mv apache-zookeeper-3.5.7 -bin/

zookeeper-配置修改

(1)将/opt/module/zookeeper-3.5.7/conf 这个路径下的 zoo_sample.cfg 修改为 zoo.cfg; [atguigu@hadoop102 conf]$ mv zoo_sample.cfg zoo.cfg

(2)打开 zoo.cfg 文件,修改 dataDir 路径: [atguigu@hadoop102 zookeeper-3.5.7]$ vim zoo.cfg 修改如下内容: dataDir=/opt/module/zookeeper-3.5.7/zkData

(3)在/opt/module/zookeeper-3.5.7/这个目录上创建 zkData 文件夹 [atguigu@hadoop102 zookeeper-3.5.7]$ mkdir zkData 3)

操作 Zookeeper

(1)启动 Zookeeper [atguigu@hadoop102 zookeeper-3.5.7]$ bin/zkServer.sh start

(2)查看进程是否启动 [atguigu@hadoop102 zookeeper-3.5.7]$ jps 4020 Jps 4001 QuorumPeerMain

(3)查看状态 [atguigu@hadoop102 zookeeper-3.5.7]$ bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/module/zookeeper-3.5.7/bin/../conf/zoo.cfg Mode: standalone

(4)启动客户端 [atguigu@hadoop102 zookeeper-3.5.7]$ bin/zkCli.sh

(5)退出客户端: [zk: localhost:2181(CONNECTED) 0] quit

(6)停止 Zookeeper [atguigu@hadoop102 zookeeper-3.5.7]$ bin/zkServer.sh stop

配置参数解读

tickTime = 2000:通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒

initLimit = 10:LF初始通信时限,如果心跳在initLimit*tickTime 时间内都没有回复将会初始化失败

syncLimit = 5:LF同步通信时限,如果心跳在initLimit*tickTime 时间内都没有回复将会同步失败

dataDir:保存Zookeeper中的数据

clientPort = 2181 : 客户端通信端口号

Zookeeper-Java-API

public class TestCurator {
    private CuratorFramework client;

    /**
     * 建立连接
     */
    @Before
    public void testConnect() {

        /*
         *
         * @param connectString       连接字符串。zk server 地址和端口 "192.168.149.135:2181,192.168.149.136:2181"
         * @param sessionTimeoutMs    会话超时时间 单位ms
         * @param connectionTimeoutMs 连接超时时间 单位ms
         * @param retryPolicy         重试策略
         */
        //重试策略
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(3000, 10);
        //2.第二种方式
        //CuratorFrameworkFactory.builder();
        client = CuratorFrameworkFactory.builder()
                .connectString("192.168.232.151:2181")
                .sessionTimeoutMs(60 * 1000)
                .connectionTimeoutMs(15 * 1000)
                .retryPolicy(retryPolicy)
                .namespace("itheima")
                .build();

        //开启连接
        client.start();
    }

    @Test
    public void testCreate() throws Exception {
        //基本创建
        //临时当前会话一旦结束,临时节点就被干掉
        client.create().creatingParentContainersIfNeeded().forPath("/test","value".getBytes());
        //创建节点

        //设置节点类型

        //创建多级节点

    }
    @Test
    public void testFind() throws Exception {
        byte[] bytes = client.getData().forPath("/test");
        System.out.println(new String(bytes));
        List<String> strings = client.getChildren().forPath("/");
        strings.forEach(System.out::println);
        CuratorFrameworkState state = client.getState();
        System.out.println(state);

        Stat stat = new Stat();
        client.getData().storingStatIn(stat).forPath("/test");

        System.out.println(stat);



    }
    @Test
    public void testSet() throws Exception {

        //保证原子性操作
        Stat stat = new Stat();
        client.getData().storingStatIn(stat).forPath("/test");
        int version = stat.getVersion();
        System.out.println(version);
        client.setData().withVersion(version).forPath("/test","v1".getBytes());

    }

    @Test
    public void testDelete() throws Exception {
        //必须成功 防止网络抖动
        client.delete().guaranteed().inBackground((client, event) -> {
            System.out.println(client);
            System.out.println(event);
        }).forPath("/test");


    }

    

    @After
    public void close(){
        if(client!=null){
            client.close();
        }

    }


}

Zookeeper分布式锁

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值