Zookeeper 的安装
下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper
首先从官网下载ZooKeeper压缩包,然后解压下载得到的ZooKeeper压缩包,发现有“bin,conf,lib”等目录。“bin目录”
中存放有运行脚本;“conf目录”
中存放有配置文件;“lib目录”
中存放有运行所需要第三方库。
解压文件:
tar zxvf zookeeper-3.4.12.tar.gz
Zookeeper 的配置
默认情况下的“conf”文件夹下“zoo_sample.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. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/tmp/zookeeper # the port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients # maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir # autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1
一、单机模式
1、编辑配置文件
在“conf”目录下,新建一个名为“zoo.cfg
”的文件(或者将“zoo_sample.cfg
”文件复制一份,改名为“zoo.cfg”文件),其中内容如下:
tickTime=2000 dataDir=/Users/liurenkui/myLibrary/zookeeper-3.4.12/data (填写自己的data目录) dataLogDir=/Users/liurenkui/myLibrary/zookeeper-3.4.12/logs clientPort=2181
参数说明:
#tickTime: zookeeper中使用的基本时间单位, 毫秒值,服务器和服务器之间或者客户端和服务器之间维持心跳的时间间隔。每个tickTime时间就会发送一个心跳。最小的session过期时间为2倍tickTime. #dataDir: 存储内存中数据库快照的位置,如果不设置参数,更新事务的日志会被存储到默认位置 #dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和 dataDir相同的设置. #clientPort: 监听client连接的端口号. #minSessionTimeout和maxSessionTimeout:最小会话超时时间和最大会话超时时间,默认情况下minSessionTimeout=2*tickTime;maxSession=20*tickTime #maxClientCnxns:限制连接的ZooKeeper的客户端数量,并限制并发连接的数量,通过IP来区分不同的客户端。此配置选项可以阻止某些类别的Dos攻击,将他设置为零或忽略不进行设置将会取消对并发连接的限制。 例如,将maxClientCnxns设置为1,有第二个客户端尝试对ZK进行连接,或者有某些隐式的对客户端的连接操作,将会触发maxClientCnxns的配置
2、运行ZooKeeper Server
执行./bin/zkServer.sh start
命令,运行ZooKeeper Server进程,得到如下所示结果,表示后台运行ZooKeeper Server进程成功。
➜ zookeeper-3.4.12 ./bin/zkServer.sh start ZooKeeper JMX enabled by default Using config: /Users/liurenkui/myLibrary/zookeeper-3.4.12/bin/../conf/zoo.cfg Starting zookeeper ... STARTED ➜ zookeeper-3.4.12
如果启动有问题,一般是需要先给zk的文件夹赋予可执行权限
➜ zookeeper-3.4.12 sudo chmod a+x *
3、查看服务运行状态
单机状态下为:standalone
➜ zookeeper-3.4.12 ./bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /Users/liurenkui/myLibrary/zookeeper-3.4.12/bin/../conf/zoo.cfg Mode: standalone
注:命令telnet 127.0.0.1 2181
连接成功验证 Zookeeper 是否启动成功,
运行命令:./bin/zkCli.sh
文件,进入客户端模式
指定服务器的ip和端口:./bin/zkCli/sh -server 127.0.0.1:2181
4、停止服务运行
停止:./bin/zkServer.sh stop
5、非后台运行ZooKeeper Server进程
执行bin/zkServer.sh start-foreground
命令,非后台运行ZooKeeper Server进程
6、Zookeeper的启动参数如下
有 start
、start-foreground
、stop
、restart
、status
、upgrade
、print-cmd
➜ zookeeper-3.4.12 ./bin/zkServer.sh ZooKeeper JMX enabled by default Using config: /Users/liurenkui/myLibrary/zookeeper-3.4.12/bin/../conf/zoo.cfg Usage: ./bin/zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}
二、集群模式
集群模式有两种形式:
1)使用多台机器,在每台机器上运行一个ZooKeeper Server进程;
2)使用一台机器,在该台机器上运行多个ZooKeeper Server进程。
2.1、参数配置
集群模式下,需要配置一些参数,以下是常见的一些参数。
data目录
用于存放进程运行数据。
data目录下的myid
文件
用于存储一个数值,用来作为该ZooKeeper Server进程的标识。
监听Client端请求的端口号
监听同ZooKeeper集群内其他Server进程通信请求的端口号
监听ZooKeeper集群内“leader
”选举请求的端口号
该端口号用来监听ZooKeeper集群内“leader”选举的请求。注意这个是ZooKeeper集群内“leader”的选举,跟分布式应用程序无关。
参数配置注意事项:
1)同一个ZooKeeper集群内,不同ZooKeeper Server进程的标识需要不一样,即myid文件内的值需要不一样
2)采用上述第2种形式构建ZooKeeper集群,需要注意“目录,端口号”等资源的不可共享性,如果共享会导致ZooKeeper Server进程不能正常运行,比如“data目录,几个监听端口号”都不能被共享
本示例操作配置如下,仅供参考
1、新建“zkCluster”目录,创建3个子目录,分别为:zk1、zk2、zk3
2、在 zk1、zk2、zk3 目录中分别创建一个 data 目录,用于存放数据
3、在 zk1/data、zk2/data、zk3/data 目录中分别创建一个 myid 文件,内容分别为:1、2、3(表示ZooKeeper Server进程的标识分别为1、2、3的意思)
4、将上处单机配置的zookeeper-3.4.12文件夹,分别拷贝到 zk1、zk2、zk3 目录,目录结构大致如下(省去部分干扰项文件和文件夹)
➜ zkCluster tree -L 2 . ├── zk1 │ ├── data │ │ └── myid │ └── zookeeper-3.4.12 ├── zk2 │ ├── data │ │ └── myid │ └── zookeeper-3.4.12 └── zk3 ├── data │ └── myid └── zookeeper-3.4.12
5、修改 zk1/zookeeper-3.4.12/conf 目录下 zoo.cfg文件如下
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/Users/liurenkui/myLibrary/zkCluster/zk1/data clientPort=2181 #集群配置 # server.x中的“x”表示ZooKeeper Server进程的标识 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2890:3890
6、修改 zk2/zookeeper-3.4.12/conf 目录下 zoo.cfg文件如下
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/Users/liurenkui/myLibrary/zkCluster/zk2/data clientPort=2182 #集群配置 # server.x中的“x”表示ZooKeeper Server进程的标识 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2890:3890
7、修改 zk3/zookeeper-3.4.12/conf 目录下 zoo.cfg文件如下
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/Users/liurenkui/myLibrary/zkCluster/zk3/data clientPort=2183 #集群配置 # server.x中的“x”表示ZooKeeper Server进程的标识 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2890:3890
myid | Data目录 | Client | Server | Leader | 配置文件 |
---|---|---|---|---|---|
1 | /z1/data | 2181 | 2888 | 3888 | z1.cfg |
2 | /z2/data | 2182 | 2889 | 3889 | z2.cfg |
3 | /z3/data | 2183 | 2890 | 3890 | z3.cfg |
备注
initLimit
:zookeeper集群中的包含多台server,其中一台为leader
,其余的为follower
。initLimit参数配置初始化连接时,follower和leader之间的最长心跳时间,参数设置为5,说明时间限制为5倍 tickTime, 即 5*2000=10000ms=10s,初始化连接时间超过该值,则表示连接失败
syncLimit
:该参数配置leader和follower之间发送消息,请求和应答的最大时间长度。参数设置为2,说明时间限制为2倍 tickTime,即4000ms,如果follower在设置时间内无法和leader通信,该follower将会被丢弃
server.A=B:C:D
A:其中 A 是一个数字,表示这个是服务器的编号; B:是这个服务器的 ip 地址; C:Leader选举的端口; D:Zookeeper服务器之间通信端口
2.2 运行集群下的zk服务
分别启动zk1、zk2、zk3的服务
➜ myLibrary ./zkCluster/zk1/zookeeper-3.4.12/bin/zkServer.sh start ZooKeeper JMX enabled by default Using config: /Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../conf/zoo.cfg Starting zookeeper ... STARTED ➜ myLibrary ./zkCluster/zk2/zookeeper-3.4.12/bin/zkServer.sh start ZooKeeper JMX enabled by default Using config: /Users/liurenkui/myLibrary/zkCluster/zk2/zookeeper-3.4.12/bin/../conf/zoo.cfg Starting zookeeper ... STARTED ➜ myLibrary ./zkCluster/zk3/zookeeper-3.4.12/bin/zkServer.sh start ZooKeeper JMX enabled by default Using config: /Users/liurenkui/myLibrary/zkCluster/zk3/zookeeper-3.4.12/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
查看运行状态
观察到只有一个leader,多个follower,一旦leader挂掉,会重新选举一个follower作为leader。
➜ myLibrary ./zkCluster/zk1/zookeeper-3.4.12/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../conf/zoo.cfg Mode: follower ➜ myLibrary ./zkCluster/zk2/zookeeper-3.4.12/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /Users/liurenkui/myLibrary/zkCluster/zk2/zookeeper-3.4.12/bin/../conf/zoo.cfg Mode: leader ➜ myLibrary ./zkCluster/zk3/zookeeper-3.4.12/bin/zkServer.sh status ZooKeeper JMX enabled by default Using config: /Users/liurenkui/myLibrary/zkCluster/zk3/zookeeper-3.4.12/bin/../conf/zoo.cfg Mode: follower
2.3 运行ZooKeeper命令行客户端
执行命令
bin/zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
建立ZooKeeper Client端到ZooKeeper集群的连接会话
➜ myLibrary zkCluster/zk1/zookeeper-3.4.12/bin/zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 Connecting to 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 2018-06-03 23:27:08,584 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.12-e5259e437540f349646870ea94dc2658c4e44b3b, built on 03/27/2018 03:55 GMT 2018-06-03 23:27:08,588 [myid:] - INFO [main:Environment@100] - Client environment:host.name=liurenkuidembp.lan 2018-06-03 23:27:08,588 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_161 2018-06-03 23:27:08,590 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation 2018-06-03 23:27:08,590 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre 2018-06-03 23:27:08,590 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../build/classes:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../build/lib/*.jar:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../lib/slf4j-log4j12-1.7.25.jar:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../lib/slf4j-api-1.7.25.jar:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../lib/netty-3.10.6.Final.jar:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../lib/log4j-1.2.17.jar:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../lib/jline-0.9.94.jar:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../lib/audience-annotations-0.5.0.jar:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../zookeeper-3.4.12.jar:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../src/java/lib/*.jar:/Users/liurenkui/myLibrary/zkCluster/zk1/zookeeper-3.4.12/bin/../conf: 2018-06-03 23:27:08,591 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/Users/liurenkui/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:. 2018-06-03 23:27:08,591 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/var/folders/z2/zzlwm7bx4yj4sw_rpfc2f3vw0000gn/T/ 2018-06-03 23:27:08,591 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA> 2018-06-03 23:27:08,591 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Mac OS X 2018-06-03 23:27:08,591 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=x86_64 2018-06-03 23:27:08,591 [myid:] - INFO [main:Environment@100] - Client environment:os.version=10.13.4 2018-06-03 23:27:08,591 [myid:] - INFO [main:Environment@100] - Client environment:user.name=liurenkui 2018-06-03 23:27:08,591 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/Users/liurenkui 2018-06-03 23:27:08,591 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/Users/liurenkui/myLibrary 2018-06-03 23:27:08,592 [myid:] - INFO [main:ZooKeeper@441] - Initiating client connection, connectString=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@255316f2 Welcome to ZooKeeper! 2018-06-03 23:27:08,623 [myid:] - INFO [main-SendThread(127.0.0.1:2183):ClientCnxn$SendThread@1028] - Opening socket connection to server 127.0.0.1/127.0.0.1:2183. Will not attempt to authenticate using SASL (unknown error) JLine support is enabled 2018-06-03 23:27:08,691 [myid:] - INFO [main-SendThread(127.0.0.1:2183):ClientCnxn$SendThread@878] - Socket connection established to 127.0.0.1/127.0.0.1:2183, initiating session 2018-06-03 23:27:08,715 [myid:] - INFO [main-SendThread(127.0.0.1:2183):ClientCnxn$SendThread@1302] - Session establishment complete on server 127.0.0.1/127.0.0.1:2183, sessionid = 0x300059ab6c10000, negotiated timeout = 30000 WATCHER:: WatchedEvent state:SyncConnected type:None path:null [zk: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED) 0] [zk: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED) 0] ls / [zookeeper] [zk: 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183(CONNECTED) 1]
相关文章
zookeeper介绍、集群安装(视频教程)