zookeeper是一个为分布式应用提供一致性服务的软件,它是开源的Hadoop项目的一个子项目,并根据google发表的一篇论文来实现的。zookeeper为分布式系统提供了高笑且易于使用的协同服务,它可以为分布式应用提供相当多的服务,诸如统一命名服务,配置管理,状态同步和组服务等。zookeeper接口简单,我们不必过多地纠结在分布式系统编程难于处理的同步和一致性问题上,你可以使用zookeeper提供的现成(off-the-shelf)服务来实现来实现分布式系统额配置管理,组管理,Leader选举等功能。
zookeeper集群的安装,准备三台服务器,此处我用单机伪集群方式搭建
clientPort=2181
server1:192.168.25.139:2888:3888
clientPort=2182
server1:192.168.25.139:2888:3888
clientPort=2183
server1:192.168.25.139:2888:3888
有多台主机,可以参考[https://blog.csdn.net/u012637358/article/details/80989446 ]
单机也可以参考[ https://blog.csdn.net/sjmz30071360/article/details/82153191?utm_source=blogxgwz0 ]
以下是我自己本机试过的:
1. 下载zookeeper
访问地址: [http://mirror.bit.edu.cn/apache/zookeeper/ ]
2. 使用xshell 拖拽上传
-
lrzsz是一款在linux里可代替ftp上传和下载的程序。它有两个命令rz和sz。
在联网的状态中,在centos里直接yum -y install lrzsz 程序会自动安装好。 -
window —> Linux
直接拖拽 或者 输入rz 回车 选择文件 -
Linux —> windows
sz 文件 回车,选择保存路径ok
3.解压到目录
以我普通用户目录为例:
/home/xzb
cd ~
mkdir -p software
cd software
tar -zxvf zookeeper-3.5.4-beta.tar.gz
mv zookeeper-3.5.4-beta/ zookeeper3.5.4
4. 创建数据持久化目录和日志目录
cd ~
创建dataDir1 dataDir2 dataDir3 来分别存放数据
mkdir -p ~/data/zookeeper/dataDir{1,2,3}
日志目录
mkdir -p ~/data/zookeeper/log
5.配置环境便令
vi ~/.bash_profile
添加以下内容,安装位置
export ZOOKEEPER_HOME=/home/xzb/software/zookeeper3.5.4
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf
保存配置信息
source ~/.bash_profile
6.复制每个zookeeper服务所需的配置文件
cd ~/software/zookeeper3.5.4/conf
cp zoo_sample.cfg zoo1.cfg
cp zoo_sample.cfg zoo2.cfg
cp zoo_sample.cfg zoo3.cfg
分别编辑 zoo1.cfg zoo2.cfg zoo3.cfg
zoo.cfg 文件的各项参数
#文件配置如下
#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=/var/data/zookeeper
#日志保存路径,需要手动创建
dataLogDir=/var/log/zookeeper/log
#the port at which the clients will connect
#即zk对外服务端口
clientPort=2181
#cluster config
#第一个端口用于Follower和Leader之间的数据同步和其它通信
#第二个端口用于Leader选举过程中投票通信
server.1=192.168.25.139:2888:3888
server.2=192.168.25.139:2888:3888
server.3=192.168.25.139:2888:3888
#the maximum number of client connections.
#increase this if you need to handle more clients
#maxClientCnxns=60
##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
修改zoo1.cfg参数如下:
#example sakes.
dataDir=/home/xzb/data/zookeeper/dataDir1
dataLogDir=/home/xzb/data/zookeeper/log
#the port at which the clients will connect
clientPort=2181
server.1=192.168.25.139:2888:3888
server.2=192.168.25.139:2888:3888
server.3=192.168.25.139:2888:3888
修改zoo2.cfg参数如下:
dataDir=/home/xzb/data/zookeeper/dataDir2
dataLogDir=/home/xzb/data/zookeeper/log
#the port at which the clients will connect
clientPort=2182
server.1=192.168.25.139:2888:3888
server.2=192.168.25.139:2888:3888
server.3=192.168.25.139:2888:3888
修改zoo3.cfg参数如下:
#example sakes.
dataDir=/home/xzb/data/zookeeper/dataDi3
dataLogDir=/home/xzb/data/zookeeper/log
#the port at which the clients will connect
clientPort=2183
server.1=192.168.25.139:2888:3888
server.2=192.168.25.139:2888:3888
server.3=192.168.25.139:2888:3888
7. 创建myid文件
server1节点
cd ~/data/zookeeper/dataDir1
echo "1">myid
servier2节点
cd ~/data/zookeeper/dataDir2
echo "2">myid
server3节点
cd ~/data/zookeeper/dataDir3
echo "3">myid
8. 启动服务
cd ~/software/zookeeper3.5.4/bin
./zkServer.sh start ../conf/zoo1.cfg
./zkServer.sh start ../conf/zoo2.cfg
./zkServer.sh start ../conf/zoo3.cfg
查看服务状态:
./zkServer.sh status ../conf/zoo1.cfg
./zkServer.sh status ../conf/zoo2.cfg
./zkServer.sh status ../conf/zoo3.cfg
9.查看zk进程
[xzb@xzb bin]$ jps
8811 QuorumPeerMain
9327 Jps
10. 对外提供访问服务端口
2181 2182 2183
root 用户
vi /etc/sysconfig/iptables
添加以下开放的端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2182 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2183 -j ACCEPT
重启端口服务
service iptables restart
注意事项
在一台机器上部署了3个server,需要注意的是在集群为分布式模式下我们使用的每个配置文档模拟一台机器,也就是说单台机器及上运行多个Zookeeper实例。但是,必须保证每个配置文档的各个端口号不能冲突,除了clientPort不同之外,dataDir也不同。另外,还要在dataDir所对应的目录中创建myid文件来指定对应的Zookeeper服务器实例。
■ clientPort端口:如果在1台机器上部署多个server,那么每台机器都要不同的 clientPort,比如 server1是2181,server2是2182,server3是2183
■ dataDir和dataLogDir:dataDir和dataLogDir也需要区分下,将数据文件和日志文件分开存放,同时每个server的这两变量所对应的路径都是不同的
■ server.X和myid: server.X 这个数字就是对应,data/myid中的数字。在3个server的myid文件中分别写入了0,1,2,那么每个server中的zoo.cfg都配 server.0 server.2,server.3就行了。因为在同一台机器上,后面连着的2个端口,3个server都不要一样,否则端口冲突