初识zookeeper
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)修改配置文件
修改端口
(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