zookeeper集群搭建
1、软件环境(3台服务器)
192.168.200.175 server1
192.168.200.176 server2
192.168.200.177 server3
(1)Linux服务器最好一台、三台、五台、(2*n+1),Zookeeper集群的工作是超过半数才能对外提供服务,3台中两台超过半数,允许1台挂掉
(2)安装 jdk1.8 zookeeper是用java写的所以需要JAVA环境
(3)Zookeeper的版本Zookeeper 3.8.0版本
2、配置&安装Zookeeper
(1)安装jdk(省略)
[root@bogon program]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
(2)软件下载
下载地址:https://downloads.apache.org/zookeeper/zookeeper-3.8.0/
先创建项目目录,方便后期管理(我是统一放到/srv/program/下)
#zookeeper:项目目录
#zkdata:存放快照日志
#zkdatalog:存放事物日志
mkdir -p zookeeper/zkdata
mkdir -p zookeeper/zkdatalog
下载好后解压:
tar zxf apache-zookeeper-3.8.0-bin.tar.gz -C /srv/program/zookeeper/
(3)修改配置文件
#进入到zookeeper的conf目录中
cd /srv/program/zookeeper/apache-zookeeper-3.8.0-bin/conf/
[root@bogon conf]# ll
-rw-r--r-- 1 user1 ftp 535 2月 25 16:47 configuration.xsl
-rw-r--r-- 1 user1 ftp 4559 2月 25 16:47 logback.xml
-rw-r--r-- 1 user1 ftp 1183 2月 25 16:47 zoo_sample.cfg
zoo_sample.cfg 这个文件是官方给我们的zookeeper的样板文件,给他复制一份命名为zoo.cfg,zoo.cfg是官方指定的文件命名规则。
[root@bogon conf]# cp zoo_sample.cfg zoo.cfg
[root@bogon conf]# vim zoo.cfg
#更改
dataDir=/srv/program/zookeeper/zkdata
#添加
dataLogDir=/srv/program/zookeeper/zkdatalog
server.1=192.168.200.175:2888:3888
server.2=192.168.200.176:2888:3888
server.3=192.168.200.177:2888:3888
#server.1 这个1是服务器的标识也可以是其他的数字,表示这个是第几号服务器,用来标识服务器,这个标识要写到快照目录下面myid文件里
#192.168.200.175为集群里的IP地址,第一个端口是master和slave之间的通信端口,默认是2888,第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口默认是3888
配置文件解释:
#tickTime:
这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
#initLimit:
这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒
#syncLimit:
这个配置项标识 Leader 与Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是5*2000=10秒
#dataDir:
快照日志的存储路径
#dataLogDir:
事物日志的存储路径,如果不配置这个那么事物日志会默认存储到dataDir制定的目录,这样会严重影响zk的性能,当zk吞吐量较大的时候,产生的事物日志、快照日志太多
#clientPort:
这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
(4)创建myid文件
#server1
echo "1" > /srv/program/zookeeper/zkdata/myid
#server2
echo "2" > /srv/program/zookeeper/zkdata/myid
#server3
echo "3" > /srv/program/zookeeper/zkdata/myid
(5)启动服务并查看
#进入到Zookeeper的bin目录下
cd /srv/program/zookeeper/apache-zookeeper-3.8.0-bin/bin/
#启动服务(3台都需要操作)
[root@bogon bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /srv/program/zookeeper/apache-zookeeper-3.8.0-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
检查服务状态
通过status就能看到状态:
[root@bogon bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /srv/program/zookeeper/apache-zookeeper-3.8.0-bin/bin/../conf/zoo.cfg #配置文件
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower #他是否为领导
zk集群一般只有一个leader,多个follower,主一般是相应客户端的读写请求,而从主同步数据,当主挂掉之后就会从follower里投票选举一个leader出来。