上一篇介绍了单机版zookeeper安装,这种情况一般用于开发测试。如果是生产环境建议用分布式集群部署,防止单点故障,增加zookeeper服务的高可用。

【环境介绍】

      三台机器:192.168.126.160,192.168.126.161,192.168.126.162

      操作系统:centos linux

以上就是本次集群的机器情况。下面进行安装和配置:

一、安装和配置

1)解压文件(先在一台机器上操作

tar -zxvf zookeeper-3.4..tar.gz

2)重命名配置文件zoo_sample.cfg并修改其内容如下:

mv zoo_sample.cfg zoo.cfg
vim zoo.cn

内容为:

tickTime=2000
dataDir=/home/mysql/zookeeper-3.4.6/data
clientPort=2181
initLimit=5
syncLimit=2
server.1=192.168.126.160:2888:3888
server.2=192.168.126.161:2888:3888
server.3=192.168.126.162:2888:3888

tickTime:该参数用来定义心跳的间隔时间,zookeeper的客户端和服务端之间也有和web开发里类似的session的概念,而zookeeper里最小的session过期时间就是tickTime的两倍。单位是毫秒

dataDir:  存放内存数据库的快照,用户恢复数据,如果不指定logdatadir,那么默认log也会存在这里。

clientPort:供客户端程序连接的端口,如果在单机部署多台server,那么端口需要不同。

server.x:用于集群中发现彼此,这里的1,2,3需要跟data/myid里数字对应,后面会有说明。2888表示集群中互联的端口,3888用于选主的端口。

initLimit:参数设定了允许所有跟随者与领导者进行连接并同步的时间,如果在设定的时间段内,半数以上的跟随者未能完成同步,领导者便会宣布放弃领导地位,进行另一次的领导选举。如果zk集群环境数量确实很大,同步数据的时间会变长,因此这种情况下可以适当调大该参数。默认为10
syncLimit:参数设定了允许一个跟随者与一个领导者进行同步的时间,如果在设定的时间段内,跟随者未完成同步,它将会被集群丢弃。所有关联到这个跟随者的客户端将连接到另外一个跟随着。

然后,把修改好的zookeeper安装文件传输到其他两台机器上:

 scp -r zookeeper-3.4. 192.168.126.161:/home/

3)设置myid

在我们配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,conf/zoo.cfg文件中配置的server.X中X为什么数字,则myid文件中就输入这个数字,例如:

192.168.126.160> cd /zookeeper-3.4./data && touch myid && echo "" >myid
192.168.126.161> cd /zookeeper-3.4./data && touch myid && echo "" >myid
192.168.126.162> cd /zookeeper-3.4./data && touch myid && echo "" >myid

到这里,整个集群就配置好了。

二、启动

192.168.126.160> cd /zookeeper-3.4./bin
192.168.126.160 bin> ./zkServer.sh start
JMX enabled by default
Using config: /home/mysql/zookeeper-3.4./bin/../conf/zoo.cfg
Starting zookeeper ... STARTED 192.168.126.161> cd /zookeeper-3.4./bin
192.168.126.161 bin> ./zkServer.sh start
JMX enabled by default
Using config: /home/mysql/zookeeper-3.4./bin/../conf/zoo.cfg
Starting zookeeper ... STARTED 192.168.126.162> cd /zookeeper-3.4./bin
192.168.126.162 bin> ./zkServer.sh start
JMX enabled by default
Using config: /home/mysql/zookeeper-3.4./bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

安装正确,以上三台都启动了,组成了一个zookeeper集群,即使其中一台down机了,其他两台还可以继续提供服务。

三、命令

1、查看集群机器状态:

192.168.126.160>  ./zkServer.sh status
JMX enabled by default
Using config: /home/mysql/zookeeper-3.4./bin/../conf/zoo.cfg
Mode: follower 192.168.126.161> ./zkServer.sh status
JMX enabled by default
Using config: /home/mysql/zookeeper-3.4./bin/../conf/zoo.cfg
Mode: leader 192.168.126.162> ./zkServer.sh status
JMX enabled by default
Using config: /home/mysql/zookeeper-3.4./bin/../conf/zoo.cfg
Mode: follower

126.161机器是leader,其他都是小弟角色。

2、通过客户端脚本连接到集群:

现在整个集群对外是一个整体,连接到任意一台机器上看到的视图都是一样的。

192.168.126.162> ./zkCli.sh -server 192.168.126.160:
Connecting to 192.168.126.160:
-- ::, [myid:] - INFO [main:Environment@] - Client environment:zookeeper.version=3.4.-, built on // : GMT
-- ::, [myid:] - INFO [main:Environment@] - Client environment:host.name=darren.org
-- ::, [myid:] - INFO [main:Environment@] - Client environment:java.version=1.7.0_67
-- ::, [myid:] - INFO [main:Environment@] - Client environment:java.vendor=Oracle Corporation
-- ::, [myid:] - INFO [main:Environment@] - Client environment:java.home=/usr/java/jdk1..0_67-cloudera/jre
-- ::, [myid:] - INFO [main:Environment@] - Client environment:java.class.path=/home/mysql/zookeeper-3.4./bin/../build/classes:/home/mysql/zookeeper-3.4./bin/../build/lib/*.jar:/home/mysql/zookeeper-3.4.6/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/mysql/zookeeper-3.4.6/bin/../lib/slf4j-api-1.6.1.jar:/home/mysql/zookeeper-3.4.6/bin/../lib/netty-3.7.0.Final.jar:/home/mysql/zookeeper-3.4.6/bin/../lib/log4j-1.2.16.jar:/home/mysql/zookeeper-3.4.6/bin/../lib/jline-0.9.94.jar:/home/mysql/zookeeper-3.4.6/bin/../zookeeper-3.4.6.jar:/home/mysql/zookeeper-3.4.6/bin/../src/java/lib/*.jar:/home/mysql/zookeeper-3.4.6/bin/../conf:.:/usr/java/jdk1.7.0_67-cloudera/lib/dt.jar:/usr/java/jdk1.7.0_67-cloudera/lib/tools.jar:/usr/java/jdk1.7.0_67-cloudera/jre/lib/rt.jar
2016-11-25 16:40:47,040 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2016-11-25 16:40:47,040 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2016-11-25 16:40:47,040 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
2016-11-25 16:40:47,040 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux
2016-11-25 16:40:47,040 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64
2016-11-25 16:40:47,040 [myid:] - INFO [main:Environment@100] - Client environment:os.version=2.6.32-504.23.4.el6.x86_64
2016-11-25 16:40:47,040 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root
2016-11-25 16:40:47,040 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root
2016-11-25 16:40:47,040 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/home/mysql/zookeeper-3.4.6/bin
2016-11-25 16:40:47,041 [myid:] - INFO [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.126.160:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@71fdf17c
Welcome to ZooKeeper!
2016-11-25 16:40:47,073 [myid:] - INFO [main-SendThread(192.168.126.160:2181):ClientCnxn$SendThread@975] - Opening socket connection to server 192.168.126.160/192.168.126.160:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2016-11-25 16:40:47,076 [myid:] - INFO [main-SendThread(192.168.126.160:2181):ClientCnxn$SendThread@852] - Socket connection established to 192.168.126.160/192.168
.126.160:2181, initiating session [zk: 192.168.126.160:2181(CONNECTING) 0] 2016-11-25 16:40:47,100 [myid:] - INFO [main-SendThread(192.168.126.160:2181):ClientCnxn$SendThread@1235] - Session establishment complete on server 192.168.126.160/192.168.126.160:2181, sessionid = 0x1589a9a25170000, negotiated timeout = 30000 WATCHER:: WatchedEvent state:SyncConnected type:None path:null [zk: 192.168.126.160:2181(CONNECTED) 0] 

查看数据:

[zk: 192.168.126.160:(CONNECTED) ] ls /
[zookeeper]

用ls /命令查看目录情况,发现只有一个zookeeper目录。

我们到安装目录的/data文件夹下看看都有什么文件?

-rw-r--r--  root root         Nov  : acceptedEpoch
-rw-r--r-- root root Nov : currentEpoch
-rw-r--r-- root root Nov : log.
-rw-r--r-- root root Nov : snapshot.

【解释】:

snapshot.0:就是我们存放数据在内存中的快照,zookeeper服务刚启动时需要用它来恢复数据
log.100000001:日志文件,默认存放在数据目录中。

到此为止,整个zookeeper集群环境的搭建配置就完成了,挺简单的吧。

【参考文献】:

zookeeper学习与实战(二)集群部署的更多相关文章

  1. ZooKeeper学习笔记一:集群搭建

    作者:Grey 原文地址:ZooKeeper学习笔记一:集群搭建 说明 单机版的zk安装和运行参考:https://zookeeper.apache.org/doc/r3.6.3/zookeeperS ...

  2. Zeebe服务学习3-Raft算法与集群部署

    1.背景Zeebe集群里面保证分布式一致性问题,是通过Raft实现的,其实这个算法用途比较广泛,比如Consul网关,也是通过Raft算法来实现分布式一致性的. 首先简单介绍一下Raft: 在学术界, ...

  3. kubernetes云平台管理实战: 集群部署(一)

    一.环境规划 1.架构拓扑图 2.主机规划 3.软件版本 [root@k8s-master ~]# cat /etc/redhat-release CentOS Linux release 7.4.1 ...

  4. 004.etcd集群部署-动态发现

    一 etcd发现简介 1.1 需求背景 在实际环境中,集群成员的ip可能不会提前知道.如使用dhcp自动获取的情况,在这些情况下,使用自动发现来引导etcdetcd集群,而不是指定静态配置,这个过程被 ...

  5. 003.etcd集群部署-静态发现

    一 etcd集群概述 1.1 概述 静态启动etcd集群要求每个成员都知道集群中的另一个成员.Etcd运行在集群的每个coreos节点上,可以保证coreos集群的稳定,可靠的运行.当集群网络出现动荡 ...

  6. Redis cluster 集群部署和配置

    目录 一.集群简介 cluster介绍 cluster原理 cluster特点 应用场景 二.集群部署 环境介绍 节点部署 启动集群 三.集群测试 一.集群简介 cluster介绍 redis clu ...

  7. Dubbo+zookeeper构建高可用分布式集群(二)-集群部署

    在Dubbo+zookeeper构建高可用分布式集群(一)-单机部署中我们讲了如何单机部署.但没有将如何配置微服务.下面分别介绍单机与集群微服务如何配置注册中心. Zookeeper单机配置:方式一. ...

  8. kafka学习总结之集群部署和zookeeper

    1.  集群部署 kafka集群的瓶颈主要在网络和磁盘上:kafka依赖于zookeeper,zookeeper集群的节点采用奇数个,3个节点允许一个节点失败,5个节点允许2个节点失败. 图 1 ka ...

  9. rocketmq学习(二) rocketmq集群部署与图形化控制台安装

    1.rocketmq图形化控制台安装 虽然rocketmq为用户提供了使用命令行管理主题.消费组以及broker配置的功能,但对于不够熟练的非运维人员来说,命令行的管理界面还是较难使用的.为此,我们可 ...

随机推荐

  1. Redis 数据恢复方法,redis-port 工具将自建 redis 的 rdb文件同步到云数据库

    1. Redis 恢复的机制 如果只配置 AOF ,重启时加载 AOF 文件恢复数据: 如果同时配置了 RDB 和 AOF ,启动是只加载 AOF 文件恢复数据: 如果只配置 RDB,启动是将加载 d ...

  2. PHP设置会话(Session)超时过期时间实现登录时间限制

    最近某个PHP项目用到了限制登录时间的功能,比如用户登录系统60分钟后如果没有操作就自动退出,我搜索了网络收集了有以下方法可供参考. 第一种方法即设置php.ini配置文件,设置session.gc_ ...

  3. Ubuntu14下Hadoop开发&lt;1&gt; 基础环境安装

    准备了一台淘汰的笔记本.单核CPU.3G内存.160G硬盘:准备一个2G的U盘 在官网下载了64位的14.04版本号(麒麟)的ISO.下载UNetbootin(Ubuntu专用U盘安装工具) 使用UN ...

  4. hbase的数据模型

    hbase类似bigTable是一个分布式的数据库,它是一个稀疏的,长期存储的,多维的,排序的映射表,这张表的索引是行关键字,列关键字,时间戳.hbase中的数据都是字符串,没有类型.         ...

  5. Cannot lock storage /tmp/hadoop-root/dfs/name. The directory is already locked.

    [root@nn01 bin]# ./hadoop namenode -format 12/05/21 06:13:51 INFO namenode.NameNode: STARTUP_MSG: /* ...

  6. C#实战Microsoft Messaging Queue(MSMQ)消息队列(干货)<转>

    前言 在使用MSMQ之前,我们需要自行安装消息队列组件!(具体安装方法大家自己搜一下吧) 采用MSMQ带来的好处是:由于是异步通信,无论是发送方还是接收方都不用等待对方返回成功消息,就可以执行余下的代 ...

  7. Android使用LinearViewLayout展示数据

    如果要滚动,使用ScrollView来包裹这个LinearViewLayout. ListView控件,自己带有滚动效果的. BaseAdapter LayoutInflater 其他两种绑定方式 A ...

  8. named主从环境部署

    named主 1. bind服务安装配置 yum -y install bind*.x86_64 配置文件: /etc/named.conf /etc/named.rfc1912.zones /etc ...

  9. ASP.NET动态网站制作(19)-- C#(2)

    前言:C#的第二次课,依旧讲解C#的基础知识. 内容: 1.GC:垃圾回收机制,可以回收托管模块中的垃圾. 2.值类型和引用类型:  (1)值类型:所有的数值类型都是值类型,如int,byte,sho ...

  10. ios -富文本和尺寸

    /** *  计算文本的宽高 方法 2 * *  @param str     需要计算的文本 *  @param font    文本显示的字体 *  @param maxSize 文本显示的范围 ...