CentOS搭建Zookeeper

下载地址
https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/

一、zookeeper环境搭建
安装jdk:略

本次我们在192.168.0.104,192.168.0.106,192.168.0.107三台机器中搭建zookeeper。
zookeeper版本:3.4.14

1、下载并解压
下载:zookeeper-3.4.14.tar.gz,下载完成之后,我将其放置在"/usr/local/zookeeper"目录下,解压目录为"/usr/local/zookeeper/zookeeper-3.4.14"。

2、修改环境变量

vim /etc/profile

在 /etc/profile文件中添加如下内容(注:目录根据自己的位置进行配置):

export ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.14
PATH=$ZOOKEEPER_HOME/bin:$PATH
source /etc/profile

3、修改配置文件

cd /usr/local/zookeeper/zookeeper-3.4.14/conf
mv zoo_sample.cfg zoo.cfg

vim zoo.cfg

(1)dataDir=/usr/local/zookeeper/data
(2)末尾添加如下内容:
server.0=192.168.0.104:2888:3888
server.1=192.168.0.106:2888:3888
server.2=192.168.0.107:2888:3888

注:dataDir=/usr/local/zookeeper/data中的这个目录需要自己创建。

4、服务器标识配置
进入创建的data目录

cd /usr/local/zookeeper/data
vim myid

其中myid文件的内容分别为:0,1,2。也就是上面配置的server.0,server.1,server.2对应的三台机器中。根据如上配置。
192.168.0.104机器的myid文件内容为“0”
192.168.0.106机器的myid文件内容为“1”
192.168.0.107机器的myid文件内容为“2”

zoo.cfg配置解释

tickTime:	以毫秒为单位。是 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔。
dataDir: Zookeeper 保存数据的目录。默认情况下,Zookeeper 会将数据的日志文件也保存在这个目录。
clientPort:客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
initLimit:配置 Zookeeper 接受客户端初始化连接时最长能忍受多少个心跳时间间隔数,当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。
syncLimit:标识 Leader 与 Follower 之间发送消息、请求和应答的时间长度,最长不能超过多少个 tickTime 的时间长度。
server.A = B:C:D : 
        A表示这个是几号服务器
        B 是服务器的 ip 地址
        C 是这个服务器与集群中的 Leader 服务器交换信息的端口;
        D 是若集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader

5、启动zookeeper
启动:

zkServer.sh start

注:启动时记得要关闭防火墙!!!
停止firewall

systemctl stop firewalld.service

禁止firewall开机启动

systemctl disable firewalld.service 

查询服务:

jps

在这里插入图片描述

检查状态:

zkServer.sh status
在三个节点上检验zookeeperk的mode,一个leader和俩个follower

如下图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、 zkCli.sh进入客户端
zkCli.sh位于zookeeper解压目录的bin目录下
在这里插入图片描述

查找:ls /     例如:  ls /zookeeper
创建并赋值: create /test zookeeper
获取值:get /test
设置值:set /test hello

三、查看zookeeper工具
1、ZooInspector
下载地址:
https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip
解压之后找到:zookeeper-dev-ZooInspector.jar
在这里插入图片描述
启动:

java -jar zookeeper-dev-ZooInspector.jar

在这里插入图片描述
2、eclipse
Eclipse -> help -> install new software
Location: http://www.massedynamic.org/eclipse/updates/
在这里插入图片描述
在这里插入图片描述
连接成功如下所示:
在这里插入图片描述

四、zookeeper原生api简单使用

<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.5.5</version>
</dependency>
import java.io.IOException;
import java.util.concurrent.CountDownLatch;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;

public class ZookeeperClient {
	public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
		String CONNECT_ADDR = "192.168.0.104:2181,192.168.0.106:2181,192.168.0.107:2181";
		int SESSION_TIMEOUT = 5000;    //session超时时间(ms)
		CountDownLatch countDownLatch = new CountDownLatch(1); //阻塞,等待zk连接成功

		ZooKeeper zk = new ZooKeeper(CONNECT_ADDR, SESSION_TIMEOUT, new Watcher(){
			@Override
			public void process(WatchedEvent event) {
				KeeperState keeperState = event.getState();
				EventType eventType = event.getType();
				//状态是建立连接
				if(KeeperState.SyncConnected == keeperState){
					if(EventType.None == eventType){
						//如果连接成功,发送信号量,让后续阻塞程序向下执行
						countDownLatch.countDown();
						System.out.println("zk连接成功");
					}
				}
			}
		});
		//进行阻塞,连接成功后放行
		countDownLatch.await();
		
		
		//创建节点
		//Ids.OPEN_ACL_UNSAFE  节点权限:开放权限
		//CreateMode.PERSISTENT  节点类型:持久节点
		String create = zk.create("/testZookeeper", "testValue".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
		System.out.println(create);
		
		String child = zk.create("/testZookeeper/child", "childValue".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
		System.out.println(child);
		
		//获取节点
		byte[] data = zk.getData("/testZookeeper", false, null);
		System.out.println(new String(data));
		
		//修改节点
		zk.setData("/testZookeeper", "testValueNew".getBytes(), -1);
		byte[] dataNew = zk.getData("/testZookeeper", false, null);
		System.out.println(new String(dataNew));
		
		//删除节点
		zk.delete("/testZookeeper/child", -1);
		
		//检查节点是否存在(返回null则表示不存在该节点)
		System.out.println(zk.exists("/testZookeeper/child", false));
		
		//关闭连接
		zk.close();
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值