1

ZooKeeper的一些概念

 1 year ago
source link: https://blog.51cto.com/xiaoahehe/5915835
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

ZooKeeper的一些概念

精选 原创

晓阿赫赫 2022-12-06 14:32:13 博主文章分类:原创 ©著作权

文章标签 zookeeper 文章分类 Linux 系统/运维 阅读数178

ZooKeeper是一个分布式服务框架,主要用来解决分布式应用中经常遇到的一些数据管理问题:命名服务、状态同步、配置中心、集群管理等

命名服务:通过使用命名服务,客户端应用能够根据指定名字来获取资源的实体、服务地址和提供者信息等。在分布式系统中,被命名的实体通常可以是集群中的机器、提供的服务地址或者远程对象等,都可以被称它们为名字,其中最常见的就是分布式框架(如RPC、RMI)中的服务地址列表

状态同步:每个节点除了存储数据内容和node节点状态信息之外,还存储了已经注册的APP状态信息。当有些节点或APP不可用,就将当前状态同步给其他服务。

配置中心:zookeeper采用推拉结合的方式:客户端向服务端注册自己需要关注的节点,一旦该节点的数据发生变更,那么服务端就会向相应的客户端发生Watcher事件通知,客户端接收到这个消息通知后,需要主动到服务端获取最新的数据

集群管理:包括集群监控、集群控制,前者侧重对集群运行时态的收集,后者会集群进程操作与控制。         集群中工作的机器数量、每台机器的运行状态数据收集、机器上下线操作        

zookeeper具有两大特性:

 1客户端如果对zookeeper的一个数据节点注册watcher监听,那么当该数据节点的内容或是其子节点列表发生变更时,zookeeper服务器就会向订阅的客户端发送变更通知

 2对在zookeeper上创建的临时节点,一旦客户端与服务器之间的会话失效,那么该临时节点也会被自动清除                

1、生产者启动 2、生产者注册至zookeeper 3、消费者启动并订阅频道

4、zookeeper通知消费者事件 5、消费者调用生产者 6、监控中心负责统计和监控服务状态

单机环境:

先装openjdk的java环境,然后装zookeeper:https://archive.apache.org/dist/zookeeper

解压后,做软连接  ln -sv /usr/local/src/zookeeper-3.4.14 /usr/local/zookeeper

复制一个新的配置文件,cd /usr/local/zookeeper/conf/ && cp zoo_sample.cfg zoo.cfg

grep ^[a-Z] zoo.cfg  

tickTime   initLimit syncLimit  dataDir  clientPort(zookeeper的客户端端口,默认2181)

zookeeper适用于服务协调,不适合保存大量的业务数据,zookeeper的单条数据不超过1MB,数据使用kafka

zookeeper是复制集群

redis cluster 是分布式集群(槽位)

当用户写入数据时,直连的是leader节点时,直接写入并同步给其他节点,

当用户写入数据直连的是follower节点时,则由该节点将写入的数据路由给leader节点,然后leader节点同步给其他所有folower节点,来完成数据一致性

集群角色:

leader:1、事务请求的唯一调度和处理者,保证集群事务处理的顺序性 2、集群内部哥服务器的调度者

follower:1、处理客户端非事务请求,转发事务请求给leader服务器 2、参与事务请求proposal的投票 3、参与leader的投票

observer:follower 和observer唯一的区别在于observer机器不参与leader的选举过程,也不参与写操作的“过半写成功”策略,因此observer机器可以在不影响写性能的情况下提升集群的读性能

client:请求发起方

zookeeper集群的优势:

1、写入的数据顺序

2、数据一致性(redis是分片,zk是一致的)

3、集群可靠性

4、高性能

集群的配置文件zoo.cfg,配置完直接scp给其他服务器就可以  

tickTime 毫秒,服务器之间的三次心跳检测时间间隔

initLimit 次数,leader与follower初始连接心跳次数,即多少个ticktime时间

syncLimit  L与F初始链接完成后,检测发送和应答心跳的次数。如果F在设置的时间内(SYNC*TICK)不能与L进行通信,那此F将被视为不可用

dataDir  保存数据的目录(集群中节点设置的路径最好一致)

clientPort 接收客户端访问请求的接口

maxClientCnxns 单个客户端ip可以和zookeeper保持的连接数

autopurge.snapRetainCount 、autopurge.purgeinterval v3.4.0新增功能,保留设置快照的份数并删除多余的,多长事件清理一次默认单位是小时

server.1=10.0.0.12:2888:3888  server.服务器编号=服务器ip:LF数据同步端口:LF选举端口 (集群中有几台服务器就配置多少条,每台服务器都要配置相同内容)

集群id: echo "1" >/usr/local/zookeeper/data/myid 这个文件需要自己生成在配置文件中dataDir设置的目录下,服务器的唯一标识SID,集群中唯一

停止或启动服务,查看集群状态:安装目录 /usr/local/zookeeper/bin/zkServer.sh stop/start/status

在哪个目录下启动的zk日志就在哪个目录下,最好找一个固定的目录去启动

节点角色状态:

looking:寻找leader,处于该状态需要进入选举流程

leading:领导者状态,角色已经是leader

following:leader已经选举出来,当前角色是follower

observer:当前角色是observer

ZXID:zookeeper transaction id,每个改变zookeeper状态的操作都会形成一个对应的zxid

myid:服务器的唯一标识SID,通过配置myid文件指定集群中唯一

选举过程: 当集群中的zookeeper节点启动后,会根据配置文件中指定的zookeeper系欸但地址进行leader选举,

1、每个zookeeper都会发出投票,由于第一次选举,因此每个节点都会吧自己当作leader角色进行选举,投票中包含自己的myid和zxid,此时各节点myid为手动配置的数字,zxid为初始生成的值,后期会随着数据更新而自动变化

2、每个节点接受并检查对方的投票信息,比如投票时间、是否状态为LOOKING

3、对比投票,优先检查zxid,zxid大的作为leader;如果zxid相同则继续比较myid大的为leader

成为leader的必要条件: 具有最好zxid;集群中大多数的机器(n/2+1)得到相应并follow选出的leader

心跳机制:leader与follower利用ping来感知对方是否存活,当leader无法响应ping则重新发起leader选举


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK