zoukankan      html  css  js  c++  java
  • 聊聊、Zookeeper Linux 集群服务

      今天是平安夜,先祝大家平安夜快乐。这篇文章我们来谈谈 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 集群就到这里,谢谢大家观看,希望有所帮助!

  • 相关阅读:
    CSAPP DataLab
    《计算机网络自顶向下》第二章应用层,笔记总结
    计算机网络自顶向下第二章套接字编程作业
    第二章---信息的表示与处理
    python界面使用gbk编码
    python修改获取xlsx数据
    刚安装了ftp之后无法使用root访问,服务器发回了不可路由的地址。使用服务器地址代替。
    ssh_exchange_identification: read: Connection reset
    <七>对于之前的一些遗漏的地方的补充
    (六)单例模式与多线程时的安全问题以及解决办法
  • 原文地址:https://www.cnblogs.com/xums/p/8099167.html
Copyright © 2011-2022 走看看