天天看点

Centos7 Zookeeper

本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws

一.写在前面

ZK是一个高效的分布式协调服务,高可用的分布式管理协调框架。 朋友推荐一本书《从paxos到zookeeper》,对我帮助的确很大。 

二.集群配置和踩坑

java安装和环境变量配置可以参考 http://www.cnblogs.com/tdws/p/4096300.html 

1 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz   下载
2  
3 tar -zxvf zookeeper-3.4.10.tar.gz   解压
4  
5 mv zookeeper-3.4.10 /usr/local  剪切
6  
7 mv zookeeper-3.4.10/ zookeeper 重命名      

下面修改配置文件命名

1 cd /usr/local/zookeeper/conf
2 mv zoo_sample.cfg zoo.cfg      

配置一共没几行 。指定配置中的  dataDir

dataDir=/usr/local/zookeeper/data      

自行mkdir创建data文件夹。

在配置文件末尾 配置集群 我是单台机器伪集群 三个节点

1 server.1=your_ip:20881:30881
2 server.2=your_ip:20882:30882
3 server.3=your_ip:20883:30883      

在data文件夹中创建文件myid 来做一个标识

nano myid 在文件中填写0 并且保存。需要注意的是刚才我们的zookeeper文件夹是不使用的,仅作为我们copy新节点的原本。

接下来复制三份zk

1 cp -r zookeeper/ zookeeper1
2 cp -r zookeeper/ zookeeper2
3 cp -r zookeeper/ zookeeper3      

分别修改三台节点 其datadir 将路径指定到自己节点之下

分别修改其端口号和myid,是各个zoo.conf 配置的其中port 设置分别为2181 2182 2183

各个myid内容分别为1 2 3

下面 去三个zk bin目录下 执行zkServer.sh start

第一次 出错

Error contacting service. It is probably not running.

哎 检查好几个小时ZK配置文件 试了十几种方法, 结果之前JAVA_HOME不小心配置错了,我是yum安装的jdk。

第二次 出错与解决

后来又出一次错误 是我stop zk所有节点之后 再次启动起不来 首先 jps命令 然后看到进程id和QuorumPeerMain

把Quorumpeermain的进程kill -9杀死

第三次 我丢雷楼某! 这个真是困扰了

如果使用阿里云ECS 专有网络+弹性公网IP

一般不能直接在ECS实例的程序例绑定和使用弹性公网IP地址。因为这个公网IP地址在ECS之外。所以我开了所有的端口,根本没有用,最后使用0.0.0.0解决问题。

1 server.1=0.0.0.0:20881:30881
2 server.2=0.0.0.0:20882:30882
3 server.3=0.0.0.0:20883:30883      

三.应用和小结

学习ZK一段时间,原生API比较难以使用,一般使用zkClient(dubbo依赖于此)和curator框架来操作ZK比较容易。 其典型应用场景包括以下几点:

1.数据发布与订阅

    ZK在dubbo中作为注册中心的角色,服务方和调用方都在这里注册。举例来说明,我发布了一个dubbo service,消费者webapp引用这个服务

<dubbo:service interface="com.s2s.service.ItemService" ref="itemServiceImpl"/>   发布的服务      
<dubbo:reference interface="com.s2s.service.ItemService" id="itemService"/>     引用服务(将使用RPC调用)      

  接下来去服务器上查看数据节点,

Centos7 Zookeeper

可以看到根目录上有dubbo节点,dubbo下有com.s2s.service.ItemService, 其节点下又有consumers和providers等。

Centos7 Zookeeper
Centos7 Zookeeper

服务提供者启动时向/dubbo/com.s2s.service.ItemService/providers目录下写入URL

服务消费者启动时订阅/dubbo/com.s2s.service.ItemService/providers目录下的URL。 并且向/dubbo/com.s2s.service.ItemService/consumers目录下写入自己的URL 

监控中心启动时订阅/dubbo/com.s2s.service.ItemService/目录下的所有提供者和消费者URL。

所以dubbo监控中心,查看到消费者和服务提供者

Centos7 Zookeeper
Centos7 Zookeeper

2.负载均衡

3.命名服务

4.分布式通知和协调

5.集群管理与Master选举

 比如SolrCloud管理。管理集群配置,监控集群状态,选举分片leader

6.分布式锁

    有很多人用它做分布式锁 但是做法比较底层。临时节点是在一次会话内有效,保证了出现异常时,锁能得以释放。比如client1 做分布式操作 那他创建一个临时节点 然后去做一些其他数据操作 做完操作后, 再去把临时节点移除。这时c2才能去操作。如果有10个客户端 要操作同一个数据,但是这个数据,有多个复制的版本 在不同的DB当中(当然值是一致)。

这个时候 分布式锁的作用就是同步操作。客户端1 操作 这条数据, 那就去zk立即 就create个节点 代表占用了这条数据,这时候客户端2 并发操作这条数据 先去zk上get一下这个节点,get到的话 可以等待一下,等客户端1 释放掉后,去再次create一下占领数据。

7.分布式队列

本文主要是安装配置,分布式理论的学习还是比较好,接下来将会继续分享实践中的收获。