简介
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
查看到如下,说明启动成功: