Zookeeper安装
1、安装jdk并配置java环境
2、下载并解压zookeeper
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz(根据下载的版本号不同包名不同)
3、重命名配置文件
cp zoo_sample.cfg zoo.cfg (zoo_sample.cfg是一个模板文件,zookeeper默认找zoo.cfg)
4、启动zookeeper
进入zookeeper的bin目录:
zkServer.sh start
5、用zookeeper客户端连接服务端
zkCli.sh [-server ip:2181]
zookeeper节点类型
-
PERSISTENT-持久目录节点
客户端与zookeeper断开连接后节点依然存在
-
EPHEMERAL-临时目录节点
客户端断开该节点被删除(如检测上线状态功能)
-
PERSISTENT_SEQUENTIAL-持久化顺序节点
-
EPHEMERAL_SEQUENTIAL -临时顺序节点
Zookeeper使用
1、查看节点(必须跟上路径)
ls /
2、创建节点并存入数据(创建节点时指定数据)
create /zkNode dataStr 创建节点并存入数据(持久节点)
create -s /znNode1 创建顺序节点,会在节点名称后更少顺序号(持久顺序节点)
create -e /ephemeral 创建临时节点(对话结束时自动删除)
acl:权限,定义什么用户能够操作该节点,,能做什么操作。
3、修改节点数据
set /zkNode dataUpdate
4、获取数据
get /zkNode 只查看数据
get -s /zkNode 加-s查询节点详细信息
5、删除节点(如果存在子节点则不能删除)
delete /zkNode
监听通知机制
采用java代码实现
maven引入依赖
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.5.5</version>
</dependency>
监听代码
public class ZookeeperProSync implements Watcher {
private static CountDownLatch connectedSemaphore=new CountDownLatch(1);
private static ZooKeeper zk=null;
private static Stat stat=new Stat();
public static void main(String[] args) throws Exception
{
String path="/jianting";
zk=new ZooKeeper("ip:端口",5000,new ZookeeperProSync());
connectedSemaphore.await();
System.out.println(new String(zk.getData(path, true, stat)));
Thread.sleep(Integer.MAX_VALUE);
}
@Override
public void process(WatchedEvent event) {
if (event.getState() == KeeperState.SyncConnected)
{
if(EventType.None==event.getType()&&null==event.getPath()) {
System.out.println("连接成功");
connectedSemaphore.countDown();
}
if(event.getType()==EventType.NodeDataChanged) {
System.out.println("数据已经修改");
try {
System.out.println(new String(zk.getData(event.getPath(), true,stat)));
} catch (Exception e)
{
e.printStackTrace();
}
}
}
}
}
集群搭建
如果只有一台服务器可搭建伪集群
1、将配置文件zoo.cfg复制三份
zoo-1.cfg zoo-2.cfg zoo-3.cfg
2、修改每个配置文件的端口及数据存在路径,保证三个不一样即可。
tickTime=2000 时间心跳
initLimit=10 当follower最初与leader建立连接时,它们之间会传输相当多的数据,尤其是follower的数据落后leader很多。initLimit配置follower与leader之间建立连接后进行同步的最长时间。表示10个心跳,即10*2000
syncLimit=5 ollower和leader之间发送消息,请求和应答的最大时间长度。表示5个心跳
dataDir 数据存放目录。集群模式下该文件夹下需要一个myid文件,文件内容为一个1-255之间的数字,这个数字为下方server.id中的id,表示zk进程的id
server.1=ip1:port1:port2
server.2=ip2:port3:port4
server.3=ip3:port5:port6
3、创建myid文件在配置文件的dataDir配置的目录下
4、启动集群
zkServer start zoo1文件地址
zkServer start zoo2文件地址
zkServer start zoo3文件地址
5、查看状态
zkServer status zoo1文件地址
zkServer status zoo2文件地址
zkServer status zoo3文件地址