zookeeper处理写请求时序
client与节点1建立session,节点2为leader,节点1收到写请求之后会转发给节点2,leader收到请求后给集群中所有的节点发送propose,各follower收到请求后会返回accept消息给leader,leader收到大多数follower的accept之后,向各follower发送commit信息,节点1收到commit请求后返回客户端请求处理成功信息。
什么是Observer
Observer不参与提交和选举的投票过程,和zk集群中其他节点的唯一交互是接收来自leader的inform消息,更新自己的本地存储
Observer应用场景
读性能提升
由于observer不参与提交和选举的投票过程,所以可以通过往集群里添加Observer节点来提高整个集群的读性能
同样的写请求由observer接收后转发给leader,但是它不参与事务提交的过程(不涉及本地磁盘写入,事务提交的过程),只是等待leader和follower完成事物提交之后,leader将结果inform给observer,observer收到commit请求后返回客户端请求处理成功信息。
跨数据中心部署
北京和香港两地都需要使用zookeeper服务,要求北京和香港的客户端读请求延迟都低,因此在北京和香港都部署zookeepr节点。假设leader在北京,如果不使用observer,那么每个来自香港的写请求都要涉及leader和每个香港follower之间的propose,ack和commit三个跨区域消息。
若把香港的节点设置为observer,就不涉及propose,ack和commit消息,取而代之的是inform跨区域消息
observer配置
修改zoo.cfg,指定server为observer
server.1=172.16.101.177:2888:3888:observer