今天是平安夜,先祝大家平安夜快乐。这篇文章我们来谈谈 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 集群服务的更多相关文章

  1. Linux Centos7 环境搭建Docker部署Zookeeper分布式集群服务实战

    Zookeeper完全分布式集群服务 准备好3台服务器: [x]A-> centos-helios:192.168.19.1 [x]B-> centos-hestia:192.168.19 ...

  2. 大数据项目之_15_帮助文档_NTP 配置时间服务器+Linux 集群服务群起脚本+CentOS6.8 升级到 python 到 2.7

    一.NTP 配置时间服务器1.1.检查当前系统时区1.2.同步时间1.3.检查软件包1.4.修改 ntp 配置文件1.5.重启 ntp 服务1.6.设置定时同步任务二.Linux 集群服务群起脚本2. ...

  3. Linux集群服务 LVS

    linux虚拟服务器(LVS)项目在linux操作系统上提供了最常见的负载均衡软件. 集群定义: 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性 ...

  4. 在 Linux 多节点安装配置 Apache Zookeeper 分布式集群

    规划: 三台物理服务器就形成了(法定人数).对于高可用性集群,您可以使用高于3的任何奇数.例如,如果设置5台服务器,则集群可以处理两个故障节点等. 物理服务器需要开启的端口 2888 , 3888 和 ...

  5. Zookeeper分布式集群搭建

    实验条件:3台安装linux的机子,配置好Java环境. 步骤1:下载并分别解包到每台机子的/home/iHge2k目录下,附上下载地址:http://mirrors.cnnic.cn/apache/ ...

  6. ActiveMq+zookeeper+levelDB集群整合配置

    ActiveMq+zookeeper+levelDB集群整合配置 环境:linux系统,jdk1.7  三台linux系统电脑.我这里使用一台window,分别远程3台linux电脑.三台电脑的ip分 ...

  7. Centos7 zookeeper单机/集群安装详解和开机自启

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...

  8. 1-2、LVS之Linux集群系统基础

    Linux Cluster: 为了满足同一目的的需要,将多台主机组织起来解决统一问题的计算机的集合叫集群 Web Arch 虚拟化和云计算 自动化运维工具:ansible, puppet, zabbi ...

  9. 初识ZooKeeper与集群搭建实例

    原文链接:http://www.linuxidc.com/Linux/2015-02/114230.htm zookeeper是什么 Zookeeper,一种分布式应用的协作服务,是Google的Ch ...

随机推荐

  1. 51、如何提取android代码中的字符串为系统资源文件 (I18N)

    工具:android studio 步骤1:找到要转为资源文件的字符串并选中,同时按下option+enter,弹出菜单,我们选中extract string resource 步骤2:在弹窗中输入你 ...

  2. C 语言 习题 1-9

    练习1-9 编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替. #include <stdio.h> int main(int argc, char const *ar ...

  3. Leetcode 526.优美的排列

    优美的排列 假设有从 1 到 N 的 N 个整数,如果从这 N 个数字中成功构造出一个数组,使得数组的第 i 位 (1 <= i <= N) 满足如下两个条件中的一个,我们就称这个数组为一 ...

  4. html编码和解码

    public static string EncodeStr(string str) { str = Regex.Replace(str, @"<html[^>]*?>.* ...

  5. maven学习(十四)——Eclipse中使用Maven插件

    1.导入Maven项目 File→import

  6. spring bean自动注入

    使用 @Repository.@Service.@Controller 和 @Component 将类标识为 Bean Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的 ...

  7. [转]jQuery中attr() 和 val() 的区别

    [转](http://www.codeproject.com/Tips/780652/Difference-between-attr-and-val-in-jQuery)

  8. 【距离GDOI:141天】 滚入数位DP的坑

    作为博客园的第一篇...我都不知道要写什么了 ... 其实今天很没状态,就当吐槽吧... 嗯,被黄神带去写treap+可持久化线段树,然后在可持久化的删除上面跪了两天,真的是一跪不起.我已经连续多久没 ...

  9. [SCOI2007][bzoj1070] 修车 [费用流]

    题面 传送门 思路 我们考虑某个工人修车的从前到后序列如下: ${W_1,W_2,W_3,...,W_n}$ 那么,对于这n辆车的车主而言,他们等候的总时间为: $\sum_{i=1}^{n}W_i\ ...

  10. MyEclipse生成get/set注释

    我的外网链接 http://yezi-0016.iteye.com/blog/2290421