【图文详解】Zookeeper集群搭建(CentOs6.3)
Zookeeper简介:
Zookeeper是一个分布式协调服务,就是为用户的分布式应用程序提供协调服务的。
A、zookeeper是为别的分布式程序服务的
B、Zookeeper本身就是一个分布式程序(只要有半数以上节点存活,zk就能正常服务)
C、Zookeeper所提供的服务涵盖:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁、统一名称服务……
D、虽然说可以提供各种服务,但是zookeeper在底层其实只提供了两个功能:
- 管理(存储,读取)用户程序提交的数据;
- 并为用户程序提供数据节点监听服务;
Zookeeper集群机制
Zookeeper集群的角色: 1个leader 和 多个follower
只要集群中有半数以上节点存活,集群就能提供服务,因此集群中机器数量适合选择奇数台,避免leader选举时出现同票数的情况。
Zookeeper选举机制
- 服务器1启动,此时只有它一台服务器启动了,它发出去的报没有任何响应,所以它的选举状态一直是LOOKING状态
- 服务器2启动,它与最开始启动的服务器1进行通信,互相交换自己的选举结果,由于两者都没有历史数据,所以id值较大的服务器2胜出,但是由于没有达到超过半数以上的服务器都同意选举它(这个例子中的半数以上是3),所以服务器1,2还是继续保持LOOKING状态.
- 服务器3启动,根据前面的理论分析,服务器3成为服务器1,2,3中的老大,而与上面不同的是,此时有三台服务器选举了它,所以它成为了这次选举的leader.
- 服务器4启动,根据前面的分析,理论上服务器4应该是服务器1,2,3,4中最大的,但是由于前面已经有半数以上的服务器选举了服务器3,所以它只能接收当小弟的命了.
- 服务器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
更多推荐:
- http://www.cnblogs.com/52mm/p/p7.html
- http://www.cnblogs.com/sunddenly/p/4018459.html
- https://www.cnblogs.com/ASPNET2008/p/6421571.html
【图文详解】Zookeeper集群搭建(CentOs6.3)的更多相关文章
- 【zookeeper】 zookeeper 集群搭建
集群搭建环境: 发行版:CentOS-6.6 64bit 内核:2.6.32-504.el6.x86_64 CPU:intel-i7 3.6G 内存:2G 集群搭建步骤: 1. 确保机器安装了jdk ...
- kafka学习(二)-zookeeper集群搭建
zookeeper概念 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名 服务等.Zookeeper是h ...
- Kafka学习之(五)搭建kafka集群之Zookeeper集群搭建
Zookeeper是一种在分布式系统中被广泛用来作为:分布式状态管理.分布式协调管理.分布式配置管理.和分布式锁服务的集群.kafka增加和减少服务器都会在Zookeeper节点上触发相应的事件kaf ...
- 分布式架构中一致性解决方案——Zookeeper集群搭建
当我们的项目在不知不觉中做大了之后,各种问题就出来了,真jb头疼,比如性能,业务系统的并行计算的一致性协调问题,比如分布式架构的事务问题, 我们需要多台机器共同commit事务,经典的案例当然是银行转 ...
- 分布式协调服务Zookeeper集群搭建
分布式协调服务Zookeeper集群搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装jdk环境 1>.操作环境 [root@node101.yinzhengjie ...
- zookeeper集群搭建及Leader选举算法源码解析
第一章.zookeeper概述 一.zookeeper 简介 zookeeper 是一个开源的分布式应用程序协调服务器,是 Hadoop 的重要组件. zooKeeper 是一个分布式的,开放源码的分 ...
- Zookeeper(二) zookeeper集群搭建 与使用
一.zookeeper集群搭建 鉴于 zookeeper 本身的特点,服务器集群的节点数推荐设置为奇数台.我这里我规划为三台, 为别为 hadoop01,hadoop02,hadoop03 1. ...
- ZooKeeper集群搭建过程
ZooKeeper集群搭建过程 提纲 1.ZooKeeper简介 2.ZooKeeper的下载和安装 3.部署3个节点的ZK伪分布式集群 3.1.解压ZooKeeper安装包 3.2.为每个节点建立d ...
- zookeeper集群搭建及常用场景实现
本文完整源码地址 基于zookeeper的常用用法.分布式锁.分布式队列及leader选举实现 https://github.com/killianxu/zookeeper_example zooke ...
随机推荐
- js面向切面编程
Function.prototype.before=function(func){ var _self=this; return function(){ if(func.apply(this,arg ...
- jmeter+ant+jenkins生产的报告乱码
jmeter+ant+jenkins生产的报告乱码 问题:生产报告会乱码的问题,一般是有编码格式引起的.我遇到的问题是,jmeter需要读取csv的数据作为参数.但是我们并不知道csv保存是什么编码格 ...
- 第三次 Scrum Meeting
第三次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/4/7 20:00 60min 新主楼G411 附Github仓库:WEDO 例会照片 工作情况总结(4.5-4. ...
- TT 安装之 Windwos
WINDOWS在 控制面板-〉管理工具-〉本地安全策略-〉本地策略-〉用户权限分配-〉锁定内存页-〉添加用户或组-〉高级查找 然后确定 然后安装 (WINDOWS在 控制面板-〉管理工具-〉ODBC工 ...
- java多线程-Thread
大纲 sleep yield join setDaemon sleep: public static native void sleep(long millis) throws Interrupted ...
- ajax请求方法及参数说明
$.ajax()请求示例 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- 《The Python Standard Library》——http模块阅读笔记1
官方文档:https://docs.python.org/3.5/library/http.html 偷个懒,截图如下: 即,http客户端编程一般用urllib.request库(主要用于“在这复杂 ...
- C语言中的输入方式
在c语言中,有gets().scanf().getchar()等输入方式,但是不同的方式处理的方式不同. scanf()读取时遇见tab.space.enter时会结束读取,不会舍弃最后的回车符(即回 ...
- Lakeshore
用来做 html5 特效,Egret游戏引擎 为什么用Egret开发的游戏在某些Android设备上特别卡? { 在 Android 早期版本( 4.4 之前) ,Android WebView 并不 ...
- Apache Beam的目标
不多说,直接上干货! Apache Beam的目标 统一(UNIFIED) 基于单一的编程模型,能够实现批处理(Batch processing).流处理(Streaming Processing), ...