zookeeper集群搭建

1、前言

Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它的作用主要是用来维护和监控你存储的数据的状态变化。通过监控这些数据状态的变化,从而可以达到基于数据的集群管理。

2、准备

Zookeeper本身是由Java语言开发的一个相对独立的基础分布式组件,因此,Zookeeper的安装除了需要安装JVM外,不再需要依赖其它环境。

  • 系统:Centos7.0(3台)
  • IP地址:10.3.0.79、10.3.0.82、10.3.0.83
  • 软件:zookeeper 3.5.6
  • 说明:在Zookeeper集群中,若超过半数以上服务节点不可用,才会造成整个服务不可用,所以其集群节点数一般都是至少3个节点以上的奇数个。
2.1、下载地址

下载链接:http://archive.apache.org/dist/zookeeper/

三、搭建

3.1 下载并解压到自己目录下
# 下载:
wget http://archive.apache.org/dist/zookeeper/stable/zookeeper-5.5.6.tar.gz
#解压
tar -zxvf zookeeper-5.5.6.tar.gz
3.2、创建必要目录与文件

Zookeeper集群中,每一个节点都需创建data目录、dataLog目录以及myid文件:
在这里插入图片描述

  • 注意: myid文件需创建在data目录下,其值为后续zoo.cfg中配置的第几号服务器。
3.3、配置zoo.cfg

在Zookeeper解压包下的conf目录下,有一个示例配置文件zoo_sample.cfg,我们可以复制一份,重命名为zoo.cfg,并在zoo.cfg文件中添加我们集群的相关配置信息。

[root@yanrong zookeeper-3.4.10]$ cd conf/
[root@yanrong conf]$ mv zoo_sample.cfg zoo.cfg
[root@yanrong conf]$ vi zoo.cfg 

在这里插入图片描述

3.3.1 基本配置
  • tickTime
    心跳基本时间单位,毫秒级,ZK基本上所有的时间都是这个时间的整数倍。

  • initLimit
    tickTime的个数,表示在leader选举结束后,followers与leader同步需要的时间,如果followers比较多或者说leader的数据灰常多时,同步时间相应可能会增加,那么这个值也需要相应增加。当然,这个值也是follower和observer在开始同步leader的数据时的最大等待时间(setSoTimeout)

  • syncLimit
    tickTime的个数,这时间容易和上面的时间混淆,它也表示follower和observer与leader交互时的最大等待时间,只不过是在与leader同步完毕之后,进入正常请求转发或ping等消息交互时的超时时间。

  • dataDir
    内存数据库快照存放地址,如果没有指定事务日志存放地址(dataLogDir),默认也是存放在这个路径下,建议两个地址分开存放到不同的设备上。

  • clientPort
    配置ZK监听客户端连接的端口
    在配置文件末尾添加
    在这里插入图片描述

server.serverid=host:tickpot:electionport

server:固定写法
serverid:每个服务器的指定ID(必须处于1-255之间,必须每一台机器不能重复)
host:主机名
tickpot:心跳通信端口
electionport:选举端口

3.4、高级配置
  • dataLogDir
    将事务日志存储在该路径下,比较重要,这个日志存储的设备效率会影响ZK的写吞吐量。

  • globalOutstandingLimit
    (Java system property: zookeeper.globalOutstandingLimit)默认值是1000,限定了所有连接到服务器上但是还没有返回响应的请求个数(所有客户端请求的总数,不是连接总数),这个参数是针对单台服务器而言,设定太大可能会导致内存溢出。

  • preAllocSize
    (Java system property: zookeeper.preAllocSize)默认值64M,以KB为单位,预先分配额定空间用于后续transactionlog 写入,每当剩余空间小于4K时,就会又分配64M,如此循环。如果SNAP做得比较频繁(snapCount比较小的时候),那么请减少这个值。

  • snapCount
    (Java system property: zookeeper.snapCount)默认值100,000,当transaction每达到snapCount/2+rand.nextInt(snapCount/2)时,就做一次SNAPSHOT,默认情况下是50,000~100,000条transactionlog就会做一次,之所以用随机数是为了避免所有服务器可能在同一时间做snapshot.
    traceFile (Java system property: requestTraceFile)

  • maxClientCnxns
    默认值是10,一个客户端能够连接到同一个服务器上的最大连接数,根据IP来区分。如果设置为0,表示没有任何限制。设置该值一方面是为了防止DoS攻击。

  • clientPortAddress
    与clientPort匹配,表示某个IP地址,如果服务器有多个网络接口(多个IP地址),如果没有设置这个属性,则clientPort会绑定到所有IP地址上,否则只绑定到该设置的IP地址上。

  • minSessionTimeout
    最小的session time时间,默认值是2个tick time,客户端设置的session time 如果小于这个值,则会被强制协调为这个最小值。

  • maxSessionTimeout
    最大的session time 时间,默认值是20个tick time. ,客户端设置的session time 如果大于这个值,则会被强制协调为这个最大值。

3.5、集群配置选项
  • electionAlg
    领导选举算法,默认是3(fast leader election,基于TCP),0表示leader选举算法(基于UDP),1表示非授权快速选举算法(基于UDP),2表示授权快速选举算法(基于UDP),目前1和2算法都没有应用,不建议使用,0算法未来也可能会被干掉,只保留3(fast leader election)算法,因此最好直接使用默认就好。

  • initLimit
    tickTime的个数,表示在leader选举结束后,followers与leader同步需要的时间,如果followers比较多或者说leader的数据灰常多时,同步时间相应可能会增加,那么这个值也需要相应增加。当然,这个值也是follower和observer在开始同步leader的数据时的最大等待时间(setSoTimeout)

  • syncLimit
    tickTime的个数,这时间容易和上面的时间混淆,它也表示follower和observer与leader交互时的最大等待时间,只不过是在与leader同步完毕之后,进入正常请求转发或ping等消息交互时的超时时间。

  • leaderServes
    (Java system property: zookeeper.leaderServes) 如果该值不是no,则表示该服务器作为leader时是需要接受客户端连接的。为了获得更高吞吐量,当服务器数三台以上时一般建议设置为no。

  • cnxTimeout
    (Java system property: zookeeper.cnxTimeout) 默认值是5000,单位ms 表示leaderelection时打开连接的超时时间,只用在算法3中。

3.6、将配置文件分发到集群其他机器中
[hadoop@hadoop1 apps]$ scp -r zookeeper-5.5.6/ home:$PWD
[hadoop@hadoop1 apps]$ scp -r zookeeper-5.5.6/ home:$PWD

注意: 然后是最重要的步骤,一定不能忘了。 去你的各个 ZooKeeper 服务器节点,新建目录 dataDir=/home/yanrong/data/zkdata,这个 目录就是你在 zoo.cfg 中配置的 dataDir 的目录,建好之后,在里面新建一个文件,文件 名叫 myid,里面存放的内容就是服务器的 id,就是 server.1=10.3.0.79:2888:3888 当中的 id, 就是 1,那么对应的每个服务器节点都应该做类似的操作 拿服务器 10.3.0.79举例:

[root@yanrong~]$ mkdir /home/hadoop/data/zkdata
[root@yanrong ~]$ cd data/zkdata/
[root@yanrong zkdata]$ echo 1 > myid
3.7、配置环境变量
[root@yanrong ~]$ vi .bashrc 
#Zookeeper
export ZOOKEEPER_HOME=/home/hadoop/apps/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin

在这里插入图片描述
保存退出:

[root@yanropng ~]$ source .bash
3.8、启动zookeeper是否安装成功
  • 启动:zkServer.sh start
  • 停止:zkServer.sh stop
  • 查看状态:zkServer.sh status
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值