zookeeper

知识链接

http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/#ibm-pcon

http://blog.csdn.net/shenlan211314/article/details/6170717

http://zookeeper.apache.org/doc/current/

部署

zookeeper的安装可以按照zookeeper官网的引导进行操作。

这里主要介绍下windows(Linux类似)下部署集群的步骤。举个简单的例子,用单台服务器部署;当使用多台服务器时跟下面配置类似。

在某个目录(如:xxx/zookeeper)下建3个文件夹,如下

server1 server2 server3

然后在每个文件夹下:手动创建目录data、dataLog、logs;解压zookeeper- 3.4.5.tar.gz

总体结构如下data dataLog logs zookeeper-3.4.5

那么首先进入data目录,创建一个myid的文件(不需要后缀,文件不需要格式),里面写入一个数字,比如我这个是server1,那么就写一个1,server2对应myid文件就写入2,server3对应myid文件就写个3

然后进入zookeeper-3.4.5/conf目录,创建一个zoo.cfg的配置文件,配置的内容如下所示:

tickTime=2000

initLimit=5

syncLimit=2

dataDir=xxxx/zookeeper/server1/data

dataLogDir=xxx/zookeeper/server1/dataLog

clientPort=2181

server.1=<ip>:2888:3888

server.2=<ip>:2889:3889

server.3=<ip>:2890:3890

只是需要注意的是clientPort这个端口如果你是在1台机器上部署多个server,那么个server都要不同的clientPort,比如我server1是2181,server2是2182,server3是2183,dataDir和dataLogDir的路径也需要区分下。

最后几行唯一需要注意的地方就是 server.X 这个数字就是对应data/myid中的数字。

你在3个server的myid文件中分别写入了1,2,3,那么每个server中的zoo.cfg都配server.1,server.2,server.3。

因为在同一台机器上,后面连着的2个端口3个server都不要一样,否则端口冲突,其中第一个端口用来集群成员的信息交换,第二个端口是在leader挂掉时专门用来进行选举leader所用。<ip>为服务器ip。

进入zookeeper-3.4.5/bin 目录中,window环境下双击运行zkServer.cmd启动一个server,Linux环境下运行命令./zkServer.sh start。

这时会报大量错误?没什么关系,因为现在集群只起了1台server,zookeeper服务器端起来会根据zoo.cfg的服务器列表发起选举leader的请求,因为连不上其他机器而报错,那么当我们起第二个zookeeper实例后,leader将会被选出,从而一致性服务开始可以使用,这是因为3台机器只要有2台可用就可以选出leader并且对外提供服务(2n+1台机器,可以容n台机器挂掉)。

测试

 

public class Test {
	
	// 会话超时时间,设置为与系统默认时间一致
	private static final int SESSION_TIMEOUT = 30000;
	
	// 创建 ZooKeeper 实例
	
	ZooKeeper zk;
	// 创建 Watcher 实例
	Watcher wh = new Watcher() {
		
		public void process(org.apache.zookeeper.WatchedEvent event) {
			System.out.println(event.toString());
		}
	};
	
	// 初始化 ZooKeeper 实例
	private void createZKInstance() throws IOException {
		zk = new ZooKeeper("10.196.143.75:2181", Test.SESSION_TIMEOUT, this.wh);
	}
	
	private void ZKOperations() throws IOException, InterruptedException, KeeperException

	{
		System.out.println("/n1. 创建 ZooKeeper 节点 (znode : zoo2, 数据: myData2 ,权限: OPEN_ACL_UNSAFE ,节点类型: Persistent");
		zk.create("/zoo2", "myData2".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
		System.out.println("/n2. 查看是否创建成功: ");
		System.out.println(new String(zk.getData("/zoo2", false, null)));
		System.out.println("/n3. 修改节点数据 ");
		zk.setData("/zoo2", "shenlan211314".getBytes(), -1);
		System.out.println("/n4. 查看是否修改成功: ");
		System.out.println(new String(zk.getData("/zoo2", false, null)));
		System.out.println("/n5. 删除节点 ");
		zk.delete("/zoo2", -1);
		System.out.println("/n6. 查看节点是否被删除: ");
		System.out.println(" 节点状态: [" + zk.exists("/zoo2", false) + "]");
	}
	
	private void ZKClose() throws InterruptedException {
		zk.close();
	}
	
	public static void main(String[] args) throws IOException, InterruptedException, KeeperException {
		Test dm = new Test();
		dm.createZKInstance();
		dm.ZKOperations();
		dm.ZKClose();
		
	}
	
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值