多台虚拟机搭建zookeeper集群

zookeeper集群搭建

kafka是把状态保存在zookeeper中的,首先要搭建zookeeper集群。尽管kafka本身自带了zookeeper,但最好不要使用自带的zookeeper。参考这两个教程: 教程一(三台虚拟机)教程二(两台虚拟机)

1.软件环境

我用了三台虚拟机作为服务器,虚拟机装的是CentOS7 64位:

  • 192.168.172.10
  • 192.168.172.11
  • 192.168.172.12
  1. Linux服务器。使用数量为一台,三台,五台,(2*n+1)。zookeeper集群的工作是超过半数才能对外提供服务,三台中超过两台超过半数,允许一台挂掉。最好不要使用偶数台。

    例如:如果有4台,那么挂掉一台还剩下三台,如果再挂掉一台就不能行了,因为是要超过半数。

  2. Java jdk1.8. 因为zookeeper是用Java写的,所以他需要Java环境,CentOS 7默认安装了jdk,所以此处不在安装。

  3. zookeeper3.4.11版。

2.配置与安装zookeeper。

下面的操作是三台虚拟机都要做的,并且除了特别指出的,其他部分三台虚拟机所做的配置操作是完全相同的

2.1安装Java

CentOS7自带jdk,此处无需安装。

2.2下载zookeeper

首先要注意的是在生产环境中目录结构要定义好,防止在项目过多的时候找不到所需的项目。 我把目录统一放在/opt下面,该目录一般存放主机额外安装的软件。

// 首先创建zookeeper项目目录
mkdir zookeeper // 项目目录
cd zookeeper // 进入项目目录
mkdir zkdata // 存放快照日志
mkdir zkdatalog // 存放事物日志

从官网下载最新的稳定版zookeeper后,通过xshell的文件传输工具传送到虚拟机中。我就放在了/opt/zookeeper项目文件下。

cd /opt/zookeeper // 进入下载目录
tar -zxvf zookeeper-3.4.11.tar.gz // 解压文件

2.3 修改配置文件

进入到解压好的zookeeper的conf目录中,查看:

//进入conf目录
cd /opt/zookeeper/zookeeper-3.4.11/conf
//查看
-rw-rw-r--. 1 1000 1000 535 Feb 20 2014 configuration.xsl
-rw-rw-r--. 1 1000 1000 2161 Feb 20 2014 log4j.properties
-rw-rw-r--. 1 1000 1000 922 Feb 20 2014 zoo_sample.cfg

zoo_sample.cfg这个文件是官方给我们的zookeeper的样板文件。我们需要复制一份名为zoo.cfg的文件,zoo.cfg是zookeeper官方指定的文件命名规则。我们以在第一台虚拟机上的操作为例(上面的操作都是在第一台虚拟机上,你需要在每台虚拟机上都执行上述以及本次操作):

// 复制zoo.cfg文件
cp zoo_sample.cfg zoo.cfg
// 打开zoo.cfg文件,然后按后面的配置信息进行配置
vim zoo.zfg

在zoo.cfg配置文件需要填入的信息。

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/zkdata
dataLogDir=/opt/zookeeper/zkdatalog
clientPort=12181
// 此处的IP就是你所操作的三台虚拟机的IP地址,每台虚拟机的zoo.cfg中都需要填入这三个地址。第一个端口是master和slave之间的通信端口,默认是2888,第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口默认是3888
server.1=192.168.172.10:12888:13888
server.2=192.168.172.11:12888:13888
server.3=192.168.172.12:12888:13888
// server.1 这个1是服务器的标识也可以是其他的数字, 表示这个是第几号服务器,用来标识服务器,这个标识要写到快照目录下面myid文件里

创建myid文件。以现在所在的第一台虚拟机192.168.172.10为例,对应server.1,通过上边的配置信息可以查到。创建myid文件的目的是为了让zookeeper知道自己在哪台服务器上,例如现在所在的虚拟机是192.168.172.10,它对应的id是1,那么就在myid文件中写入1.

echo "1" > /opt/zookeeper/zkdata/myid

另外两台虚拟机上也需要创建myid文件并写入相应的id,id根据zoo.cfg文件中的IP地址查询。

echo "2" > /opt/zookeeper/zkdata/myid
echo "3" > /opt/zookeeper/zkdata/myid

2.4 启动zookeeper

进入到zookeeper的bin目录下

cd /opt/zookeeper/zookeeper-3.4.11/bin/
// 启动服务 (注意!三台虚拟机都要进行该操作)
./zkServer.sh start
// 检查服务器状态
./zkServer.sh status
// 显示如下
JMX enabled by default
Using config: /opt/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: follower #他是主节点leader还是从节点follower

3.重要配置说明(待补充)

  1. myid文件和server.myid 在快照目录下存放的标识本台服务器的文件,他是整个zk集群用来发现彼此的一个重要标识。
  2. zoo.cfg配置文件。zoo.cfg文件是zookeeper配置文件,在conf目录里。

// tickTime:
这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
// initLimit:
这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 52000=10 秒
// syncLimit:
这个配置项标识 Leader 与Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是5
2000=10秒
// dataDir:
快照日志的存储路径
// dataLogDir:
事物日志的存储路径,如果不配置这个那么事物日志会默认存储到dataDir制定的目录,这样会严重影响zk的性能,当zk吞吐量较大的时候,产生的事物日志、快照日志太多
// clientPort:
这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。修改他的端口改大点

4.遇到的错误

在搭建完成后,三个虚拟机都出现了错误。有两个问题。

4.1 节点无法运行

在用./zkServer.sh start命令运行zookeeper后,zookeeper节点显示正常启动,但是用zkServer.sh status命令查看zookeeper节点的状态时,发现并没有正常运行,出现:

Error contacting service. It is probably not running.

我试着重新./zkServer.sh start,却无法启动,显示:

already running as process 11854

对于这个问题,网上有很多答案,试了一遍:

  1. zoo.cfg配置文件中指定目录却没有创建! 创建相应目录即可。
    //我的目录配置没有问题
  2. zoo.cfg中dataDir指定路径为Myid文件的路径。Myid内容与:server.?=192.168.172.10:12888:13888 中所设置是否一致?
    //我的设置是一致的!
  3. 使用service iptables stop 关闭防火墙.
    //这个确实没关,但用的命令不是service iptables stop,而是:

systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

关闭后确实起作用了,但是第二天重新启动时,刚开始运行还没问题,到中午吃完饭回来就又出现了,所以应该不是防火墙的问题:

Error contacting service. It is probably not running.

  1. 打开zkServer.sh 找到

status)
STAT=echo stat | nc localhost $(grep clientPort "$ZOOCFG" | sed -e 's/.*=//') 2> /dev/null| grep Mode

nclocalhost之间加上 -q 1(是数字1而不是字母l).如果已存在则去掉。
// 但是我的zkServer.sh中没有这一行。

  1. 12181端口被占用
    使用netstat -anp | grep 12181查看,确实发现有程序占用这个端口,但是kill掉以后还是不能启动zookeeper。

于是我不再管虚拟机1,又依次开启虚拟机2 和虚拟机3,其中虚拟机2和虚拟机1一样,都是:

Error contacting service. It is probably not running.

但是神奇的事情发生了,我开启虚拟机3的时候,是成功的,值得注意的是这里显示的zookeeper状态时leader:

[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/zookeeper-3.4.11/bin/../conf/zoo.cfg
Mode: leader

也就是说虚拟机3所在的zookeeper节点是leader,然后再开启虚拟机2和虚拟机1,就没问题了。但是不知道为什么虚拟机3默认为leader,可能我之前在哪里配置过我不记得了(可能性不大),也可能跟zookeeper选举leader的机制有关系,这个需要深入了解。

成功运行后,三台虚拟机,一台是leader,另外两台是follower。

4.2 每个节点都是standalone的

这个问题是由于zoo.cfg文件中的server写错了,写成了servers。所以server写错可能导致zookeeper运行在单机模式下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容