ZooKeeper的搭建

1. 下载zookeeper

下载地址: https://archive.apache.org/dist/zookeeper/

直接去Apache官网Projects找zookeeper项目,直接下载自己想要的版本即可,这里我使用3.4.6版本进行演示


进去之后下载.tar.gz即可

如果使用的是没有桌面版的Linux系统,可以使用wget直接下载

2. zookeeper配置环境变量

本人习惯将所有的安装文件放在/opt/software,解压后的文件放在/opt/apps目录下,个人根据自己的习惯即可

下载到/opt/software目录下,解压

[yangqi@first software]$ sudo tar -zvxf zookeeper-3.4.6.tar.gz -C ../apps/

切换到/opt/apps目录下,对刚刚解压的zookeeper目录,建立软链接,方便配置环境变量

[yangqi@first apps]$ sudo ln -s zookeeper-3.4.6/ zookeeper

在当前用户下进行配置环境变量,尽量不要配置在root用户下,防止因为环境变量配置出错,导致一些系统问题

[yangqi@first apps]$ vi ~/.bash_profile
# zookeeper environment
ZOOKEEPER_HOME=/opt/apps/zookeeper
PATH=$ZOOKEEPER_HOME/bin:$PATH

export ZOOKEEPER_HOME PATH

执行source ~/.bash_profile,使配置的环境变量生效

[yangqi@first apps]$ source ~/.bash_profile
3. 独立模式的zookeeper配置

输入zkServer.sh start,此时会显示如下

因为zookeeper启动时,会加载一个配置文件zoo.cfg

[yangqi@first apps]$ cd zookeeper/conf/
[yangqi@first conf]$ ll
总用量 12
-rw-rw-r--. 1 yangqi yangqi  535 2月  20 2014 configuration.xsl
-rw-rw-r--. 1 yangqi yangqi 2161 2月  20 2014 log4j.properties
-rw-rw-r--. 1 yangqi yangqi  922 2月  20 2014 zoo_sample.cfg
[yangqi@first conf]$ cp zoo_sample.cfg zoo.cfg
[yangqi@first conf]$ vi zoo.cfg

只需要修改dataDir,一般修改在zookeeper目录下的data文件

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/apps/zookeeper/data
clientPort=2181

个人建议,将/opt目录的用户和所有用户组更改为自己常用的用户

[yangqi@first apps]$ sudo chown yangqi:yangqi -R /opt/

重新进行测试即可,如果显示以下信息,则表示zookeeper已经安装成功

[yangqi@first conf]$ zkServer.sh start

可以使用jps查看一下进程,因为zookeeper启动之后会启动一个名为QuorumPeerMain进程

同时,也可以使用zkServer.sh status查看此时zookeeper集群的状态,因为我们只配了一台,所以zookeeper出去独立工作模式,此时状态显示为standalone

[yangqi@first conf]$ jps
[yangqi@first ~]$ zkServer.sh status

4. 搭建zookeeper集群

修改zoo.cfg的内容

[yangqi@first apps]$ cd zookeeper/conf/
[yangqi@first conf]$ vi zoo.cfg

我切换到了另外7台节点,演示7个zookeeper节点,在它们7个节点的配置文件中增加以下内容(按照自己的配置进行修改)

server.1=secondary:2888:3888

[参数解析]

server:固定参数,不可以修改

1:节点的id,可以自己定义,使用自然数,对应data目录中的myid文件的id

secondary:ip地址,配置了ip地址的映射关系,所有使用名称

2888:zookeeper集群中进行交互时,使用的端口号(应该说是leader和follow进行交互时,使用的端口号)

3888:zookeeper在进行选举期间使用的端口号

server.1=secondary:2888:3888
server.2=master:2888:3888
server.3=slave1:2888:3888
server.4=slave2:2888:3888
server.5=slave3:2888:3888
server.6=slave4:2888:3888
server.7=slave5:2888:3888

配置完之后,记住每个id对应的ip地址,先启动zookeeper集群,现在每个都处于独立模式,之后会在上面配置的dataDir文件路径下生成data目录

[yangqi@secondary ~]$ zkServer.sh start
[yangqi@master ~]$ zkServer.sh start
[yangqi@slave1 ~]$ zkServer.sh start
[yangqi@slave2 ~]$ zkServer.sh start
[yangqi@slave3 ~]$ zkServer.sh start
[yangqi@slave4 ~]$ zkServer.sh start
[yangqi@slave5 ~]$ zkServer.sh start

进入每个节点生成的data目录下,新建myid文件,存储每个节点对应的id(我使用一个进行演示)

也可以使用vi,会自动新建一个文件

[yangqi@secondary ~]$ cd /opt/apps/zookeeper/data/
[yangqi@secondary ~]$ vi myid

在secondary中的myid文件中写上刚才配置时所使用的id,我这里的secondary的id为1,所以直接在myid的文件中写1

写完这些配置文件之后,可以把刚才启动的zookeeper集群全部重启

[yangqi@secondary ~]$ zkServer.sh restart
[yangqi@master ~]$ zkServer.sh restart
[yangqi@slave1 ~]$ zkServer.sh restart
[yangqi@slave2 ~]$ zkServer.sh restart
[yangqi@slave3 ~]$ zkServer.sh restart
[yangqi@slave4 ~]$ zkServer.sh restart
[yangqi@slave5 ~]$ zkServer.sh restart

之后查看zookeeper集群的状态

[yangqi@secondary ~]$ zkServer.sh status
[yangqi@master ~]$ zkServer.sh status
[yangqi@slave1 ~]$ zkServer.sh status
[yangqi@slave2 ~]$ zkServer.sh status
[yangqi@slave3 ~]$ zkServer.sh status
[yangqi@slave4 ~]$ zkServer.sh status
[yangqi@slave5 ~]$ zkServer.sh status

此时的集群状态,有一个是leader,其余都是follower