温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

ZooKeeper集群怎样安装和部署

发布时间:2021-12-16 10:51:56 来源:亿速云 阅读:144 作者:小新 栏目:开发技术

这篇文章主要为大家展示了“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集群怎样安装和部署”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI