Zookeeper 系列(二)安装配制
Zookeeper 系列(二)安装配制
一、Zookeeper 的搭建方式
Zookeeper 安装方式有三种,单机模式和集群模式以及伪集群模式。
- 单机模式 :Zookeeper 只运行在一台服务器上,适合测试环境;
- 集群模式 :Zookeeper 运行于一个集群上,适合生产环境,这个计算机集群被称为一个 “集合体”(ensemble);
- 伪集群模式 :就是在一台物理机上运行多个 Zookeeper 实例,测试使用。
Zookeeper 通过复制来实现高可用性,只要集合体中半数以上的机器处于可用状态,它就能够保证服务继续。
为什么一定要超过半数呢? 这跟 Zookeeper 的复制策略有关:Zookeeper 确保对 znode 树的每一个修改都会被复制到集合体中超过半数的机器上。
(一) Zookeeper 单机模式搭建
(1) 下载 ZooKeeper :http://mirrors.hust.edu.cn/apache/zookeeper/
(2) 解压
tar -zxvf zookeeper-3.4.5.tar.gz
mv zookeeper-3.4.5 zookeeper
(3) 配置环境变量
vi /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=.:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH
source /etc/profile
(4) 修改 Zookeeper 的配制文件 conf/zoo.cfg
tickTime=2000
dataDir=/usr/local/zk/data
dataLogDir=/usr/local/zk/dataLog
clientPort=2181
(5) 启动 ZooKeeper
zkServer.sh start # 启动
zkServer.sh stop # 停止
zkServer.sh status # 状态
zkCli.sh -server localhost:2181
(二) Zookeeper 集群模式搭建
为了获得可靠地 Zookeeper 服务,用户应该在一个机群上部署 Zookeeper。只要机群上大多数的 Zookeeper 服务启动了,那么总的 Zookeeper 服务将是可用的。集群的配置方式,和单机模式搭建类似,同样需要进行环境变量的配置。在每台机器上 conf/zoo.cf 配置文件的参数设置相同。
Zookeeper 集群模式搭建方案:
| 主机IP | 消息端口 | 通信端口 | myid | data目录 |
|---|---|---|---|---|
| 192.168.1.10 | 2181 | 2888:3888 | 0 | $ZOOKEEPER_HOME/data |
| 192.168.1.11 | 2181 | 2888:3888 | 1 | $ZOOKEEPER_HOME/data |
| 192.168.1.12 | 2181 | 2888:3888 | 2 | $ZOOKEEPER_HOME/data |
(1) 一共三个节点(zk服务器集群规模不小于三个节点),要求服务器之间系统时间保持一致
(2) 修改 Zookeeper 的配制文件 conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2181
# 修改目录
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/log
# 添加集群配置
server.0=192.168.2.101:2888:3888
server.1=192.168.2.102:2888:3888
server.2=192.168.2.103:2888:3888
(3) 添加服务器标识配置 dataDir/myid
# 在 dataDir 目录创建 myid 文件
mkdir data
# 创建文件 myid,Server0 内容为 0,Server1 内容为 1,Server2 内容为 2
vi myid
(三) Zookeeper 伪集群模式搭建
Zookeeper 不但可以在单机上运行单机模式 Zookeeper,而且可以在单机模拟集群模式 Zookeeper 的运行,也就是将不同节点运行在同一台机器。这种搭建方式,比较简便,成本比较低,适合测试和学习,如果你的手头机器不足,就可以在一台机器上部署了 3 个 server。
Zookeeper 伪集群模式搭建方案,主要是注意端口冲突:
| 主机IP | 消息端口 | 通信端口 | myid | data目录 |
|---|---|---|---|---|
| 127.0.0.1 | 2180 | 2880:3880 | 0 | $ZOOKEEPER_HOME/data_0 |
| 127.0.0.1 | 2181 | 2881:3881 | 1 | $ZOOKEEPER_HOME/data_1 |
| 127.0.0.1 | 2182 | 2882:3882 | 2 | $ZOOKEEPER_HOME/data_2 |
(1) 注意事项
在一台机器上部署了 3 个 server,需要注意的是在集群为分布式模式下我们使用的每个配置文档模拟一台机器,也就是说单台机器及上运行多个 Zookeeper 实例。但是,必须保证每个配置文档的各个端口号不能冲突,除了 clientPort 不同之外,dataDir 也不同。另外,还要在 dataDir 所对应的目录中创建 myid 文件来指定对应的 Zookeeper 服务器实例。
- clientPort 端口 :如果在 1 台机器上部署多个 server,那么每台机器都要不同的 clientPort。
- dataDir 和 dataLogDir :dataDir 和 dataLogDir 也需要区分下,将数据文件和日志文件分开存放。
- server.X 和 myid : server.X 这个数字就是对应,data/myid 中的数字。在 3 个 server 的 myid 文件中分别写入了 0,1,2,那么每个server 中的 zoo.cfg 都配 server.0 server.2,server.3就行了。因为在同一台机器上,后面连着的2个端口,3 个 server 都不要一样,否则端口冲突。
下面是我所配置的集群伪分布模式,分别通过 zoo1.cfg、zoo2.cfg、zoo3.cfg 来模拟由三台机器的 Zookeeper 集群:
(2) 代码清单 zook1.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=/usr/local/zookeeper/data_0
# the port at which the clients will connect
clientPort=2180
#the location of the log file
dataLogDir=/usr/local/zookeeper/logs_0
server.0=localhost:2880:3880
server.1=localhost:2881:3881
server.2=localhost:2882:3882
(3) 启动
zkServer.sh start zoo1.sh
zkServer.sh start zoo2.sh
zkServer.sh start zoo3.sh
二、Zookeeper 配置
Zookeeper 的功能特性是通过 Zookeeper 配置文件来进行控制管理的(zoo.cfg)。这样的设计其实有其自身的原因,通过前面对 Zookeeper 的配置可以看出,在对 Zookeeper 集群进行配置的时候,它的配置文档是完全相同的。集群伪分布模式中,有少部分是不同的。这样的配置方式使得在部署Zookeeper 服务的时候非常方便。如果服务器使用不同的配置文件,必须确保不同配置文件中的服务器列表相匹配。
在设置 Zookeeper 配置文档时候,某些参数是可选的,某些是必须的。这些必须参数就构成了 Zookeeper 配置文档的最低配置要求。另外,若要对 Zookeeper 进行更详细的配置,可以参考下面的内容。
2.1 基本配置
下面是在最低配置要求中必须配置的参数:
(1) client :监听客户端连接的端口。
(2) tickTime :基本事件单元,这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔 tickTime 时间就会发送一个心跳;最小的 session 过期时间为 2 倍 tickTime。
(3) dataDir :存储内存中数据库快照的位置,如果不设置参数,更新食物的日志将被存储到默认位置。
应该谨慎的选择日志存放的位置,使用专用的日志存储设备能够大大提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会很大程度上影像系统性能。
2.2 高级配置
下面是高级配置参数中可选配置参数,用户可以使用下面的参数来更好的规定 Zookeeper 的行为:
(1) dataLogdDir
这个操作让管理机器把事务日志写入 dataLogDir 所指定的目录中,而不是 dataDir 所指定的目录。这将允许使用一个专用的日志设备,帮助我们避免日志和快照的竞争。配置如下:
# the directory where the snapshot is stored
dataDir=/usr/local/zk/data
(2) maxClientCnxns
这个操作将限制连接到 Zookeeper 的客户端数量,并限制并发连接的数量,通过 IP 来区分不同的客户端。此配置选项可以阻止某些类别的 Dos 攻击。将他设置为零或忽略不进行设置将会取消对并发连接的限制。
例如,此时我们将 maxClientCnxns 的值设为 1,如下所示:
# set maxClientCnxns
maxClientCnxns=1
启动 Zookeeper 之后,首先用一个客户端连接到 Zookeeper 服务器上。之后如果有第二个客户端尝试对 Zookeeper 进行连接,或者有某些隐式的对客户端的连接操作,将会触发 Zookeeper 的上述配置。
(3) minSessionTimeout 和 maxSessionTimeout
即最小的会话超时和最大的会话超时时间。在默认情况下,minSession=2tickTime;maxSession=20tickTime。
2.3 集群配置
(1) initLimit
此配置表示,允许 Follower(相对于 Leaderer 言的客户端)连接并同步到 Leader 的初始化连接时间,以 tickTime 为单位。当初始化连接时间超过该值,则表示连接失败。
(2) syncLimit
此配置项表示 Leader 与 Follower 之间发送消息时,请求和应答时间长度。如果 Follower 在设置时间内不能与 Leader 通信,那么此 Follower 将会被丢弃。
(3) server.A=B:C:D
- A :其中 A 是一个数字,表示这个是服务器的编号;
- B :是这个服务器的 ip 地址;
- C :Leader 选举的端口;
- D :Zookeeper 服务器之间的通信端口。
(4) myid 和 zoo.cfg
除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。
(5) 自动清理快照(snapshot)和事务日志
从版本 3.4.0 开始, Zookeeper 提供了自动清理快照(snapshot)和事务日志的功能,需要 在zoo.cfg 配置文件中设置。
autopurge.purgeInterval=1
autopurge.snapRetainCount=3
- autopurge.purgeInterval :这个参数指定了持久化日志清理频率,单位是小时,默认是 0,表示不开启自动清理功能。
- autopurge.snapRetainCount :这个参数和上面的参数搭配使用,用于指定需要保留的持久化目志文件数目,默认是保留 3 个。
Zookeeper 系列(二)安装配制的更多相关文章
- 开源一款强大的文件服务组件(QJ_FileCenter)(系列二 安装说明)
系列文章 1. 开源一款强大的文件服务组件(QJ_FileCenter)(系列一) 2. 开源一款强大的文件服务组件(QJ_FileCenter)(系列二 安装说明) 3. 开源一款强大的文件服务组件 ...
- WordPress版微信小程序开发系列(二):安装使用问答
自WordPress版微信小程序发布开源以来,受关注的程度超过我原来的想象.这套程序主要面对的用户是wordpress网站的站长,如果wordpress站想在微信的生态圈得到推广,小程序成为一种重要的 ...
- 服务注册中心之ZooKeeper系列(二) 实现一个简单微服务之间调用的例子
上一篇文章简单介绍了ZooKeeper,讲了分布式中,每个微服务都会部署到多台服务器上,那服务之间的调用是怎么样的呢?如图: 1.集群A中的服务调用者如何发现集群B中的服务提供者呢? 2.集群A中的服 ...
- Zookeeper系列二:分布式架构详解、分布式技术详解、分布式事务
一.分布式架构详解 1.分布式发展历程 1.1 单点集中式 特点:App.DB.FileServer都部署在一台机器上.并且访问请求量较少 1.2 应用服务和数据服务拆分 特点:App.DB.Fi ...
- 阿里云CentOS7系列二 -- 安装Tomcat7的方法
前面讲到了JDK在CentOS7 环境下的安装步骤.这次来分享安装Tomcat7的安装步骤: Tomcat7 安装包: 链接: http://pan.baidu.com/s/1geKwASN 密码: ...
- Zookeeper系列(二)特征及应用场景
zookeeper类似一个分布式的文件系统,每个节点可以有和它自身或它的子节点相关联的数据,此外指向节点的路劲必须使用绝对路径(不能使用相对路劲): Znode 对应目录树中的的一个节点,并拥有一 ...
- 随笔编号-11 阿里云CentOS7系列二 -- 安装Tomcat7的方法
前面讲到了JDK在CentOS7 环境下的安装步骤.这次来分享安装Tomcat7的安装步骤: Tomcat7 安装包: 链接: http://pan.baidu.com/s/1geKwASN 密码: ...
- Open vSwitch系列之二 安装指定版本ovs
在ovs学习过程中,如果自己想要安装一个ovs交换机其实一条简单的命令 apt install openvswitch 就可以了,但是这种方法只能安装低版本的ovs.在特殊情况下需要安装指定版本,例 ...
- ZooKeeper系列(1):安装搭建ZooKeeper环境
ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk ZooKeeper有三种安装模式:单机安装(standalone ...
随机推荐
- python之Web服务器案例
HTTP协议简介 1. 使用谷歌/火狐浏览器分析 在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来.而浏览器和服务器之间的传输协议是HTTP,所以: ...
- django celery 定时任务
可参考上一篇:http://www.cnblogs.com/wumingxiaoyao/p/8515075.html 1. 安装 django-celery-beat pip3 install dja ...
- 免费json API
免费json API http://www.bejson.com/knownjson/webInterface/
- VB6 创建控制台应用程序
' 功能:为VB程序创建一个consolewindow.Private Declare Function AllocConsole Lib "kernel32" () As Lon ...
- DOM对象模型
- json decimal and datetime
python json模块默认不能序列化decimal和datetime数据,可以通过自定义一个序列化的类实现: link: http://www.cnblogs.com/buxizhizhoum/p ...
- CSS中不透明度继承问题的处理
关于CSS中不透明度的设置,除了兼容方面的问题,还有不透明度继承问题,这里只讨论下后者. 那么, 什么时候会发生不透明度继承问题? 当文档结构中有父子嵌套关系的时候,并且父元素有不透明度属性设置时,会 ...
- varnish--vcl
●Varnish Configuration Language - VCL(varnish配置语言-VCL) Varnish有一个很棒的配置系统,大部分其他的系统使用配置指令,让您打 ...
- C++ 0x 使用condition_variable 与 Mutex 同步两个线程
Mutex : 锁 同一时间只允许一个线程访问其代码内容 拟人 : 就是一把锁而已,可以lock unlock, 谁都可以拿到锁,打开门进屋,但进去后,就会把门锁上(lock) 别人想进就得等他出 ...
- JAVA 打印流与转换流
转换流主要有两个 InputStreamReader 和 OutputStreamWriter 1. InputStreamReader 主要是将字节流输入流转换成字符输入流 2. OutputStr ...