Zookeeper 系列(二)安装配制

一、Zookeeper 的搭建方式

Zookeeper 安装方式有三种,单机模式和集群模式以及伪集群模式。

  • 单机模式 :Zookeeper 只运行在一台服务器上,适合测试环境;
  • 集群模式 :Zookeeper 运行于一个集群上,适合生产环境,这个计算机集群被称为一个 “集合体”(ensemble);
  • 伪集群模式 :就是在一台物理机上运行多个 Zookeeper 实例,测试使用。

Zookeeper 通过复制来实现高可用性,只要集合体中半数以上的机器处于可用状态,它就能够保证服务继续。

为什么一定要超过半数呢? 这跟 Zookeeper 的复制策略有关:Zookeeper 确保对 znode 树的每一个修改都会被复制到集合体中超过半数的机器上。

(一) Zookeeper 单机模式搭建

(1) 下载 ZooKeeperhttp://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 系列(二)安装配制的更多相关文章

  1. 开源一款强大的文件服务组件(QJ_FileCenter)(系列二 安装说明)

    系列文章 1. 开源一款强大的文件服务组件(QJ_FileCenter)(系列一) 2. 开源一款强大的文件服务组件(QJ_FileCenter)(系列二 安装说明) 3. 开源一款强大的文件服务组件 ...

  2. WordPress版微信小程序开发系列(二):安装使用问答

    自WordPress版微信小程序发布开源以来,受关注的程度超过我原来的想象.这套程序主要面对的用户是wordpress网站的站长,如果wordpress站想在微信的生态圈得到推广,小程序成为一种重要的 ...

  3. 服务注册中心之ZooKeeper系列(二) 实现一个简单微服务之间调用的例子

    上一篇文章简单介绍了ZooKeeper,讲了分布式中,每个微服务都会部署到多台服务器上,那服务之间的调用是怎么样的呢?如图: 1.集群A中的服务调用者如何发现集群B中的服务提供者呢? 2.集群A中的服 ...

  4. Zookeeper系列二:分布式架构详解、分布式技术详解、分布式事务

    一.分布式架构详解 1.分布式发展历程 1.1 单点集中式 特点:App.DB.FileServer都部署在一台机器上.并且访问请求量较少 1.2  应用服务和数据服务拆分  特点:App.DB.Fi ...

  5. 阿里云CentOS7系列二 -- 安装Tomcat7的方法

    前面讲到了JDK在CentOS7 环境下的安装步骤.这次来分享安装Tomcat7的安装步骤: Tomcat7 安装包: 链接: http://pan.baidu.com/s/1geKwASN 密码: ...

  6. Zookeeper系列(二)特征及应用场景

    zookeeper类似一个分布式的文件系统,每个节点可以有和它自身或它的子节点相关联的数据,此外指向节点的路劲必须使用绝对路径(不能使用相对路劲):   Znode 对应目录树中的的一个节点,并拥有一 ...

  7. 随笔编号-11 阿里云CentOS7系列二 -- 安装Tomcat7的方法

    前面讲到了JDK在CentOS7 环境下的安装步骤.这次来分享安装Tomcat7的安装步骤: Tomcat7 安装包: 链接: http://pan.baidu.com/s/1geKwASN 密码: ...

  8. Open vSwitch系列之二 安装指定版本ovs

    在ovs学习过程中,如果自己想要安装一个ovs交换机其实一条简单的命令 apt  install openvswitch 就可以了,但是这种方法只能安装低版本的ovs.在特殊情况下需要安装指定版本,例 ...

  9. ZooKeeper系列(1):安装搭建ZooKeeper环境

    ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk ZooKeeper有三种安装模式:单机安装(standalone ...

随机推荐

  1. python应用之爬虫实战2 请求库与解析库

    知识内容: 1.requests库 2.selenium库 3.BeautifulSoup4库 4.re正则解析库 5.lxml库 参考: http://www.cnblogs.com/wupeiqi ...

  2. cplex-Java-样例代码解析

    import ilog.cplex.IloCplex; import ilog.concert.*; /** * * * * 最大化 x1 + 2x2 + 3x3</br> * 约束 &l ...

  3. (10/24) 图片跳坑大战--处理html中的图片

    补充,在前面的服务启动执行命令中,我们在package.json中的配置信息为: "scripts": { "server": "webpack-de ...

  4. win10 + Ubuntu 双系统,重装后的引导修复,时间调整和启动项调整

    ▶ 原先为 win10 + Ubuntu 双系统,使用 grub2 作引导,在重装了 win10 (大作死升到了1803)后系统重写了引导,启动项里找不到 Ubuntu,需要修复. ● 参考[http ...

  5. JAVA Spring JdbcTemplate ( 以 SQLSERVER 为例 ) 的简单使用

    < 1 > 配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&q ...

  6. Firefox内存占用过高解决方法

    刚开始使用firefox火狐浏览器的时候,你会发现firefox占用内存大,CPU占用率高,打开网页停顿等问题,其实这些是因为firefox没有进行优化,默认设置是标准的设置的原因,解决方法如下: 一 ...

  7. Spring Boot实践——Mybatis分页插件PageHelper的使用

    出自:https://blog.csdn.net/csdn_huzeliang/article/details/79350425 在springboot中使用PageHelper插件有两种较为相似的方 ...

  8. CAAnimation临时取消动画,永久取消动画

    //临时取消动画 [CATransaction begin]; [CATransaction setDisableActions:YES]; mMyLayer.strokeEnd = 0; [CATr ...

  9. 解决IE下载 apk/ipa 变成zip:Android 手机应用程序文件下载服务器 配置解决方法

    解决IE apk/ipa变成zip:Android 手机应用程序文件下载服务器 配置解决方法 APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Da ...

  10. 关于str.split(",")中间 什么时候该加\\转义

    java 分割符,对于某些符号的分割符进行切割的时候需要加转义字符,我贴上例子 1. package test1; public class split { public static void ma ...