zookeeper的安装
一.前言
zookeeper开源组件是为分布式应用,提供协调服务的一种解决方案。本文主要是介绍在Centos7的操作系统中,如何以单机,伪集群,集群的方式来安装部署zookeeper服务。zookeeper要求的jdk版本为1.6以上。本文假定在Centos7操作系统中已经安装了jdk,因此不在复述如何安装jdk。
二.下载安装包
我们可以登录https://archive.apache.org/dist/zookeeper/的网址,选择相应的版本的zookeeper来进行安装。
本文中是以zookeeper的3.9.2版本为例来进行安装。使用wget命令把相应版本的zookeeper下载到服务器上。
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.9.2/apache-zookeeper-3.9.2-bin.tar.gz
三.解压安装包
进入到下载zookeeper安装包所在的目录下,使用tar命令对安装包进行解压。
tar -xzvf zookeeper-3.9.2-alpha.tar.gz
四.单机模式
单机模式是只有一台机器上部署一个zookeeper服务,一般是适用于测试和学习用的。
1.生成zoo.cfg配置文件
在zookeeper解压包中的conf目录下,会有一个默认的zoo_sample.cfg模板配置文件。我们一般可以从zoo_sample.cfg复制出一个zoo.cfg文件,然后在zoo.cfg文件中来修改配置项的。
进入zookeeper-3.9.2-alpha/conf目录后,使用cp命令,从zoo_sample.cfg文件,复制并重命名一个zoo.cfg配置文件。
cp zoo_sample.cfg zoo.cfg
2.修改zoo.cfg配置文件
我们可以使用vim命令来编辑zoo.cfg文件。
vim zoo.cfg
(1).修改dataDir配置项
dataDir是zookeeper定义存储快照文件目录的配置项。最好给dataDir设置一个新的目录。这样可以将data目录的文件移出默认的tmp目录,以防止zookeeper产生的快照文件填满了根分区。
dataDir=/opt/soft/ZooKeeper/data
(2).添加dataLogDir配置项
dataLogDir是zookeeper定义存储事务日志文件的配置项。在官方提供的模版配置文件中,是没有dataLogDir这项的。如果不配做dataLogDir的配置,zookeeper会默认将事务日志文件也存储在dataDir 对应的目录下。
建议是将事务日志(dataLogDir)与快照文件(dataDir)单独配置,因为当zookeeper集群在进行频繁的数据读写操作的时候,会产生大量的事务日志信息,将两类日志分开存储可以提高系统性能,同时将两类日志存在不同的存储介质上,也可以减少磁盘的压力。
dataLogDir=/opt/soft/ZooKeeper/logs
3.配置参数说明
参数名 | 说明 |
clientPort | 无默认值,必须配置,不支持系统属性方式配置。当前服务器对外提供服务端口,客户通过此端口与服务器建立连接,一般设置为2181。集群中不需要统一端口,可任意配置端口。 |
dataDir | 无默认值,必须配置。服务器存储快照文件目录。默认情况下,如果没有配置dataLogDir,那么事务日志也会存储在这个目录中。建议将事务日志目录独立配置。 |
tickTime | 默认值:3000(ms),不支持系统属性方式配置。用于配置zookeeper中最小时间单元长度,很多运行时的时间间隔都是使用它的倍数来表示的。 |
initLimit | Leader Zookeeper接收集群其他服务器初始化等待最大时间(10*tickTime)。 |
syncLimit | Leader Zookeeper和集群其他服务器通信最大时间(5*tickTime)。 |
对于其他的配置参数,我们可以以官方模版配置文件的默认参数为准,再根据项目运行的实际情况进行调整。至此单机模式的配置部署已经完成。
五.伪集群模式
zookeeper的伪集群模式,其实是将集群中的多个zookeeper服务都部署在同一台机器上,以集群的特性来对外提供服务。
对于伪集群模式,本文中我们将部署三个zookeeper服务。首先将下载的zookeeper安装包解压或复制三份,分别命名为z1,z2,z3。
同以上单机模式的步骤,在z1,z2,z3三个目录下,分别创建data和logs目录,用于存放快照数据和事务日志文件。再依次进入到conf目录下,从模版文件zoo_sample.cfg复制一个zoo.cfg。将配置文件中的dataDir和dataLogDir,设置成创建的data和logs目录。
1.添加server配置项
伪集群和集群模式中,我们都需要在zoo.cfg文件中增加一个server的配置项。server配置项的格式为:server.id=host:port1:port2。server.id配置项是指定了编号为id的zookeeper服务器使用的地址和端口号。每一个server配置项就表示集群中的一台服务器。集群中有几个服务器,就需要配置几个server配置项。
server.id的id为Server ID,用来标识该机器在集群中的编号。id的取值范围是1-255。不同服务器其id需要保持不同。而这个id和myid文件是相关的。id值要与服务器上myid文件的内容保持一致。
每个server.id配置项的值是通过冒号分隔为了三部分:
(1)第一部分为服务器的ip地址或主机名。
(2)第二部分的port1是集群中其他机器与Leader之间通信的端口。
(3)第三部分的port2为当Leader宕机或其他故障时,集群进行重新选举Leader时使用的端口。
由于伪集群中是将所有的zookeeper服务都部署在同一台机器上,所以所有zookeeper服务的server配置项中ip或host是一样的,只是server配置项的id和port1,port2这两个端口号不一样。
2.创建myid文件
zookeeper中的myid文件的值和server.id中的id是一一对应的。我们需要在zookeeper的data每个目录下创建一个myid文件,然后再将服务器在集群中的编号id写入到这个文件中。server.id中的id就是myid文件的内容。
以z1为例,来说明一下如何创建myid文件:
(1).进入z1的data目录下,这个目录是我们在zoo.cfg 文件中dataDir项配置的。
(2).执行命令 echo 1 > myid。这里将1写入到新建的myid文件中。因为z1的server配置项是server.1=192.168.149.129:2222:2223。所以myid文件中的内容就是1,它对应了server.1的1。
同样对于z2,z3也是需要在data目录创建myid文件,然后分别将2,3这两个server的id写入到myid文件中。
对于伪集群是三个zookeeper服务部署在同一台机器上,所以各个服务的zoo.cfg配置文件中的clientPort端口号也是各不同的。
3.z1的zoo.cfg配置
4.z2的zoo.cfg配置
5.z3的zoo.cfg配置
六.集群模式
集群模式和伪集群模式的部署大致相同,由于集群模式zookeeper服务是部署在不同的机器上。相较于伪集群模式,在zoo.cfg配置文件中,server配置项中的ip就是各个服务器的ip,各不相同。
集群模式中每个机器上的zoo.cfg文件都是相同的,而每台机器唯一不同的是server.id对应的myid文件中的数字内容不同而已。
七.启动
(1)进入zookeeper解压包的bin目录
(2)./zkServer.sh start //后台中运行
(3)./zkServer.sh start-foreground //前台中运行,可以方便查看服务器的日志信息输出。
(4)./zkServer.sh status //检查状态
(5)./zkServer.sh stop //停止