马上又到年底了,各种年会准备要开始了,这不我们小组拍个合影,BigData小组,一个有意义,一个呆着让你一天当两天用的小组,一个让你不断进步的小组。
拍照归拍照,集群我们也要造。今天看看CentOS上Zookeeper集群怎么搭建。
由于本人机器有限,只买了一台阿里云的ECS,所以只能换端口来搭建了,也就是说只是一个伪集群,不过搭建的过程是一样的。
OK,首先我们先了解一下什么是zookeeper,应用场景是什么。
它是一个开源的,分布式应用程序协调服务
它可以实现
统一配置管理
统一命名服务
分布式锁
集群管理
我们搭建它的主要目的还是第一条,统一配置管理,比如我们搭建一个solr集群,由于solr的schema每个节点配置都是一样的,如果节点少我们可以手动去更新,但是如果节点多了的话,显然是不能手动去完成的。所以我们将配置文件放到zookeeper集群,大家都来访问这个集群中的配置,由于是集群,所以比较稳定,而且一个节点配置的变化可以很快同步到其他zookeeper节点,也无需担心配置丢失。
说了这些概念,其实网上一搜一大堆,给你讲的明明白白的,我们直接进入正题。
首先我们去官网下载zookeeper-3.7.0版本的压缩包,使用Winscp工具copy到linux机器并解压,如下
接着我们去usr/local下面新建一个文件夹,命名为solrcloud,将压缩包copy到solrcloud目录下,并对其进行解压,如下
解压完成后我们在solrcloud目录下新建三个文件夹zookeeper01,zookeeper02,zookeeper03,并将解压的zookeeper-3.7.0文件夹下所有的文件都copy到这三个文件中(命令:cp -r 原目录 新目录),如下,同时我们需要再在这三个文件中各新建一个data文件夹
接下来我们在data文件下新建一个myid文件(命令:touch myid)
对于zookeeper01,我们在myid中写入1,对于zookeeper02,写入2,对于zookeeper03 写入3
ok,myid文件创建好之后,我们需要修改三个文件夹下面的配置文件,我们先将原来的zoo_sample.cfg文件命名为zoo.cfg
然后使用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目录
然后使用命令./zkServer.sh start启动第一个zookeeper节点,后面两个节点也是使用这个命令进行启动,最后我们看一下集群的状态
我们发现02是老大,其他两个是随从,如果客户端有请求,follower如果收到写请求,就会先发给leader,leader将要写入的数据发送到所有的follower节点,如果超过半数以上的节点写入成功,则向客户端返回写入成功。