内容简介:同道们,好久不见,上一章中,我主要讲了Zookeeper的一些基础的知识点。数据模型 + 原语集 + Watches机制。本章内容主要讲的是集群搭建相关的知识。Zookeeper 有两种运行模式,使用过zookeeper的同学们应该知道,启一个zookeeper server 非常简单,如果是单点模式,只需要以下步骤:
前言
同道们,好久不见,上一章中,我主要讲了Zookeeper的一些基础的知识点。数据模型 + 原语集 + Watches机制。本章内容主要讲的是集群搭建相关的知识。
本篇的内容主要包含以下几点:
- Zookeeper 运行模式
- Zookeeper 搭建
一、Zookeeper 运行模式
Zookeeper 有两种运行模式, 单点模式 和 集群模式 。
- 单点模式(standalone mode)- Zookeeper 只运行在单个服务器上,常用于开发测试阶段,这种模式比较简单,但是不能保证Zookeeper服务的<font color= 'red'>高可用性</font>和<font color= 'red'>恢复性</font>。
-
集群模式(replicated mode)- 英文原文这种模式叫做“复制模式”;这个模式下,Zookeeper运行于一个集群上,适合生产环境。
同一个集群下的server节点被称为 quorum ,翻译过来就是“一个正式会议的法定人数”,如果你看完下一章介绍的 ZAB协议的两种模式 之后,应该会觉得这个比喻实际上很形象。
NOTE: 在集群模式下,最少需要三个server节点。并且官方推荐你使用奇数数量的server节点来组成集群。至于为什么,和Zookeeper的读写策略和一致性协议有关,在后面的章节会介绍。
二、Zookeeper 搭建
单点模式
使用过zookeeper的同学们应该知道,启一个zookeeper server 非常简单,如果是单点模式,只需要以下步骤:
- 去官网下载对应源码压缩包,然后上传到服务器
- 解压,
tar -zxvf zookeeper-***.tar.gz
-
进入到源码目录下的conf目录,根据
zoo_sample.cfg
,创建一个配置文件zoo.cfg
,启动时默认就是按照zoo.cfg
这个配置文件的信息来启动# Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔, # 也就是每个 tickTime 时间就会发送一个心跳。 tickTime=2000 # Zookeeper 保存数据的目录 dataDir=/data/zk/data # Zookeeper 保存日志文件的目录 dataLogDir=/data/zk/log # 客户端连接Zookeeper 服务器的端口 # Zookeeper 会监听这个端口,接受客户端的访问请求 clientPort=2181
-
进入到源码目录下的bin目录,执行
zkServer.sh
脚本文件即可# 启动 zkServer.sh start # 关闭 zkServer.sh stop
-
查看当前zookeeper 状态
[root@localhost bin]# sh zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg Mode: standalone
Mode:standalone
可以看到现在的节点启动类型。
集群搭建
集群模式的搭建和单点模式的差别不大,如果按照官方的最低要求,就是三台服务器,在这三台服务器上面分别执行一下上述单点模式的步骤,同一集群下的每台服务器的配置文件类似。
下面的描述会提到 follower
、 leader
节点,这个属于集群中的节点类型,具体定义后面章节会详述。
除了上述步骤中,还需要做一下步骤
- 每台机器上 conf/zoo.cfg 配置文件的参数设置,需要添加集群的信息,参考如下
tickTime=2000 dataDir=/data/zk/data dataLogDir=/data/zk/log clientPort=2181 # 集群相关配置 # 允许 follower 连接并同步到 leader 的初始化连接时间 # 比如这里就是允许 5个 tick 的时间 initLimit=5 # leader 与 follower 之间发送消息,请求和应答时间长度。 # 如果 follower 在设置的时间内不能与leader 进行通信,那么此 follower 将被丢弃。 # 比如这里就是允许 2个 tick 的时间 syncLimit=2 # 集群信息 server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
server.id=host:port1:port2
标识了不同Zookeeper服务器的信息,其中 id
是一个数字,表示这个是服务器的编号; host
是这个服务器的 ip 地址;至于 port1
和 port2
参照官网的描述较为准确,网上有些文章都把端口的含义给弄混了。
最后,让我们来看看在server 名字后面的两个端口号:"2888"和"3888",Zookeeper 节点使用前面那个端口( port1
)来与其他节点建立连接。这个连接是必须建立的,因为不同节点之间需要通信。打比方说, follower
节点需要“赞成” leader
节点的更新命令。更确切一点说,这个节点是用于 follower
节点和 leader
节点之间的通信。当一个 leader
节点出现了, follower
节点会在 port1
上与 leader
节点建立一个 TCP
连接。因为默认的 leader
选举也是用 TCP
,我们现在就需要另一个端口来用于 leader
选举,这就是 port2
的作用。
简单来说, port1
通信端口, port2
选举端口。
- 在每个Zookeeper服务器对应的
dataDir
目录下需要创建一个名为myid
的文件, 这个文件中仅含有一行的内容,指定的是自身的 id 值,就是server.id=host:port1:port2
中的id
值。这个id
值必须是集群中唯一的 。 - 在确认每台服务器上的
zoo.cfg
和myid
文件修改创建之后,在三个节点上分别执行命令zkServer.sh start
,启动zookeeper server。 -
在三个节点上分别执行
zkServer.sh status
查看当前节点的状态。- 节点1
- 节点2
- 节点3
- 节点1
可以看到,目前节点2是 leader
节点,节点1和节点3是 follower
节点。
也可以参考官网相关文章: ZooKeeper Getting Started Guide
总结
本章介绍了Zookeeper的两种运行模式,和两种模式的搭建。
下一章中,我们会介绍Zookeeper原理篇的进阶部分,有关于Zookeeper集群的读写机制、ZAB协议的知识解析等比较深入的知识点。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
人人都是产品经理
苏杰 / 电子工业出版社 / 2014-9-1 / CNY 55.00
《人人都是产品经理(纪念版)》为经典畅销书《人人都是产品经理》的内容升级版本。对于大量成长起来的优秀互联网产品经理,为数不少想投身产品工作的其他岗位从业者,以及更多有志从事这一职业的学生而言,这本书曾是他们记忆深刻的启蒙读物、思想基石和行动手册。作者以分享经历与体会为出发点,以“朋友间聊聊如何做产品”的语气,将自己数年产品工作过程中学到的思维方法与做事方式,及其它们对自己的帮助,系统性地梳理为用户......一起来看看 《人人都是产品经理》 这本书的介绍吧!