zookeeper学习及集群搭建

zookeeper简介:

是什么?

zookeeper是分布式协调服务,目的是为用户的分布式应用提供协调服务。

干什么的?

  • 主从协调(hadoop、hbase等均使用该服务)

  • 服务器上下线

  • 统一配置服务

  • 分布式共享锁

  • 统一名称服务

怎么运作的?

zookeeper也是一个分布式程序,由多个节点组成,节点又分为leader和follower(还有一种系节点成为Observer)两种角色;zookeeper底层主要是由一个树形结构进行对数据的存储,每个树节点称为znode,并且可以监控这些树节点来实现数据监听,通过这样的底层zookeeper实现了不同的服务。然而zookeeper作为第三方,那它一定要实现高可用,zookeeper集群的高可用基本原理是必须有半数以上节点运行,集群即可正常提供服务。

节点类型:(Znode)

持久型节点:PERSISTENT

临时型节点:EPHEMERAL

顺序型节点:SEQUENTIAL

服务器状态:

Looking状态:该状态下表示节点可以进行选举

Following状态:由looking状态转换而来

Leading状态:由looking状态转换而来

Observer状态:该状态下的节点只进行读数据

事务ID:(zxid)

leader节点会为每一个客户端提交的事务分配一个全局的事务id,并且该id是从0递增的。

集群结构:

zookeeper集群中为了选举出一个主节点,集群搭建时必须要搭建3、5、7等奇数个节点,这样就可以通过相应的选举算法(paxos算法)选举出一个leader节点,用于管理整个集群,其他节点成为follower.

选举过程:(新启动期间)

当主机server1上线时,通过投票选举机制server1会给自己投一票,当然这并不能选举出一个leader;当server2上线时,server2也给自己投了一票,这样仍然不能选举出一个leader,此时根据算法会先比较这两个节点的事务id,发现两节点事务id均为0,然后会再进行myid(机器id)比较,最后发现server2的myid要大,所以server1会将再次投票将自己的一票投给server2,server2发现自己的票数达到节点数的一半,系统将server2的状态从looking转换为leading状态,server1从looking状态转换为following状态;这样当一个主机的票数超过集群数半数的时候选举出了一个leader节点,新上线的节点自动成为follower节点。

数据更新:

zookeeper集群中数据的更新,是通过leader节点保证数据一致性的。如上图:当server1更新了一个数据后,先是通过与leader节点通讯,然后将数据告诉leader节点,最后leader节点将新的数据下发给其他follower节点。

集群搭建:

我这里准备搭建三个节点的zookeeper集群。

  1. 准备安装包:

安装包可以通过百度找到(-。-)

    2.上传安装包:

这里可以通过xftp,sftp或者rz上传软件包

  1. 解压安装包

使用tar命令先将jdk解压到一个目录下,并进行环境配置(我之前写过shell自动安装和配置,可以尝试自动化安装部署),然后解压zookeeper软件包到一个目录。

配置好jdk环境变量后使用source /etc/profile 命令,更新环境配置

  1. 配置相应文件

进入zookeeper目录中,首先创建一个data目录(用于存放数据),然后进入到conf目录使用mv命令将zoo_simple.cfg文件名修改为zoo.cfg,然后使用vi或vim编辑器进行相应配置。

1.在data目录中创建一个myid文件,用于指定节点id

2.修改datadir路径到刚刚创建的data路径,添加图二指定内容,来指定集群节点以及通讯端口,配置好后保存退出

对于图二中的server.1、server.2、server.3,其中的数字要与myid配置文件中数字保持一致,该id指定机器id在启动时用于选举使用。

3.配置好上述文件后,现在我们需要将配置好的jdk和zookeeper传输给其他节点,对于jdk无需更改配置,只需在每台主机上配置环境/etc/profile,然而对于zookeeper的话,需要更改data目录下的myid为各自id号

server1-->myid:1

server2-->myid:2

server3-->myid:3

  1. 启动集群

注意:启动集群之前需要先将各节点的防火墙关闭。

各节点进入zookeeper的bin目录使用zkServer.sh start 命令启动zookeeper。然后使用zkServer.sh status查看zk状态。

集群启动成功

猜你喜欢

转载自blog.csdn.net/a602519773/article/details/81909221
今日推荐