Zookeeper服务自身组成一个集群(2n+1个服务容许n个失效)。Zookeeper服务有两个角色,一个是leader,负责写服务和数据同步,剩下的是follower,提供读服务,leader失效后会在follower中从新选举新的leader。java
Zookeeper逻辑图以下,apache
客户端能够链接到每一个server,每一个server的数据彻底相同。服务器
每一个follower都和leader有链接,接受leader的数据更新操做。ide
Server记录事务日志和快照到持久存储。测试
大多数server可用,总体服务就可用。ui
Zookeeper表现为一个分层的文件系统目录树结构(不一样于文件系统的是,节点能够有本身的数据,而文件系统中的目录节点只有子节点)。spa
数据模型结构图以下,3d
圆形节点能够含有子节点,多边形节点不能含有子节点。一个节点对应一个应用,节点存储的数据就是应用须要的配置信息。日志
顺序一致性:按照客户端发送请求的顺序更新数据。server
原子性:更新要么成功,要么失败,不会出现部分更新。
单一性 :不管客户端链接哪一个server,都会看到同一个视图。
可靠性:一旦数据更新成功,将一直保持,直到新的更新。
及时性:客户端会在一个肯定的时间内获得最新的数据。
Zookeeper集群的安装,节点数2*n+1,
tickTime: zookeeper中使用的基本时间单位, 毫秒值.
dataDir: 数据目录. 能够是任意目录.
dataLogDir: log目录, 一样能够是任意目录. 若是没有设置该参数, 将使用和dataDir相同的设置.
clientPort: 监听client链接的端口号.
1 、准备Zookeeper环境
配置java环境变量:
export JAVA_HOME=/usr/local/jdk1.7.0_45
export ZOOKEEPER_HOME=/usr/local/zookeeper
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$ZOOKEEPER_HOME/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin:$ZOOKEEPER_HOME/bin
rpm安装jdk路径:export JAVA_HOME=/usr/java/jdk1.7.0_45
配置hostname:
vi /etc/profile
172.16.23.195zookeeper1
172.16.23.196zookeeper2
reboot
2、配置zookeeper
Wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.3.6/
tar –xvzf zookeeper-3.3.6.tar.gz
mv /zookeeper-3.3.6 /usr/local/zookeeper
cd /usr/local/zookeeper/conf
mv mv zoo_sample.cfg zoo.cfg
vi zoo.cfg
添加如下内容zookeeper集群:
server.1= zookeeper1:2888:3888
server.2= zookeeper1:2888:3888
标识Server ID:
touch myid
1
其它zookeeper服务器配置步骤相同,更改myid值。
启动zookeeper:
/usr/local/zookeeper/bin/zkServer.sh start
查看启动状态:
/usr/local/zookeeper/bin/zkServer.sh status
启动客户端脚本:
zkCli.sh -server zookeeper1:2181
显示根目录下、文件:
ls /
建立文件,并设置初始内容:
create /test 1注释:1为赋值。
获取文件内容:
get /test
测试集群效果,登陆另外一台zookeeper
zkCli.sh -server zookeeper2:2181
ls /
正确显示新建节点test,集群正常。
修改文件内容:
set /test 2
删除文件:
delete /test
退出客户端:
quit