当前位置: 移动技术网 > IT编程>开发语言>Java > 初识zookeeper

初识zookeeper

2020年07月17日  | 移动技术网IT编程  | 我要评论

1. 协调服务的由来

    在分布式架构下,当服务越来越多,规模越来越大时,对应的机器数量也越来越大,单靠人工来管理和维护服务及地址的配置地址信息会越来越困难,单点故障的问题也开始凸显出来,一旦服务路由或者负载均衡服务器宕机,依赖他的所有服务均将失效。

    此时,需要一个能够动态注册服务和获取服务的地方,来统一管理服务名称和所对应的服务地址列表信息,我们称之为服务配置中心。服务提供者在启动时,会将其提供的服务名称和服务器地址注册到服务配置中心;服务消费者通过服务配置中心来获取需要调用服务的机器地址列表。通过设定的负载均衡算法来选择其中一台服务器进行调用。当提供服务的服务器宕机或者下线时,相应的机器需要从服务配置中心移除,并通知相应的服务消费者去更新服务地址列表,否则服务消费者就有可能因为调用了已经失效的服务而发生错误。

    在这个过程中,服务消费者只有在第一次调用服务时需要查询一下服务配置中心,然后将查询到的结果在本地缓存起来,后面的调用直接使用本地缓存的服务地址列表信息,而不需要重新查询一次服务配置中心来获取相应的服务地址列表,除非机器上下线才会触发重新刷新服务地址列表。

2. 什么是 zookeeper

    zookeeper 是一个开源的分布式协调服务,由雅虎公司创建,是 google chubby 的开源实现。zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集(由若干条指令组成的,完成一定功能的一个过程),并且以一系列简单易用的接口提供给用户使用。

3. zookeeper 安装部署

3.1 安装

(1)zookeeper 有两种运行模式:集群模式和单击模式。

(2)下载zookeeper安装包:http://apache.fayea.com/zookeeper/

(3)下载完成,通过 tar -zxvf 解压

3.2 常用命令

1.启动zookeeper服务 : zkServer.sh start

2.查看zookeeper服务状态: zkServer.sh status

3.停止zookeeper服务: zkServer.sh stop

4.重启zookeeper服务: zkServer.sh restart

5.用client连接zookeeper服务:zkCli.sh -server ip:port

3.3 单机环境安装

一般在开发测试的阶段,我们在没有这么多资源的情况下, 而且也不需要特别好的稳定性的前提下,我们可以使用单机部署;

(1)我们进入解压好的zookeeper的conf目录下,将zoo_sample.cfg拷贝一份重命名为zoo.cfg

(2)clientPort默认2181,配置dataDir(日志文件存放的路径)

(3)zookeeper 依赖于jdk,如果没有安装jdk的需要先安装jdk

(4)启动 zkServer.sh start

3.4 集群环境安装

在 zookeeper 集群中,各个节点总共有三种角色,分别是:leader,follower,observer。

(1)集群我们采用3台机器来搭建zookeeper集群。分别将安装包分发到3台机器上并解压,同时在第一台机器上拷贝一份zoo.cfg。

(2)修改配置文件

修改端口

server.1=IP1:2888:3888 【2888:访问 zookeeper 的端口;
3888:重新选举 leader 的端口】
server.2=IP2.2888:3888
server.3=IP3.2888:2888
 
配置解释:server.A=B:C:D 中
A 是一个数字,表示这个是第几号服务器;
B 是这个服务器的 ip 地址;
C 表示的是这个服务器与集群中的 Leader服务器交换信息的端口;
D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
 
     如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。在集群模式下,集群中每台机器都需要感知到整个集群是由哪几台机器组成的,在配置文件中,按照格式server.id=host:port:port,每一行代表一个机器配置id: 指的是 server ID,用来标识该机器在集群中的机器序号。

(3)新建 datadir 目录,设置 myid

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

(4) 分别启动每台机器上的 zookeeper,3台启动完后会产生一台leader,另外两台就成了follwer。

3.5 带 Observer 角色的集群

本身 zookeeper 的集群性能已经很好了,但是如果超大量的客户端访问,就势必需要增加 zookeeper 集群的服务器数量,而随着服务器的增加,zookeeper 集群的写性能就会下降;zookeeper 中 znode 的变更需要半数及以上服务器投票通过,而随着机器的增加,由于网络消耗等原因必定会导致投票成本增加,也就导致性能下降的结果。Observer的出现就是为了在不影响写性能的情况下扩展 zookeeper的读性能。

本文地址:https://blog.csdn.net/King__Jack/article/details/107388932

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网