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. 云服务的三种形式laas,paas,saas

    “云”其实是互联网的一个隐喻,“云计算”其实就是使用互联网来接入存储或者运行在远程服务器端的应用,数据,或者服务. 云也是分层的 任何一个在互联网上提供其服务的公司都可以叫做云计算公司.其实云计算分几 ...

  2. [转] JAVA从本机获取IP地址

    [From] https://www.cnblogs.com/xiaoBlog2016/p/7076230.html 论述: 此篇博客是在工作的时候,需要获得当前网络下面正确的ip地址,在网上查阅很多 ...

  3. Source Insight 4.0的使用(转)

    原作者地址:https://blog.csdn.net/qq_39660930/article/details/77499455 一.项目管理 1.新建一个项目 快捷键Alt+Shift+N可以打开新 ...

  4. Kafka消费不到数据的特殊情况

    我大约是把kafka消费不到数据的特殊情况都经历了一遍了吧= =. kafka消费不到数据的原因,首先检查配置之类的,如是否设置了group.id,对应的topic是否正确等等,这些不多说. 下面是我 ...

  5. C语言两种方式实现矩阵的转置

    #include"stdio.h" typedef struct{ int i,j; int v; }Triple; typedef struct{ Triple date[]; ...

  6. python 获取子目录下的所有文件的路径

    import os pathss=[] for root, dirs, files in os.walk(tarpath): path = [os.path.join(root, name) for ...

  7. How to Configure Tomcat/JBoss and Apache HTTPD for Load Balancing and Failover

    http://java.dzone.com/articles/how-configure-tomcatjboss-and In this post we will see how to setup a ...

  8. core核心模块

    5. core核心模块 核心模块会通过compiler模块提供的调用compiler的功能, 将用户的输入转为VM直接的输入 编译模块用来编译, 而核心模块用来执行 在core.h文件中 // 不需要 ...

  9. 用 Python 构建 web 应用

    用 Python 构建 web 应用 如果说仅仅要用 Python 构建 web 应用,可以将 socket 连接.HTTP 原始请求和响应格式等涉及网络基础的东西交给现成的库来实现,只需要专注于 w ...

  10. 1.Vue.js的常用指令

      Vue.js介绍 Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得 ...