欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

初识zookeeper

程序员文章站 2022-04-11 21:53:30
1. 协调服务的由来 在分布式架构下,当服务越来越多,规模越来越大时,对应的机器数量也越来越大,单靠人工来管理和维护服务及地址的配置地址信息会越来越困难,单点故障的问题也开始凸显出来,一旦服务路由或者负载均衡服务器宕机,依赖他的所有服务均将失效。 此时,需要一个能够动态注册服务和获取服务的地方,来统一管理服务名称和所对应的服务地址列表信息,我们称之为服务配置中心。服务提供者在启动时,会将其提供的服务名称和服务器地址注册到服务配置中心;服务消费者通过服务配置中心来获取需要调用服务的机器地......

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