(2)搭建zookeeper单机部署和集群部署

zookeeper有单机、伪集群、集群三种部署方式,可根据自己对可靠性的需求选择合适的部署方式。下边对这三种部署方式逐一进行讲解。

1. 系统环境准备

操作系统 :centos7
java 环境:jdk8

我搭建的是自centos7的linux下,先配置好java的配置环境,然后下载zookeeper的相关的jar进行部署

2.zookeeper部署

tar -zxf zookeeper-3.4.5.tar.gz
  • 常用命令
    1.启动 ZK 服务:
    sh bin/zkServer.sh start
    1. 查看 ZK 服务状态:
      sh bin/zkServer.sh status
    2. 停止 ZK 服务:
      sh bin/zkServer.sh stop
    3. 重启 ZK 服务:
      sh bin/zkServer.sh restart
    4. 连接服务器
      sh zkCli.sh -timeout 0 -r -server ip:port

3.集群模式

初 次 使 用 zookeeper , 需 要 将 %zk_home%/conf 目 录 下 的zoo_sample.cfg 文件 copy 一份重命名为 zoo.cfg,修改 dataDir 目录,dataDir 表示日志文件存放的路径集群环境安装
在 zookeeper 集群中,各个节点总共有三种角色,分别是:leader,follower,observer

集群模式我们采用模拟 3 台机器来搭建 zookeeper 集群。分别复制安装包到三台机器上并解压,同时 copy 一份zoo.cfg。

3.1 修改配置文件zoo.cfg

在zoo.cfg配置文件配置以下的语句

tickTime=2000
dataDir=/tmp/zookeeper
dataLogDir=/usr/myapp/zookeeper-3.4.5/logs
clientPort=2181
initLimit=10
syncLimit=5
server.1=192.168.44.128:2888:3888
server.2=192.168.44.129:2888:3888
server.3=192.168.44.130:2888:3888

server.id=host:port1:port2

id被称为service ID,用来标识机器在集群中机器序号,同时,在每台zookeeper机器上,需要在数据目录(dataDir参数指定的那个目录下)创建一个myid的文件,文件只要一行内容,并且是一个数字,即对应每台服务器的serverID的数字

port1表示的是这个服务器与集群中的 Leader服务器交换信息的端口

port2表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 host 都是一样, 所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号

3.2 新建 datadir 目录,设置 myid

在每台zookeeper机器上,我们都需要在数据目录dataDir下创建一个myid 文件,该文件只有一行内容,对应每台机器的 Server ID 数字;比如 server.1 的 myid 文件内容就是1。【必须确保每个服务器的 myid 文件中的数字不同,并且和自己所在机器的 zoo.cfg 中 server.id 的 id 值一致,id 的范围是 1~255】

3.3 启动 zookeeper
sh  zkServer.sh start 

4.单机模式

zookeeper 支持单机模式,只要启动一台zookeeper机器,就可以正常提供正常的服务
单机的部署模式基本与集群模式的部署基本一致,由于是单机模式,所以整个zookeeper的集群只有一台机器,所以zoo.cfg 的配置做如下的修改:

tickTime=2000
dataDir=/tmp/zookeeper
dataLogDir=/usr/myapp/zookeeper-3.4.5/logs
clientPort=2181
initLimit=10
syncLimit=5
server.1=192.168.44.128:2888:3888

启动zookeeper

sh  bin/zkServer.sh start 

然后查看的服务端的状态

sh  bin/zkServer.sh status 

ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: standalone

这里的mode信息为standalone,但是集群模式的mode显示为leader或者为follower

5.伪集群模式

如果手上有一台比较好的机器,作为单机部署,资源有点浪费,可以借助硬件上的虚拟化的技术,把一条物理机器转换为几台虚拟机,不过这样的成本太高,zookeeper允许你在一台机器上完成一个伪集群模式的搭建

伪集群模就是集群中的所有机器都在一个机器上,但是以集群的特性来对外提供服务,这种模式和集群模式非常类似,只是把zoo.cfg做了如下的修改

tickTime=2000
dataDir=/tmp/zookeeper
dataLogDir=/usr/myapp/zookeeper-3.4.5/logs
clientPort=2181
initLimit=10
syncLimit=5
server.1=192.168.44.128:2888:3888
server.2=192.168.44.128:2889:3889
server.3=192.168.44.128:2890:3890

在这个zoo.cfg的配置中,机器列表的配置都是一个ip地址,端口号是不一样。

6.带 Observer 角色的集群

Observers:在不伤害写性能的情况下扩展Zookeeper

尽管通过Client直接连接到Zookeeper集群的性能已经非常好了,但是这种架构如果要承受超大规模的Client,就必须增加Zookeeper集群的Server数量,随着Server的增加,Zookeeper集群的写性能必定下降,我们知道Zookeeper的Znode变更是要过半数投票通过,随着机器的增加,由于网络消耗等原因必然导致投票成本增加,从而导致写性能的下降。

Observer是一种新型的Zookeeper节点,可以帮助解决上述问题,提供Zookeeper的可扩展性。Observer不参与投票,只是简单的接收投票结果,因此我们增加再多的Observer,也不会影响集群的写性能。除了这个差别,其他的和Follower基本上完全一样。例如:Client都可以连接到他们,并且都可以发送读写请求给他们,收到写请求都会上报到Leader。

Observer有另外一个优势,因为它不参与投票,所以他们不属于Zookeeper集群的关键部位,即使他们Failed,或者从集群中断开,也不会影响集群的可用性。根据Observer的特点,我们可以使用Observer做跨数据中心部署。如果把Leader和Follower分散到多个数据中心的话,因为数据中心之间的网络的延迟,势必会导致集群性能的大幅度下降。使用Observer的话,将Observer跨机房部署,而Leader和Follower部署在单独的数据中心,这样更新操作会在同一个数据中心来处理,并将数据发送的其他数据中心(包含Observer的),然后Client就可以在其他数据中心查询数据了。但是使用了Observer并非就能完全消除数据中心之间的延迟,因为Observer还得接收Leader的同步结果合Observer有更新请求也必须转发到Leader,所以在网络延迟很大的情况下还是会有影响的,它的优势就为了本地读请求的快速响应

使用Observer
如果要使用Observer模式,可以在对应节点的配置文件添加如下配置:

peerType=observer

上面仅仅是告诉Zookeeper该节点是Observer,其次,必须在配置文件指定哪些节点被指定为Observer,例如:

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

推荐阅读更多精彩内容