单机模式
一般在开发或者测试环境时使用,生产环境需要考虑高可用
伪集群
在同一台主机上,运行多个Zookeeper实例,即:使用不同的端口来启动服务一般在开发或测试环境时使用,Clinet需要链接到不同的端口
想法1:
下载一个Server,然后使用 --config 来指定不同的配置文件目录,来启动集群,但包里面的Shell文件中,使用的zkEnv.sh定义的日志文件目录,好像不支持使用启动参数的配置,如果要实现这个的话,需要复制多个Server或者修改Shell
真集群
使用真实的物理机子来部署每台Zookeeper 服务
本文基于学习目的,使用伪集群方式来搭建:
JDK的下载与安装【略】
https://www.oracle.com/technetwork/java/javase/downloads/index.html
Zookeeper 下载与解压
http://zookeeper.apache.org/releases.html#download
下载包特别说明:
下载3.5.5 版本的时候,如果直接启动,会在日志输出文件中报错:
[root@localhost zookeeper1]# cat logs/zookeeper-root-server-localhost.localdomain.out
错误: 找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain
解决:
由于我们使用的是Zookeeper自带的 zkServer.sh 来启动服务,且它里面已经写死了配置文件名,所有需要复制一份配置文件,操作如下:
cp ./conf/zoo_sample.cfg ./conf/zoo.cfg
zoo.cfg 名字必需是这个,原因如上!
修改配置如下:
tickTime=2000
initLimit=10
syncLimit=5
# 保存内存快照的数据目录,不要放在 /tmp 下,因为可能会被清除
dataDir=/data/server/zookeeper/data
# 客户端链接的端口,由于在同一台机子上,需要不同的端口
clientPort=2181
# 好像没啥用
dataLogDir=/data/server/zookeeper/logs
# ZNode 的信息,有多少个Server就配置多少个
# server.ID = IP:原子广播端口:选举端口
server.1=192.168.100.101:2881:3881
server.2=192.168.100.101:2882:3882
server.3=192.168.100.101:2883:3883
server.id 是保存在 dataDir 目录的 myid 文件中,有且只有一行
此ID还有相应的限制,数值在1~255之间,如果启用了TTL 节点则限制在 1~254之间,官方文档,如下:
The myid file consists of a single line containing only the text of that machine's id. So myid of server 1 would contain the text "1" and nothing else. The id must be unique within the ensemble and should have a value between 1 and 255. IMPORTANT: if you enable extended features such as TTL Nodes (see below) the id must be between 1 and 254 due to internal limitations.
Zookeeper服务操作命令:启动、停止、重启、状态
./bin/zkServer.sh [start | stop | restart | status]
根据以上命令依次启动服务,启动时,会在目录下生成相应的日志输出文件【zookeeper.out】里面有相应的信息,在启动出错或者无法成功组成集群时查看,最后查看状态,结果如下:
官方参考文档:
http://zookeeper.apache.org/doc/r3.4.14/zookeeperAdmin.html#sc_zkMulitServerSetup