Zookeeper简介:

Zookeeper是一个分布式协调服务,就是为用户的分布式应用程序提供协调服务的。

A、zookeeper是为别的分布式程序服务的

B、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务)

C、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一名称服务……

D、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能:

  • 管理(存储,读取)用户程序提交的数据;
  • 并为用户程序提供数据节点监听服务;

Zookeeper集群机制

  • Zookeeper集群的角色: 1个leader 和 多个follower

  • 只要集群中有半数以上节点存活,集群就能提供服务,因此集群中机器数量适合选择奇数台,避免leader选举时出现同票数的情况。

Zookeeper选举机制

  1. 服务器1启动,此时只有它一台服务器启动了,它发出去的报没有任何响应,所以它的选举状态一直是LOOKING状态
  2. 服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有历史数据,所以id值较大的服务器2胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是3),所以服务器1,2还是继续保持LOOKING状态.
  3. 服务器3启动,根据前面的理论分析,服务器3成为服务器1,2,3中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的leader.
  4. 服务器4启动,根据前面的分析,理论上服务器4应该是服务器1,2,3,4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了.
  5. 服务器5启动,同4一样,当小弟.

综上可知:

  • 先后启动集群中3台机器,则机器2为leader
  • 先后启动集群中7台机器,则机器4为leader

Zookeeper集群搭建

1、前期准备

  • 3台虚拟机(Linux-----CentOs6.3)

    mini1----192.168.25.13
    
    mini2----192.168.25.14
    
    mini3----192.168.25.15
  • 三台虚拟机上分别都装好jdk

2、上传Zookeeper安装包到mini1上

3、解压安装包,并将解压后的目录改名为zk放到/usr/local/目录下

tar -zxvf zookeeper-3.4.6.tar.gz
mv zookeeper-3.4.6 /usr/local/zk

4、进入zk目录下的conf目录中查看相关配置文件

cd /usr/local/zk/conf

5、将zoo_sample.cfg拷贝一份并重命名为zoo.cfg

cp zoo_sample.cfg zoo.cfg

6、 修改配置文件zoo.cfg(基本保持默认,修改图中两处配置即可)

vim zoo.cfg

  • tickTime:基本事件单元,这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳

  • initLimit:此配置表示,允许follower连接并同步到Leader的初始化连接时间,以tickTime为单位。当初始化连接时间超过该值,则表示连接失败。

  • syncLimit:此配置项表示Leader与Follower之间发送消息时,请求和应答时间长度。如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。

  • dataDir:数据存放的位置

  • dataLogdDir:日志信息存放的位置

  • server.a=b:c:d

     a:集群中此台服务器的编号
    
     B:此台服务器的ip
    
     C:Zookeeper服务器之间的通信端口
    
     D:Leader选举的端口

7、在zk目录下创建data目录

mkdir /usr/local/zk/data

8、在data目录中创建myid文件,并写入此台服务器的编号(在zoo.cfg配置文件里填写过)

echo 1 > myid

9、配置环境变量

vim /etc/profile
export ZOOKEEPER_HOME=/usr/local/zk
export PATH=.:$HADOOP_HOME/bin:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH

10、将zk目录分别发送给mini2和mini3两台机器

scp -r /usr/local/zk/ 192.168.25.14:/usr/local/
scp -r /usr/local/zk/ 192.168.25.15:/usr/local/

11、将环境变量文件分别发送给mini2和mini3两台机器

scp /etc/profile 192.168.25.14:/etc/
scp /etc/profile 192.168.25.15:/etc/

12、到mini2机器的/usr/local/目录下可以看到刚传过来的zk目录

13、到mini2的zk目录下的data目录将myid文件内容改为mini2这台机器的编号(mini3做同样操作)

cd /usr/local/zk/data/
echo 2 > myid(mini3的编号为3)

14、分别启动三台机器上的Zookeeper,并查看状态(启动前重新加载环境变量)

source /etc/profile
zkServer.sh start
zkServer.sh status

自此Zookeeper集群搭建结束,我们可以看到mini3是集群中的leader,其他两台是follower,如果你的启动顺序是按顺序启动mini1,mini2,mini3则mini2会是集群中的leader

集群批量启动,关闭

批量启动Zookeeper集群
#!/bin/sh for i in 192.168.25.13 192.168.25.14 192.168.25.15
do
ssh $i "source /etc/profile;zkServer.sh start"
done 批量停止Zookeeper
#!/bin/sh for i in 192.168.25.13 192.168.25.14 192.168.25.15
do
ssh $i "source /etc/profile;zkServer.sh stop"
done

更多推荐:


【图文详解】Zookeeper集群搭建(CentOs6.3)的更多相关文章

  1. 【zookeeper】 zookeeper 集群搭建

    集群搭建环境: 发行版:CentOS-6.6 64bit 内核:2.6.32-504.el6.x86_64 CPU:intel-i7 3.6G 内存:2G 集群搭建步骤: 1. 确保机器安装了jdk ...

  2. kafka学习(二)-zookeeper集群搭建

    zookeeper概念 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名 服务等.Zookeeper是h ...

  3. Kafka学习之(五)搭建kafka集群之Zookeeper集群搭建

    Zookeeper是一种在分布式系统中被广泛用来作为:分布式状态管理.分布式协调管理.分布式配置管理.和分布式锁服务的集群.kafka增加和减少服务器都会在Zookeeper节点上触发相应的事件kaf ...

  4. 分布式架构中一致性解决方案——Zookeeper集群搭建

    当我们的项目在不知不觉中做大了之后,各种问题就出来了,真jb头疼,比如性能,业务系统的并行计算的一致性协调问题,比如分布式架构的事务问题, 我们需要多台机器共同commit事务,经典的案例当然是银行转 ...

  5. 分布式协调服务Zookeeper集群搭建

    分布式协调服务Zookeeper集群搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装jdk环境 1>.操作环境 [root@node101.yinzhengjie ...

  6. zookeeper集群搭建及Leader选举算法源码解析

    第一章.zookeeper概述 一.zookeeper 简介 zookeeper 是一个开源的分布式应用程序协调服务器,是 Hadoop 的重要组件. zooKeeper 是一个分布式的,开放源码的分 ...

  7. Zookeeper(二) zookeeper集群搭建 与使用

    一.zookeeper集群搭建 鉴于 zookeeper 本身的特点,服务器集群的节点数推荐设置为奇数台.我这里我规划为三台, 为别为 hadoop01,hadoop02,hadoop03    1. ...

  8. ZooKeeper集群搭建过程

    ZooKeeper集群搭建过程 提纲 1.ZooKeeper简介 2.ZooKeeper的下载和安装 3.部署3个节点的ZK伪分布式集群 3.1.解压ZooKeeper安装包 3.2.为每个节点建立d ...

  9. zookeeper集群搭建及常用场景实现

    本文完整源码地址 基于zookeeper的常用用法.分布式锁.分布式队列及leader选举实现 https://github.com/killianxu/zookeeper_example zooke ...

随机推荐

  1. python3.6 request模块和ddt模块的安装

    1.1用cmd命令进到python的安装目录的Scripts文件夹 1.2.然后输入 pip install requests,出现以下提示,说明安装成功 2.安装ddt步骤一样,只是把pip ins ...

  2. vue组件中camelCased (驼峰式) 命名与 kebab-case(短横线命名)

    HTML 特性是不区分大小写的.所以,当使用的不是字符串模版,camelCased (驼峰式) 命名的 prop 需要转换为相对应的 kebab-case (短横线隔开式) 命名: 如果你使用字符串模 ...

  3. 页面跳转问题-button 确定提交按钮

    form和ajax不可一起用了,button标签默认是用的form表单,所以导致跳转有问题,form不能和ajax一起用的,切记

  4. 微博关系服务与Redis的故事

    http://www.infoq.com/cn/articles/weibo-relation-service-with-redis?utm_source=articles_about_Redis&a ...

  5. net.sf.json.JSONException: There is a cycle in the hierarchy! 转json死循环问题解决

    解决上述问题遵照两个原则就可以: 1.页面不需要展示关联数据时 解决:将关联对象属性排除掉 2.页面需要展示关联数据时 解决:将关联对象改为立即加载,并且将关联对象中的属性排除

  6. lua输入函数名字符串执行函数

    str = "testA()"loadstring(str)() function testA() ------end 使用loadstring即可执行后面在xlua用了下发现不能 ...

  7. JavaScript基础(String)

    字符串 String 1.连接字符串 数字与字符串相加,为字符串 9+"9"; 2.字符串的长度 "abc".length; 3.从字符串中获取单个字符(索引下 ...

  8. goto语句和标签

    goto 语句用于将执行流更改到标签处,虽然t-sql和pl/sql都提供了该语句,但是作为编程而言,我们不推荐使用此编程技术.要编写一个标签,应当在标识符后面加一个冒号.列如,下面示例使用goto语 ...

  9. java使用poi.3.10读取excel 2003 (xls格式)

    最近在做一个Excel导入数据库的案例,整理文档出来供大家参考. 1.下载 最新的 poi http://poi.apache.org/download.html    2.解压 把相关jar包引进项 ...

  10. 如何给swing加上alt+x和ctrl+x快捷键

    1.给菜单栏上的菜单alt+x快捷键非常简单: private JMenu helpInfo = new JMenu("帮助"); helpInfo.setMnemonic(Key ...