码迷,mamicode.com
首页 > 系统相关 > 详细

《Zookeeper Linux 集群服务》

时间:2017-12-24 22:55:19      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:size   地址   try   系统   图片   a20   dubbo   不可用   原因   

  今天是平安夜,先祝大家平安夜快乐,自从有了女朋友貌似就不过平安夜了,哈哈,开个玩笑。平安夜要过,随笔也要写。这篇文章我们来谈谈 Zookeeper Linux 集群。

  为什么要集群呢?因为一台服务不够。集群是为了系统扩容,系统稳定。一台服务挂了,没关系,我还有其他的服务。集群虽然可以带来很多好处,例如高可用性,高并发,高流量,但是也有它的缺点。因为是多台服务器,所以怎么去保证每台服务器上的数据一致以及事务就成了问题。不过 Zookeeper 帮我们解决了这些问题,关于一致性和事务我们以后再详细讨论,足以写多篇随笔了。

  上一篇随笔是写独立服务,也就是单台服务器提供服务。Zookeeper 目录是 /usr/local/src/zookeeper/zookeeper-3.4.6。我们现在要集群,所以需要至少 3 个 Zookeeper 注册中心。先来看看我的 3 个注册中心目录,/usr/local/src/zookeeper/zookeeper-3.4.9、/usr/local/src/zookeeper/zookeeper-3.4.9.slave、/usr/local/src/zookeeper/zookeeper-3.4.6。首先保证每个注册中心可以单独正常服务,其实集群和单体的区别在于配置,单体配置很简单,集群配置则必须包含其他注册中心信息。

  先来看看 /usr/local/src/zookeeper/zookeeper-3.4.6 配置文件:

  技术分享图片

 

   重点看看最后,server.1=127.0.0.1:2881:3881、server.2=127.0.0.1:2882:3882、server.3=127.0.0.1:2883:3883。由于服务器原因,我的 3 个注册中心都放在了同一台服务器。server.1、server.2、server.3 则表示 3 个不同的注册中心服务名称。1、2、3 则表示 3 个注册中心的标识码。

  规则 server.N=IP:A:B,N 表示标识码也就是编码,IP 表示服务地址,A 表示LF通信端口,也就是与 Leader 通信端口,B 表示选举端口。既然是集群,那么需要有一个领导,其他的都是随从。谁来做领导,这就需要选举,所以需要 B 端口。有了领导,需要和领导通信就需要专门通信端口,也就是 A。至于为什么不把 A 和 B 设置成同一个端口,我个人认为如果设置成一个端口,端口出现问题的话,那就既不能和领导通信,也不能选举。这就极有可能使整个集群不可用,虽然你有 N 台服务器,但是根据选举过半原则就很有可能选不出领导。

  因为我是放在同一台服务器,所有可以看到,server.1、server.2、server.3 的 A 和 B 端口都不一样。如果是放在不同的服务器,例如 server.1=192.168.0.1:2881:3881、server.2=192.168.0.2:2881:3881、server.3=192.168.0.3:2881:3881,那么 A 和 B 端口可以一样。

  继续上面的话题,server.1、server.2、server.3,怎么知道 /usr/local/src/zookeeper/zookeeper-3.4.6 是哪一台服务呢?可以看到 dataDir=/usr/local/src/zookeeper/zookeeper-3.4.6/data,在 data 目录下面我们要生产一个叫 myid 的文件,里面就保存了服务表示码,也就是编码。

  技术分享图片

   这里面是 1,也就是 server.1 就是 /usr/local/src/zookeeper/zookeeper-3.4.6 的服务,127.0.0.1:2881:3881,通信端口 2881,选举端口 3881。

 其他两个 /usr/local/src/zookeeper/zookeeper-3.4.9、/usr/local/src/zookeeper/zookeeper-3.4.9.slave,也是一样的。

 我们启动所有的注册中心,然后 jps 看看。

 技术分享图片

 最后我们要记得把,2181、2182、2183 端口加入防火墙规则,像上一篇文章中讲的,-A RH-Firewall-1-INPUT -m state --state NEW  -m tcp -p tcp --dport 2181 -j ACCEPT。重启防火墙。

 技术分享图片

 好了,我们来试试集群是否成功。首先注册 Dubbo 服务到集群,然后通过 Dubbo 客户端随机调用,看看提供服务的注册中心是否不同。

 先来看看 Dubbo 服务注册: 

<dubbo:application name="demo-provider"/>
<dubbo:registry id="test" group="test" protocol="zookeeper" address="192.168.0.106:2181,192.168.0.106:2182,192.168.0.106:2183" />
<dubbo:protocol name="dubbo" port="20881"/>
<dubbo:service interface="www.test.com.dubbo.xml.IUser" ref="userService" version="0.0.1"/>
<bean id="userService" class="www.test.com.dubbo.xml.UserImpl"/>

 

 Dubbo 客户端订阅: 

<dubbo:application name="demo-consumer"/>
<dubbo:registry protocol="zookeeper" id="test" group="test" address="192.168.0.106:2181,192.168.0.106:2182,192.168.0.106:2183"/>
<dubbo:reference id="userService" interface="www.test.com.dubbo.xml.IUser" version="0.0.1"/>

 

 先来看看 Dubbo 服务是否注册成功。 技术分享图片

 没错,dubbo%3A%2F%2F192.168.0.102%3A20881%2Fwww.test.com.dubbo.xml.IUser,这就是 Dubbo 服务提供者地址。

 我们来随机获取服务,看看是哪个注册中心提供服务。

 第一次获取

 技术分享图片

第二次获取 

 技术分享图片

第三次获取

 技术分享图片

 OK,Linux 集群就到这里,谢谢大家观看,希望有所帮助!

 

《Zookeeper Linux 集群服务》

标签:size   地址   try   系统   图片   a20   dubbo   不可用   原因   

原文地址:http://www.cnblogs.com/xums/p/8099167.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!