Zookeeper的事务和观察者

Zookeeper的事务log

事务日志指zookeeper系统在正常运行过程中,针对所有的事务操作,在返回客户端“事务成功”的响应前,zookeeper会保证已经将本次更新操作的事务日志已经写到磁盘上。

zookeeper的事务日志为二进制文件,不能通过vim等工具直接访问。其实可以通过zookeeper自带的
jar包读取事务日志文件。

查看事务log执行

java -classpath .:slf4j-api-1.6.1.jar:zookeeper-3.4.8.jar org.apache.zookeeper.server.LogFormatter ./log.000000001

查看快照文件
java -classpath .:slf4j-api-1.6.1.jar:zookeeper-3.4.7.jar org.apache.zookeeper.server.SnapshotFormatter ./snapshot.200000000

Zookeeper观察者

观察者

虽然客户端直接连接到投票选举的Zookeeper成员执行良好,但这个架构很难扩展到大量的客户端。问题就是因为我么添加了更多的投票成员,写入性能下降。这是由于这样的事实:一个写入操作要求共识协议至少是整体的一半,因此投票的成本随着投票者越多会显著增加。

我们引入了一个新的Zookeeper节点类型叫做Observer(观察者),它帮助处理这个问题并进一步完善了Zookeeper的可扩展性。观察者不参与投票,它只监听投票的结果,不是导致了他们的共识协议。除了这个简单的区别,观察者精确的和追随者一样运行 - 客户端可能链接他们并发送读取和写入请求。观察者像追随者一样转发这些请求到领导者,而他们只是简单的等待监听投票的结果。正因为如此,我们可以尽可能多的增加观察者的数量,而不影响投票的性能。

观察者还有其他优势。因为他们不投票,他们不是Zookeeper整体的主要组件。因此他们可以故障,或者从集群断开连接,而不影响Zookeeper服务的可用性。对用户的好处是观察者可以连接到比追随者更不可靠的网络。事实上,观察者可以用于从其他数据中心和Zookeeper服务通信。观察者的客户端会看到快速的读取,因为所有的读取都在本地,并且写入导致最小的网络开销,因为投票协议所需的消息数量更小。

观察者的使用

使用观察者设置Zookeeper全员非常简单,只需要在原来的配置文件上改两个地方。

第一,在要设置的那个节点的配置文件设置为观察者,必须放置这一行:

peerType=oberver

这一行告诉Zookeeper的服务是一个观察者。

第二,在每个服务配置文件里,必须在观察者定义行添加:observer。例如:

server.1:localhost:2181:3181:observer

这个告诉其他服务server.1是一个观察者,并且他们不需要期望他选举。

这是你在Zookeeper集群中添加观察者需要的所有配置。现在你可以连接到它好像是一个普通的追随者。尝试一下,通过运行:

bin/zkCli.sh -server localhost:2181

这里的localhost:2181是每个配置文件里指定的观察者的hostname和端口号。你应该查看一个命令行提示,通过类似于ls的操作查询Zookeeper服务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值