简介

zookeeper是一个分布式协调服务,能够为分布式应用程序提供协调服务。

1. zookeeper是为别的分布式程序服务的。

2. zookeeper本身就是一个分布式程序。

zookeeper集群分为两种角色:Leader和Follower,Leader的选举通过zab算法进行(PAXOS算法的简化版)。

集群中半数节点以上存活,就能提供服务。

3. zookeeper提供的服务包含:主从协调、服务器节点动态上下线、统一配置管理、分布式共享锁等等。

4. zookeeper底层只提供了两个功能:

4.1 管理用户提交的数据。

4.2 提供数据节点的监听服务。

特性

1. 全局数据一致性:每个server保存一份相同的数据副本,客户端无论连接到哪个server,数据都是一致的。

2. 分布式读写,更行操作由leader实施。

3. 更新请求顺序进行。来自同一个客户端的更新请求按其发送顺序依次进行。

4. 数据更新的原子性。

4. 数据实时性。

数据结构

1. 层次化的目录结构。

2. 每个节点为znode,并且有一个唯一的路径标识。

3. 节点可以包换数据和子节点(EPHEMERAL节点没有子节点)。

4. 节点可以设置监听器。

节点类型

1. 短暂节点(ephemeral),断开连接时会自动删除。

2. 持久节点(persistent)。

3. 节点还可以拥有序列号,为sequential。

Zookeeper集群的安装

1. Centos的准备

准备方式可以参考另一篇博文。

一共准备三台虚拟机,分别将其命名为zookeeper1.com、zookeeper2.com、zookeeper3.com

然后创建zookeeper用户

adduser zookeeper
passwd zookeeper

将密码直接设置成zookeeper即可。

设置sudo权限

使用root用户执行:

vim /etc/sudoers

在root ALL=(ALL) ALL下一行添加:

zookeeper ALL=(ALL) ALL

退出保存。

然后切换到zookeeper用户

su zookeeper

2. Java环境安装

在zookeeper用户目录下创建文件夹:

mkdir zip apps

jdk使用7_79版本。然后将安装包上传到zip目录。

执行:

tar -zxvf jdk-7u79-linux-x64.tar.gz
mv jdk-7u79-linux-x64 ~/apps
sudo vi /etc/profile

在文件末尾添加:

export JAVA_HOME=/home/zookeeper/apps/jdk1.7.0_79

执行:

sudo source /etc/profile

执行java -version,如果可以看到jdk版本信息,则说明安装成功。

3. Zookeeper的安装

首先,准备zookeeper的安装包,这里使用的是3.4.5版本,你可以在 这里下载。

在zookeeper用户目录下创建文件夹:

mkdir zip apps

在以后的博文中,应用程序都会安装在apps目录下, 所有的安装包都会放在zip目录下。

将下载好的安装包,上传到zip目录中,解压

tar -zxvf zookeeper-3.4.5.tar
mv zookeeper-3.4.5 ../apps

进入到安装目录

cd ../apps/zookeeper-3.4.5

修改配置文件

cp conf/zoo_sample.cfg conf/zoo.cfg
vi zoo.cfg

修改内容如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/zookeeper/apps/zookeeper-3.4.9/data
dataLogDir=/home/zookeeper/apps/zookeeper-3.4.9/log
clientPort=2181
server.1=zookeeper1.com:2888:3888
server.2=zookeeper2.com:2888:3888
server.3=zookeeper3.com:2888:3888

其中,最下面的几行,server.x是不能修改的,x代表第几台zookeeper机。zookeeperx.com是每一台主机的域名。端口号2888和3888是默认的。

配置环境变量:

sudo vi /etc/profile

在末尾添加:

export ZOOKEEPER_HOME=/home/zookeeper/apps/zookeeper-3.4.9
export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin

保存设置

sudo source /etc/profile

将上述的配置在每台centos上执行。也可以使用scp命令进行传输。

然后,在每台zookeeper机上配置集群id

进入data目录,这个data目录就是在zoo.cfg文件里配置的

vi /home/zookeeper/apps/zookeeper-3.4.5/data/myid

当前机对应的是zoo.cfg文件中的server.x的哪个数字,就将值填进去。例如,直接写个1,然后退出保存。

然后关闭防火墙,或开放2888,3888端口。

sudo service iptables stop

设置hosts文件,在每台服务器上执行:

sudo vi /etc/hosts

在末尾添加:

192.168.232.101 zookeeper1.com
192.168.232.102 zookeeper2.com
192.168.232.103 zookeeper3.com

ip地址根据自己的实际情况修改。

最后,启动zookeeper集群

zkServer.sh start

查看zookeeper状态

zkServer.sh status

查看到如下,说明启动成功:

zookeeper 集群 队列服务 zookeeper集群架构_数据

zookeeper 集群 队列服务 zookeeper集群架构_zookeeper_02