2021年11月14日 20:58
原创作品,转载时请务必以超链接形式标明文章原始出处,否则将追究法律责任。

马上又到年底了,各种年会准备要开始了,这不我们小组拍个合影,BigData小组,一个有意义,一个呆着让你一天当两天用的小组,一个让你不断进步的小组。

image.png

拍照归拍照,集群我们也要造。今天看看CentOS上Zookeeper集群怎么搭建。

由于本人机器有限,只买了一台阿里云的ECS,所以只能换端口来搭建了,也就是说只是一个伪集群,不过搭建的过程是一样的。

OK,首先我们先了解一下什么是zookeeper,应用场景是什么。

  • 它是一个开源的,分布式应用程序协调服务

  • 它可以实现

    • 统一配置管理

    • 统一命名服务

    • 分布式锁

    • 集群管理

我们搭建它的主要目的还是第一条,统一配置管理,比如我们搭建一个solr集群,由于solr的schema每个节点配置都是一样的,如果节点少我们可以手动去更新,但是如果节点多了的话,显然是不能手动去完成的。所以我们将配置文件放到zookeeper集群,大家都来访问这个集群中的配置,由于是集群,所以比较稳定,而且一个节点配置的变化可以很快同步到其他zookeeper节点,也无需担心配置丢失。

说了这些概念,其实网上一搜一大堆,给你讲的明明白白的,我们直接进入正题。

首先我们去官网下载zookeeper-3.7.0版本的压缩包,使用Winscp工具copy到linux机器并解压,如下

image.png

接着我们去usr/local下面新建一个文件夹,命名为solrcloud,将压缩包copy到solrcloud目录下,并对其进行解压,如下

image.png

解压完成后我们在solrcloud目录下新建三个文件夹zookeeper01,zookeeper02,zookeeper03,并将解压的zookeeper-3.7.0文件夹下所有的文件都copy到这三个文件中(命令:cp -r 原目录 新目录),如下,同时我们需要再在这三个文件中各新建一个data文件夹

image.png

接下来我们在data文件下新建一个myid文件(命令:touch myid)

对于zookeeper01,我们在myid中写入1,对于zookeeper02,写入2,对于zookeeper03 写入3

image.png

ok,myid文件创建好之后,我们需要修改三个文件夹下面的配置文件,我们先将原来的zoo_sample.cfg文件命名为zoo.cfg

image.png

然后使用vi命令进行编辑,我们需要修改如下几个配置,对于zookeeper01我们的clientPort=2181,zookeeper02我们的clientPort=2182,zookeeper03我们的clientPort=2183,另外dataDir需要指向各自的data文件夹地址,最下面的server.1,sever.2,server.3大家都一样。这里的1,2,3的配置分别对应我们刚才新建的myid文件中写入的数字。

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/usr/local/solrcloud/zookeeper01/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
maxClientCnxns=100
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=172.26.233.95:2881:3881
server.2=172.26.233.95:2882:3882
server.3=172.26.233.95:2883:3883

这里的server后面的第一个端口的含义是节点之间通信的端口号,第二个端口是节点之间投票选举的端口号,clientPort是客户端连接的端口号。

关于其他的配置项,解释如下

  • tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,单位是毫秒

  • initLimit:集群中的follower服务器(F)与leader服务器(L)之间 初始连接 时能容忍的最多心跳数(tickTime的数量),initLimit=10当已经超过 10个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败

  • syncLimit:集群中的follower服务器(F)与leader服务器(L)之间 请求和应答 之间能容忍的最多心跳数(tickTime的数量)

  • dataDir:Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里

  • clientPort:Zookeeper 会监听这个端口也是客户端连接 Zookeeper 服务器的端口,接受客户端的访问请求

ok,修改完之后,我们进入到zookeeper01的bin目录

image.png

然后使用命令./zkServer.sh start启动第一个zookeeper节点,后面两个节点也是使用这个命令进行启动,最后我们看一下集群的状态

image.png

我们发现02是老大,其他两个是随从,如果客户端有请求,follower如果收到写请求,就会先发给leader,leader将要写入的数据发送到所有的follower节点,如果超过半数以上的节点写入成功,则向客户端返回写入成功。

src=http___upload-images.jianshu.io_upload_images_315466-839d14e6761fc545.png&refer=http___upload-images.jianshu.jpg




发表评论
匿名  
用户评论
暂无评论