今天是平安夜,先祝大家平安夜快乐。这篇文章我们来谈谈 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. windows下,cmd 运行 python 脚本,选中文字就停止运行了【已解决】

    参考资料: https://jingyan.baidu.com/article/ce09321bb95dda2bff858f26.html 问题原因: cmd 里面,快速编辑模式会暂停程序 解决步骤: ...

  2. leetcode 【 Set Matrix Zeroes 】python 实现

    题目: Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. cl ...

  3. leetcode 【 Plus One 】python 实现

    题目: Given a non-negative number represented as an array of digits, plus one to the number. The digit ...

  4. Python 字节与字符串的转换

    html = urlopen("http://www.cnblogs.com/ryanzheng/p/9665224.html") bsObj = BeautifulSoup(ht ...

  5. ROM+VGA 图片显示

    内容 1.将一幅图片制成mif文件,初始化rom,图片像素为 120 * 60 2.驱动VGA,将图片显示在屏幕上 1.VGA 时序 下面是我的笔记截图,感觉更好理解. 2.640*480 60hz ...

  6. c++树及树与二叉树的转换

    此算法中的树结构为“左儿子有兄弟链接结构” 在这样的一个二叉树中,一个节点的左分支是他的大儿子节点,右分支为他的大兄弟节点. 这里讲的树有递归前根,中根,后根遍历,插入节点,插入兄弟节点,查找结点,释 ...

  7. Unity 3D 的四种坐标系

    1, World Space(世界坐标): 我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的.transform.position可以获得该位置坐标. 2, Screen Spa ...

  8. Could not connect to Redis at 127.0.0.1:6379: Connection refused

    启动redis:  redis-server ../redis.conf redis启动成功后 执行命令行redis-cli报:Could not connect to Redis at 127.0. ...

  9. 【bzoj2096】[Poi2010]Pilots 双指针法+STL-set

    题目描述 Tz又耍畸形了!!他要当飞行员,他拿到了一个飞行员测试难度序列,他设定了一个难度差的最大值,在序列中他想找到一个最长的子串,任意两个难度差不会超过他设定的最大值.耍畸形一个人是不行的,于是他 ...

  10. libcmt.lib和msvcrt.lib冲突,原因和解决方法

    libcmt.lib和msvcrt.lib冲突,原因和解决方法 https://blog.csdn.net/longlijun/article/details/7331093 libcmt.lib是w ...