zookeeper搭建

搭建步骤:

安装jdk1.8,设置好环境变量

实验环境:至少准备三台虚拟机

     192.168.182.100

192.168.182.101

192.168.182.102

下载zookeeper:http://mirrors.hust.edu.cn/apache/zookeeper/

上传服务器,解压到指定目录

vim /etc/profile

添加:

# zookeeper
export ZK_HOME=/usr/local/zookeeper-3.4.11
export PATH=$ZK_HOME/bin:$PATH
#可以直接使用zookeeper脚本
cd /usr/local/zookeeper-3.4.10/conf/
mv zoo_sample.cfg zoo.cfg
vim zoo.cfg
修改与添加:

dataDir=/zookeeper/data

#指定数据目录位置

server.0=192.168.182.100:2888:3888

server.1=192.168.182.101:2888:3888

server.2=192.168.182.102:2888:3888

#server.X=A:B:C

#X-代表服务器编号,也就是myid

#A-代表ip

#B-代表server系统之间通讯端口

#C-代表选举leader通讯用的

mkdir -p /zookeeper/data

#创建数据目录,配置文件指定

cd /zookeeper/data/

vim myid

添加:

0

#对应配置文件server.x中的x

source /etc/profile
zkServer.sh start
zkServer.sh status
zkServer.sh start-foreground
#查看启动过程

其余虚拟机同样设置,除myid内容不同

ZooKeeper增加Observer部署模式提高性能

添加一台虚拟机:192.168.182.103

安装zookeeper和jdk

cd /usr/local/zookeeper-3.4.10/conf/
mv zoo_sample.cfg zoo.cfg
vim zoo.cfg

修改和添加:

dataDir=/zookeeper/data

#数据目录位置

peerType=observer

server.0=192.168.182.100:2888:3888

server.1=192.168.182.101:2888:3888

server.2=192.168.182.102:2888:3888

server.3=192.168.182.103:2888:3888:observer

#其他zookeeper服务器也需要添加这一条

mkdir -p /zookeeper/data

cd /zookeeper/data/

vim myid

添加:

3

source /etc/profile
zkServer.sh start

zookeeper客户端操作命令

在服务端运行本机客户端,使用如下命令:zkCli.sh连接服务端成功

若连接不同的主机,可使用如下命令:zkCli.sh -server ip:port

可以使用帮助命令help来查看客户端的操作

创建节点

  使用create命令,可以创建一个Zookeeper节点, 如

  create [-s] [-e] path data acl

  其中,-s或-e分别指定节点特性,顺序或临时节点,若不指定,则表示持久节点;acl用来进行权限控制。

创建顺序节点

  使用 create -s /zk-test 123 命令创建zk-test顺序节点,可以看到创建的zk-test节点后面添加了一串数字以示区别。

创建临时节点

  使用 create -e /zk-temp 123 命令创建zk-temp临时节点,临时节点在客户端会话结束后,就会自动删除,下面使用quit命令退出客户端,再次使用客户端连接服务端,并使用ls / 命令查看根目录下的节点,可以看到根目录下已经不存在zk-temp临时节点了。

创建永久节点

  使用 create /zk-permanent 123 命令创建zk-permanent永久节点,可以看到永久节点不同于顺序节点,不会自动在后面添加一串数字。

读取节点

  与读取相关的命令有ls 命令和get 命令,ls命令可以列出Zookeeper指定节点下的所有子节点,只能查看指定节点下的第一级的所有子节点;get命令可以获取Zookeeper指定节点的数据内容和属性信息。其用法分别如下

  ls path [watch]

  get path [watch]

  ls2 path [watch]

更新节点

  使用set命令,可以更新指定节点的数据内容,用法如下

  set path data [version]

  其中,data就是要更新的新内容,version表示数据版本,如将/zk-permanent节点的数据更新为456,可以使用如下命令:set /zk-permanent 456,现在dataVersion已经变为1了,表示进行了更新。

删除节点

  使用delete命令可以删除Zookeeper上的指定节点,用法如下

  delete path [version]

  其中version也是表示数据版本,使用delete /zk-permanent 命令即可删除/zk-permanent节点

可以看到,已经成功删除/zk-permanent节点。值得注意的是,若删除节点存在子节点,那么无法删除该节点,必须先删除子节点,再删除父节点。

zookeeper原理

Zookeeper是一个分布式协调框架,有不错的性能,也经过许多公司的验证,所以在很多场景都有使用。大家一般用Zookeeper来实现服务发现(类似DNS),配置管理,分布式锁,leader选举等。在这些场景中,Zookeeper成为了一个被依赖的核心组件,Zookeeper的稳定性是需要特别关注的。
  那么在打算运维一套Zookeeper集群之前,我们先了解一些Zookeeper的基本原理。
  集群里分三种角色: Leader, Follower和Observer。Leader和Follower参与投票,Observer只会『听』投票的结果,不参与投票。
  投票集群里的节点数要求是奇数
  一个集群容忍挂掉的节点数的等式为 N = 2F + 1,N为投票集群节点数,F为能同时容忍失败节点数。比如一个三节点集群,可以挂掉一个节点,5节点集群可以挂掉两个...
  一个写操作需要半数以上的节点ack,所以集群节点数越多,整个集群可以抗挂点的节点数越多(越可靠),但是吞吐量越差。
  Zookeeper里所有节点以及节点的数据都会放在内存里,形成一棵树的数据结构。并且定时的dump snapshot到磁盘。
  Zookeeper的Client与Zookeeper之间维持的是长连接,并且保持心跳,Client会与Zookeeper之间协商出一个Session超时时间出来(其实就是Zookeeper Server里配置了最小值,最大值,如果client的值在这两个值之间则采用client的,小于最小值就是最小值,大于最大值就用最大值),如果在Session超时时间内没有收到心跳,则该Session过期。
  Client可以watch Zookeeper那个树形数据结构里的某个节点或数据,当有变化的时候会得到通知。

zookeeper配置文件详解

配置conf/zoo.conf文件 

tickTime=2000

dataDir=/usr/zdatadir

dataLogDir=/usr/zlogdir

clientPort=2181

initLimit=5

syncLimit=2

server.1=cloud:2888:3888

server.2=cloud02:2888:3888

server.3=cloud03:2888:3888

server.4=cloud04:2888:3888

server.5=cloud05:2888:3888

tickTime :基本事件单元,以毫秒为单位。它用来控制心跳和超时,默认情况下最小的会话超时时间为两倍的 tickTime。 
dataDir是存放内存数据库快照的位置; 
dataLogDir :是事务日志目录; 
clientPort是client连接的端口。 
其中server.X代表组成整个服务的机器,当服务启动时,会在数据目录下查找这个文件myid,这个文件中存有服务器的号码。 
initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过5个心跳的时间(也就是 tickTime)长度后 Zookeeper服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒 
syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒 
server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。 
除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。 

posted @ 2019-04-03 10:36  自在1990  阅读(186)  评论(0编辑  收藏  举报