zookeeper 伪集群 java_Zookeeper安装(本地,伪分布式,集群)

概述

ZooKeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以Standalone模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。

本地模式安装 :本人linux下的JDK版本是1.8

下载地址:https://mirror.bit.edu.cn/apache/ 找到zookeeper 选择对应版本下载即可。 3.5.5版本开始要下载 bin.tar.gz的包。

1.下载并解压 zookeeper-3.4.13.tar.gz

tar -zxvf zookeeper-3.4.13.tar.gz -C /mysoft/

2.修改配置文件

cp zoo_sample.cfg zoo.cfg

修改以下参数。将zookeeper的数据存储指定到文件夹,创建文件夹 mkdir zkData

0ed10cdefee6e03a522d40e51d0b2037.png

3.启动zookeeper ,停止使用 bin/zkServer.sh stop

bin/zkServer.sh start

9f530fe8bc05c24475cfd56b441cf734.png

查看运行状态

bin/zkServer.sh status

110a7ff59cea3a44ec48a37bce7107d5.png

4.启动zookeeper客户端

bin/zkCli.sh

退出使用 quit ,连接其他客户端 zkCli.sh -serve 127.0.0.1(IP):2182(port) 这样子来连接

c07c5a44d59de899a9fcddaf230f0219.png

5.zookeeper 配置文件

# The number of milliseconds of each tick

# 心跳时间2秒

# 客户端与服务器或者服务器与服务器之间维持心跳,

# 也就是每个tickTime时间就会发送一次心跳。

# 通过心跳不仅能够用来监听机器的工作状态,

# 还可以通过心跳来控制Flower跟Leader的通信时间,

# 默认情况下FL的会话时常是心跳间隔的两倍。

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

# 集群中的follower服务器(F)与leader服务器(L)之间

# 初始连接时能容忍的最多心跳数(tickTime的数量)。

# tickTime * 10 =20秒没通讯就认为挂了

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

# 集群中flower服务器(F)跟leader(L)

# 服务器之间的请求和答应最多能容忍的心跳数。

# tickTime * 5 =10秒没通讯就认为挂了

syncLimit=5

# the directory where the snapshot is stored.

# do not use /tmp for storage, /tmp here is just

# example sakes.

# 数据存放位置

dataDir=/mysoft/zookeeper-3.4.13/zkData

# the port at which the clients will connect

# 客户端连接的接口,客户端连接zookeeper服务器的端口,

# zookeeper会监听这个端口,接收客户端的请求访问!这个端口默认是2181。

clientPort=2181

# the maximum number of client connections.

# increase this if you need to handle more clients

#maxClientCnxns=60

#

# Be sure to read the maintenance section of the

# administrator guide before turning on autopurge.

#

# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

#

# The number of snapshots to retain in dataDir

#autopurge.snapRetainCount=3

# Purge task interval in hours

# Set to "0" to disable auto purge feature

#autopurge.purgeInterval=1

zookeeper 日志的配置地址在conf/目录下的log4j.properties文件中,该文件中有一个配置为“zookeeper.log.dir=.”,表示log4j日志文件在与执行程序(zkServer.sh)在同一目录下。当执行zkServer.sh 时,在该文件夹下会产生zookeeper.out日志文件,可以通过日志文件查看运行信息。

伪分布式安装:

1.解压完安装包后,进入zookeeper/conf/目录下,将改目录下的zoo_sample.cfg配置文件拷贝3份,依次 zoo1.cfg  zoo2.cfg  zoo3.cf。使用vim编辑zoo1.cfg  zoo2.cfg zoo3.cfg这三个配置文件。

clientPort = ?, 分别将三个配置文件修改为2181.2182.2183

修改dataDir的路径,分别为zkData1. zkData2. zkData3,并且再对应服务上的zookeeper-3.4.13目录下创建文件夹

dataDir=/mysoft/zookeeper-3.4.13/zkData

文件结尾添加以下信息,我这里是准备部署3台,所以只有3条信息

server.1=IP:2888(数据同步端口):3888(Leader选举端口)

server.2=IP:2889:3889

server.3=IP:2890:3890

server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

2.在各data文件下创建名为myid的文件,文件内容对应服务器编号

touch myid

3.写入服务器编号,也就是1中server.1(2.3)的对应值

echo 1 > zkDdata1/myid

echo 2 > zkDdata2/myid

echo 3 > zkDdata3/myid

4.依次启动服务,服务按照次序启动,启动时的选举算法是依次投票,这里的leader顺理就是2号配置文件启动的服务。其他的都是fllower,当启动第一台服务器的时候查看状态是不可用的,应为集群中节点未在半数以上。 集群中奇数和偶数对故障的容忍度是一致的....所以建议配置奇数个,并不是必须奇数...

sh zkServer.sh start /mysoft/zookeeper-3.4.13/conf/zoo1.cfg

sh zkServer.sh start /mysoft/zookeeper-3.4.13/conf/zoo2.cfg

sh kServer.sh start /mysoft/zookeeper-3.4.13/conf/zoo3.cfg

5.查看状态 记得关闭防火墙哦

sh zkServer.sh status /mysoft/zookeeper-3.4.13/conf/zoo1.cfg

sh zkServer.sh status /mysoft/zookeeper-3.4.13/conf/zoo2.cfg

sh zkServer.sh status /mysoft/zookeeper-3.4.13/conf/zoo3.cfg

启动客户端 sh zkCli.sh -server 127.0.0.1:port

伪分布式安装就是在一台机器上配置多个配置文件,根据不同的配置文件来启动,而真正的分布式下就是将配置文件安装在各自服务器下。要注意server的配置

e51902eb09dab740e1311d375bf7c7c8.png

基于 Java API 初探 zookeeper 的使用:

先来简单看一下API的使用:

public classConnectionDemo {public static voidmain(String[] args) {try{

final CountDownLatch countDownLatch=new CountDownLatch(1);

ZooKeeper zooKeeper=

new ZooKeeper("192.168.254.135:2181," +

"192.168.254.136:2181,192.168.254.137:2181",4000, newWatcher() {

@Overridepublic void process(WatchedEvent event) {if(Event.KeeperState.SyncConnected==event.getState()){//如果收到了服务端的响应事件,连接成功

countDownLatch.countDown();

}

}

});

System.out.println(zooKeeper.getState());//CONNECTING

countDownLatch.await();

System.out.println(zooKeeper.getState());//CONNECTED//添加节点

zooKeeper.create("/zk-wuzz","0".getBytes(),ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);

Thread.sleep(1000);

Stat stat=newStat();//得到当前节点的值

byte[] bytes=zooKeeper.getData("/zk-wuzz",null,stat);

System.out.println(new String(bytes)); //0//修改节点值

zooKeeper.setData("/zk-wuzz","1".getBytes(),stat.getVersion());//得到当前节点的值

byte[] bytes1=zooKeeper.getData("/zk-wuzz",null,stat);

System.out.println(new String(bytes1)); //1

zooKeeper.delete("/zk-wuzz",stat.getVersion());

zooKeeper.close();

System.in.read();

}catch(IOException e) {

e.printStackTrace();

}catch(InterruptedException e) {

e.printStackTrace();

}catch(KeeperException e) {

e.printStackTrace();

}

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值