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
  2. 查看 ZK 服务状态:sh bin/zkServer.sh status
  3. 停止 ZK 服务:sh bin/zkServer.sh stop
  4. 重启 ZK 服务:sh bin/zkServer.sh restart
  5. 连接服务器: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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值