zookeeper 服务搭建

Zookeeper windows环境部署

  单机环境部署
  准备zookeeper 的zip 包解压到某个文件夹下, G:\beijing project\tool\zookeeper\单机环境,在解压完成的文件夹中新建 一个data文件夹,用于存放zookeeper 的数据区域。打开文件的config 文件夹,在文件夹下有一个zoo_sample.cfg 文件,在这个文件夹复制一份,重命名为zoo.cfg,这个文件就作为zookeeper的配置文件,打开编辑配置文件找到下图这两行,dataDir就是刚才新建的data文件夹路径,clientPort 就是zookeeper 启动端口。

zookeeper配置文件
  切换到bin 目录,双击zkServer.cmd,启动zookeeper,出现下图说明启动成功

  接下来通过java 代码去访问zookeeper服务

       RetryPolicy policy = new ExponentialBackoffRetry(1000, 10);
        
        //通过工厂创建Curator
        CuratorFramework curator = CuratorFrameworkFactory.builder().connectString("127.0.0.1:2181")
                .sessionTimeoutMs(2000).retryPolicy(policy).build();
        
        curator.start();

  通过这三行代码去连接zookeeper 服务policy 是重试机制,CuratorFramework 是zookeeper 的链接工具类比原生的多了一些功能。
curator.create().forPath("/Path") 创建一个节点,
curator.setData().forPath("/Path", data),给某一个节点赋值

如果某一个节点的数据修改或者这个节点被删除,可以监听这个节点。

Watcher watcher = new Watcher() {
 
			@Override
			public void process(WatchedEvent event) {
            }
}

  通过重写watcher 的process 方法,当节点变化,会进入process 方法,由于此方法只会监听一次,所以当需要持续监听,在process 方法里面再重写watch 方法,可以用递归实现

doPorcess(){
    Watcher watcher = new Watcher() {
 
			@Override
			public void process(WatchedEvent event) {
                 doPorcess()

         }
    }

}

  这样就可以持续监听了。由于上面这个监听需要重复去注册监听,可以使用CuratorFramework 给提供的监听,将在下节将java代码相关操作

Zookeeper 集群环境部署
  在同一台电脑配置zookeeper,先创建2n + 1个文件夹,例如,我在我本地建立5个文件夹,分别命名为zookeeper1,zookeeper2,zookeeper3zookeeper4,zookeeper5将zookeeper.zip 复制到 zookeeper1文件夹,解压后,新建一个data文件夹,然后在data文件夹新建一个myid文件,不要后缀名记住,然后打开myid文件写一个1,表示指向服务1的 data文件
然后开始配置文件配置。
  打开confif文件夹,copy一份文件夹下的zoo_sample.cfg 文件到文件夹下,改名为zoo.cfg,打开zoo.cfg文件,datadir 和单机一致,clientPort端口为2181, 然后将 下面复制到clientPort 下一行

server.1=localhost:2881:3881

server.2=localhost:2882:3882

server.3=localhost:2883:3883

server.4=localhost:2884:3884

server.5=localhost:2885:3885
这里讲一下,例如你要起5个zookeeper,这5个zookeeper想要相互通信,必须配置访问url和端口,上面那5个server就对应了我们各自server的url和端口,server后面的1 2 3 4 5这几个数字要和每个zookeeper 下的 data文件夹下的myid 里面数字对应。到这,zookeeper第一个服务配置好了,启动看下,如下图
在这里插入图片描述

可以看到在集群下,单独启动一个控制台一直报错,这是在等待链接其他分布式服务。先不管这个控制台,继续配置其他服务。
将配置好的第一个zookeeper 文件,复制到zookeeper2文件夹下,编辑修改data文件夹下的myid文件。将里面的1改为2,然后修改conf文件夹下的zoo.cfg文件,只用修改端口和datadir,端口只要不冲突就行,我这里端口改为2182,datadir 指向服务2的data文件路径,接下来的3, 4, 5和配置第二个服务相同,myid 改为指向对应的集群服务的数字即可。
由于此时只启动一个,通过zookeeper 可视化工具链接第一个服务试下,下载ZooInspector工具,打开工具后出现
在这里插入图片描述

这个就是zookeeper 的可视化工具,点击左上角的绿色三角按钮,链接第一个服务,发现链接不上,报错如下图

  说明启动一个服务不行,接下来启动第二个,发现第一个第二个服务还是连接不上,接下来启动第三个,发现服务已经连上来了,后面4 和 5不管启不启动,都可以连接上服务,这个就是zookeeper 的特性,集群中要有半数以上的服务是启动的才能工作,例如集群有5个,那么要保证有三个服务已经启动。
  接下来验证下zookeeper 节点数据是如何同步的,使用zookeeper 工具连接到第一个服务,可以看到左边有一颗节点树,是基本zookeeper 数据,没有额外添加的数据,接下来通过java 代码向服务4添加一个节点并添加数据,看看服务1的节点树会不会变化。
java 代码如下,

        RetryPolicy policy = new ExponentialBackoffRetry(1000, 10);
        
        //通过工厂创建Curator
        CuratorFramework curator = CuratorFrameworkFactory.builder().connectString("127.0.0.1:2184")
                .sessionTimeoutMs(10000).retryPolicy(policy).build();
        
        curator.start();

        curator.create().forPath("/PATH");//创建节点路径
        
        curator.setData().forPath("/PATH", "ssss".getBytes());//给节点赋值

  通常CuratorFramework为提供了比较好的连接zookeeper ,实现了断开重连,而且有比较丰富的api。
create 创建节点
delete 删除节点
setData 节点赋值
getData 节点取值
checkExist 判断节点是否存在
而且还提供了一些监听事件。上面的代码本接不做讲解,将在下节讲解java 如何操作zookeeper
在运行上面的代码后,,可以通过zookeeper 工具连接到服务1,看到在左侧树生成一个PATH的路径,选择PATH,点击右侧NODEDATA可以看到里面已经存放了存进去值,说明修改服务4的数据,服务1同步更新了数据,而且不光服务1更新了,zookeeper 工具连接到其他服务也可以看到数据更新了。通过zookeeper 这个功能 可以看到其可以用在多个场景
例如 当有一个分布式的项目,需要修改配置文件,那么一般都是每个环境都需要修改一遍配置文件,如果将配置文件信息发布在zookeeper上,那么修改一处,其他环境也都实现了同步修改,就避免了手动一个个去修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值