分布式协调服务:zookeeper

协调服务的功能

在分布式架构中,每个服务器或者服务之间信息的协调和管理是非常有必要的

常见的分布式协调服务有Google的Chubby,Apache的ZooKeeper
因为谷歌的Chubby是不开源的,后来雅虎模仿它开发了zookeeper,并捐赠给Apache,并将其开源供大家使用

我们先从zookeeper的几个功能来了解zookeeper
1.名称服务:什么是名称服务?比如DNS将域名映射到一个IP、手机通讯录将人命映射到手机号...诸如此类功能就是名称服务,在分布式系统中,zookeeper的名称服务是通过名称来跟踪一些服务器或者服务的运行状态

2.分布式锁:在一台机器一个服务上,我们可以用高并发中学到的对象锁,重入锁等知识,来完成不同线程对同一资源的顺序调度。那么在分布式架构下,我们面对的问题要复杂得多,这时候不同进程对于同一资源的调度,就只能使用分布式锁来完成协调,zookeeper提供一种简单的方式来实现分布式互斥(distributed mutexes

3.配置管理:zookeeper通过集中式存储和管理分布式系统的配置,加入加入一个新的服务节点(znode),那么可以立即使用zookeeper的最新配置,也可以通过一个zookeeper客户端来更改集中式配置

4.领导者选举:当分布式系统中一个服务出现故障(比如停机),zookeeper通过领导者选举来转移故障,使系统继续运行

zookeeper的安装

首先在linux上安装zookeeper,必须保证linux上装有jdk,因为zookeeper是在jvm上运行的
下载地址:http://www.apache.org/dist/zo...

使用wget下载后,
打开解压文件夹,进入到conf文件下,拷贝zoo_sample.cfg副本,命名为zoo.cfg

此步骤的原因是:Zookeeper 在启动时会找zoo.cfg这个文件作为默认配置文件

启动zookeeper(在解压根目录下输入):./bin/zkServer.sh start(关闭stop)
当然为了方便,在etc/profile下添加:

export ZOOKEEPER_HOME=/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin

这样便可直接使用zkServer.sh start启动

zookeeper的UI模型

zookeeper的数据模型是由zondes构成的,你可以把zookeeper的数据模型看成是操作系统中的目录结构,每个目录的文件夹名就是一个zonde,在每个文件夹(znode)下都有一些存储数据,类似于目录下的文件,但是在zookeeper下这些数据一般很小(1M以下),只是用来存储一些必要信息

每个zookeeper服务器下都存储了znodes,这也遵循了分布式的原则,因为zookeeper本身也是一个分布式应用,此外每个zookeeper服务器都维护了一个事务日志(记录的是所有的请求)

zk客户端与zk服务器的交互

在启动一个zk服务器的时候,我们先来看下它的配置
默认启动的配置文件在zookeeper/conf/下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper/data
dataLogDir=/tmp/zookeeper/log
clientPort=2181
#端口2888由对等的zookeeper服务器使用,用于互相通信
#端口3888用于领导者选举
server.1=106.15.205.155:2888:3888

clientPort是给客户端连接用的端口
dataDir是节点数据存储的目录
dataLogDir是日志输出的目录,不指定的话默认在dataDir下

/tmp/zookeeper/data目录下新建一个文件myid,并存入一个值为1
它对应zoo.cfg中的server.1

server.1=106.15.205.155:2888:3888这行代码中
106.15.205.155是Ip(写自己的)
2888是领导者选举端口
3888是zookeeper服务器间的通信端口

打开zookeeper服务器(关闭为stop):

zkServer.sh start

打印出以下日志说明zookeeper启动成功:

ZooKeeper JMX enabled by default
Using config: /zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

启动zk客户端:

zkCli.sh

成功连接之后,便可以对zkServer进行节点操作

1.增加节点并且给予success数据:

create /znode1 success

2.查看该zk服务器znode明细:

ls /

3.查看指定节点详情:

get znode1

4.设置节点(比如修改数据:sunnces变为error)

set /znode1 error

5.关闭zkCli:

close

6.删除节点

delete /znode1

同样可以使用java代码来实现对zookeeper服务器的操作
但是很多框架已经封装了操作类
如果想要自己实现,推荐使用nio的模型来操作
可以去看下Doug Lea的PPT:Scalable io in java

监听日志

我们监听的是zookeeper/bin下zookeeper.out日志
因为我们已经配置了系统环境变量,所以直接在根目录下启动:

tail -f zookeeper.out

以上便是zookeeper服务器的简单介绍
谢谢阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值