这篇文章主要为大家展示了“ZooKeeper集群怎样安装和部署”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ZooKeeper集群怎样安装和部署”这篇文章吧。
0、ZooKeeper还可以用作其他用途,例如:
数据发布与订阅(配置中心)
负载均衡
命名服务(Naming Service)
分布式通知/协调
集群管理与Master选举
分布式锁
分布式队列
1、介绍与系统要求
ZooKeeper可以运行在多种系统平台上面,表1展示了zk支持的系统平台,以及在该平台上是否支持开发环境或者生产环境。
系统 开发环境 生产环境
Linux 支持 支持
Solaris 支持 支持
FreeBSD 支持 支持
Windows 支持 不支持
MacOS 支持 不支持
Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。
■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境;
■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例;
■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble)
Zookeeper通过复制来实现高可用性,只要集合体中半数以上的机器处于可用状态,它就能够保证服务继续。为什么一定要超过半数呢?这跟Zookeeper的复制策略有关:zookeeper确保对znode 树的每一个修改都会被复制到集合体中超过半数的机器上。
所以ZooKeeper集群模式的部署,3个ZooKeeper服务进程是建议的最小进程数量,而且不同的服务进程建议部署在不同的物理机器上面,以减少机器宕机带来的风险,以实现ZooKeeper集群的高可用。
ZooKeeper是用Java编写的,运行在Java环境上,因此,在部署zk的机器上需要安装Java运行环境。为了正常运行zk,我们需要JRE1.6或者以上的版本。ZooKeeper对于机器的硬件配置没有太大的要求。
2、下载安装
可以从https://zookeeper.apache.org/releases.html下载ZooKeeper,目前最新的稳定版本为 3.4.11 版本,我们今天选择3.4.10版本。
# tar zvxf zookeeper-3.4.10.tar.gz
# mv zookeeper-3.4.10 ../zk
# cd ../zk
[root@galera01 zk]# ls -l
drwxr-xr-x 2 1001 1001 4096 Mar 23 2017 bin
-rw-rw-r-- 1 1001 1001 84725 Mar 23 2017 build.xml
drwxr-xr-x 2 1001 1001 4096 Mar 23 2017 conf
drwxr-xr-x 10 1001 1001 4096 Mar 23 2017 contrib
drwxr-xr-x 2 1001 1001 4096 Mar 23 2017 dist-maven
drwxr-xr-x 6 1001 1001 4096 Mar 23 2017 docs
-rw-rw-r-- 1 1001 1001 1709 Mar 23 2017 ivysettings.xml
-rw-rw-r-- 1 1001 1001 5691 Mar 23 2017 ivy.xml
drwxr-xr-x 4 1001 1001 4096 Mar 23 2017 lib
-rw-rw-r-- 1 1001 1001 11938 Mar 23 2017 LICENSE.txt
-rw-rw-r-- 1 1001 1001 3132 Mar 23 2017 NOTICE.txt
-rw-rw-r-- 1 1001 1001 1770 Mar 23 2017 README_packaging.txt
-rw-rw-r-- 1 1001 1001 1585 Mar 23 2017 README.txt
drwxr-xr-x 5 1001 1001 4096 Mar 23 2017 recipes
drwxr-xr-x 8 1001 1001 4096 Mar 23 2017 src
-rw-rw-r-- 1 1001 1001 1456729 Mar 23 2017 zookeeper-3.4.10.jar
-rw-rw-r-- 1 1001 1001 819 Mar 23 2017 zookeeper-3.4.10.jar.asc
-rw-rw-r-- 1 1001 1001 33 Mar 23 2017 zookeeper-3.4.10.jar.md5
-rw-rw-r-- 1 1001 1001 41 Mar 23 2017 zookeeper-3.4.10.jar.sha1
bin目录:zk的可执行脚本目录,包括zk服务进程,zk客户端,等脚本。
conf目录:配置文件目录。zoo_sample.cfg为样例配置文件,log4j.properties为日志配置文件。
lib目录:zk依赖的包。
contrib目录:一些用于操作zk的工具包。
recipes目录:zk某些用法的代码示例
3、集群模式运行配置
单机模式的zk进程虽然便于开发与测试,但并不适合在生产环境使用。在生产环境下,我们需要使用集群模式来对zk进行部署。在集群模式下,建议至少部署3个zk进程,或者部署奇数个zk进程。
在集群模式下,所有的zk进程可以使用相同的配置文件(是指各个zk进程部署在不同的机器上面),例如如下配置:
# mkdir -p /opt/zkdata
# cd /opt/zk/conf
# cp zoo_sample.cfg zk.cfg
# vi zk.cfg
tickTime=2000
dataDir=/opt/zkdata
clientPort=2181
initLimit=5
syncLimit=2
server.0=192.168.56.111:2888:3888
server.1=192.168.56.112:2888:3888
server.3=192.168.56.113:2888:3888
设置选择配置文件的名字在zkEnv.sh文件里面,默认为zoo.cfg,这里已修改为zk.cfg
tickTime参数:tickTime则是上述两个超时配置的基本单位,例如对于initLimit,其配置值为5,说明其超时时间为 2000ms * 5 = 10秒。
initLimit参数:ZooKeeper集群模式下包含多个zk进程,其中一个进程为leader,余下的进程为follower。
当follower最初与leader建立连接时,它们之间会传输相当多的数据,尤其是follower的数据落后leader很多。
initLimit配置follower与leader之间建立连接后进行同步的最长时间。
syncLimit参数:配置follower和leader之间发送消息,请求和应答的最大时间长度。如果follower在设置时间内不能与leader通信,那么此follower将会被丢弃。
maxClientCnxns参数:
这个操作将限制连接到Zookeeper的客户端数量,并限制并发连接的数量,通过IP来区分不同的客户端。此配置选项可以阻止某些类别的Dos攻击。将他设置为零或忽略不进行设置将会取消对并发连接的限制。
例如,此时我们将maxClientCnxns的值设为1,如下所示:
# set maxClientCnxns
maxClientCnxns=1
启动Zookeeper之后,首先用一个客户端连接到Zookeeper服务器上。之后如果有第二个客户端尝试对Zookeeper进行连接,或者有某些隐式的对客户端的连接操作,将会触发Zookeeper的上述配置。
minSessionTimeout和maxSessionTimeout参数:
即最小的会话超时和最大的会话超时时间。在默认情况下,minSession=2*tickTime;maxSession=20*tickTime。
server.id=host:port1:port2
其中id为一个数字,表示zk进程的id,这个id也是dataDir目录下myid文件的内容。
host是该zk进程所在的IP地址,port1表示follower和leader交换消息所使用的端口,port2表示选举leader所使用的端口。
dataDir参数:该参数没有默认值,必须配置,其配置的含义跟单机模式下的含义类似,不同的是集群模式下还有一个myid文件。
myid文件的内容只有一行,且内容只能为1~255之间的数字,这个数字亦即上面介绍server.id中的id,表示zk进程的id。
# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zk/bin/../conf/zk.cfg
Starting zookeeper ... STARTED
./zkCli.sh -server 192.168.56.111:2181,192.168.56.112:2181,192.168.56.113:2181
# ./zkCli.sh -server 192.168.56.111:2181,192.168.56.112:2181,192.168.56.113:2181
Connecting to 192.168.56.111:2181,192.168.56.112:2181,192.168.56.113:2181
2018-03-12 14:20:23,468 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.10-39d3a4f269333c922ed3db283be479f9deacaa0f, built on 03/23/2017 10:13 GMT
2018-03-12 14:20:23,473 [myid:] - INFO [main:Environment@100] - Client environment:host.name=galera02
2018-03-12 14:20:23,473 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.7.0_45
2018-03-12 14:20:23,474 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2018-03-12 14:20:23,475 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.45.x86_64/jre
2018-03-12 14:20:23,475 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/opt/zk/bin/../build/classes:/opt/zk/bin/../build/lib/*.jar:/opt/zk/bin/../lib/slf4j-log4j12-1.6.1.jar:/opt/zk/bin/../lib/slf4j-api-1.6.1.jar:/opt/zk/bin/../lib/netty-3.10.5.Final.jar:/opt/zk/bin/../lib/log4j-1.2.16.jar:/opt/zk/bin/../lib/jline-0.9.94.jar:/opt/zk/bin/../zookeeper-3.4.10.jar:/opt/zk/bin/../src/java/lib/*.jar:/opt/zk/bin/../conf:
2018-03-12 14:20:23,475 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2018-03-12 14:20:23,475 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2018-03-12 14:20:23,475 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
2018-03-12 14:20:23,475 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux
2018-03-12 14:20:23,475 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64
2018-03-12 14:20:23,475 [myid:] - INFO [main:Environment@100] - Client environment:os.version=2.6.32-431.el6.x86_64
2018-03-12 14:20:23,475 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root
2018-03-12 14:20:23,476 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root
2018-03-12 14:20:23,476 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/opt/zk/bin
2018-03-12 14:20:23,477 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.56.111:2181,192.168.56.112:2181,192.168.56.113:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@6c8d5190
2018-03-12 14:20:23,494 [myid:] - INFO [main-SendThread(192.168.56.113:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server 192.168.56.113/192.168.56.113:2181. Will not attempt to authenticate using SASL (unknown error)
Welcome to ZooKeeper!
2018-03-12 14:20:23,581 [myid:] - INFO [main-SendThread(192.168.56.113:2181):ClientCnxn$SendThread@876] - Socket connection established to 192.168.56.113/192.168.56.113:2181, initiating session
JLine support is enabled
2018-03-12 14:20:23,868 [myid:] - INFO [main-SendThread(192.168.56.113:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server 192.168.56.113/192.168.56.113:2181, sessionid = 0x26218afe3bd0000, negotiated timeout = 30000
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: 192.168.56.111:2181,192.168.56.112:2181,192.168.56.113:2181(CONNECTED) 0]
[zk: 192.168.56.111:2181,192.168.56.112:2181,192.168.56.113:2181(CONNECTED) 0] quit
Quitting...
2018-03-12 14:22:41,435 [myid:] - INFO [main-EventThread:ClientCnxn$EventThread@519] - EventThread shut down for session: 0x26218afe3bd0000
2018-03-12 14:22:41,436 [myid:] - INFO [main:ZooKeeper@684] - Session: 0x26218afe3bd0000 closed
4、查看目前zk集群状态
[root@galera01 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zk/bin/../conf/zk.cfg
Mode: follower
[root@galera02 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zk/bin/../conf/zk.cfg
Mode: leader
[root@galera03 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zk/bin/../conf/zk.cfg
Mode: follower
----------------------------------------------------------End------------------------------------------------
以上是“ZooKeeper集群怎样安装和部署”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。