Zookeeper Ephemeral结点使用心得
原文地址:https://www.cnblogs.com/linlemo/p/4807178.html
公司里面在拿Zookeeper做命名服务,通过使用ZK,前端只需要根据指定的ZK地址获得相应的资源或服务的后端服务器地址即可,而后端服务器需要做的仅仅是将自己的地址注册到ZK上作为一个Ephemeral结点即可。(虽然是挺方便后端扩容,但是我个人不太建议直接上ZK,否则开发成本会增加)
P.S.:Ephemeral结点在Apache Zookeeper中是一个临时结点,这些结点只要创建它的结点session不挂,它就一直存在,当session中止了,结点也就删除了。
问题:
在开发的时候遇到了一个奇怪的问题,当某个后端快速重启之后,该后端的结点信息过一段时间后会被删除,这样就导致了后端服务永远无法被前端访问到。
原因:
查了资料后得知,如果在你的session中,ephemeral结点不是由你创建的,你的session就不会拥有该结点,所以当拥有该结点的session终止(expire)了,该结点也就销毁了。那么,如果不是你显式的删除该结点的话,就只能由ZK帮你终止它,在会话超时之后ZK就自动删除结点。如果在会话还未超时的过程中(一般是30s),你重启后端服务器的话,就会导致我所说的情况。
解决方案:
Apache提供了几个patch,也有人提供了一些解决方案,均是显式的终止session。但是后端服务器挂了,显式终止一般是没用的。找到的这个方法是比较靠谱的,那就是在创建结点前,先删除之前的结点:
try {
zk.delete(path)
} catch {
e: NoNodeException => // do nothing
}
zk.create(path, data, CreateMode.EPHEMERAL)
Zookeeper Ephemeral结点使用心得的更多相关文章
- ZooKeeper简介
本文中,我们将对ZooKeeper进行介绍.简单地说,ZooKeeper是一个用来在构成应用的各个子服务之间进行协调的一个服务. 由于其本身并没有特别复杂的机制,因此我们将会把更多的笔墨集中在如何对Z ...
- ZooKeeper原理及使用
ZooKeeper是Hadoop Ecosystem中非常重要的组件,它的主要功能是为分布式系统提供一致性协调(Coordination)服务,与之对应的Google的类似服务叫Chubby.今天这篇 ...
- zookeeper原理及作用
ZooKeeper是Hadoop Ecosystem中非常重要的组件,它的主要功能是为分布式系统提供一致性协调(Coordination)服务,与之对应的Google的类似服务叫Chubby.今天这篇 ...
- zookeeper学习系列:一、入门
基本是 http://zookeeper.apache.org/doc/trunk/zookeeperOver.html 的翻译,应用场景摘抄:http://www.wuzesheng.com/?p= ...
- zookeeper初识之原理
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. Zookeeper是hadoop的一个子项目 ...
- ZooKeeper使用原理
ZooKeeper的基本原理 ZNode的基本概念 ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一个ZNode.每个ZNode都可以通过其路径唯一标识 ...
- Zookeeper相关知识
一.Zookeeper是什么? Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务. ...
- Zookeeper 编程
ZooKeeper编程(一) 杂记 ZooKeeper的用途:distributed coordination;maintaining configuration information, namin ...
- ZooKeeper应用理论及其应用场景
ZooKeeper Client APIZooKeeper Client Library提供了丰富直观的API供用户程序使用,下面是一些常用的API: ● create(path, data, fla ...
随机推荐
- Kibana中的Coordinate Map地图报索引错误的问题
今天做地图定位展示,展示的是ApacheWeb服务器的访问日志文件中的来源IP.但是中间出现了报错环节,说是索引不能匹配到geo_point类型,实在是不懂这是在说什么,后来在网站找了方法就解决了.主 ...
- MySQL客户端工具的选择
最近因系统云化项目,学习使用MySQL集群,为了找一款顺手的mysql客户端,反复使用了多个工具,并筛选出一个自认为最满意的,在此分享. 先说我的选择:SQLyog. 尝试的客户端:Toad for ...
- PDO 对 mysql的基本操作
PDO扩展操作 <?php $dsn = 'mysql:dbname=yii2;host=localhost'; $user = 'root'; $password = '123456'; tr ...
- JS实现奇偶数的判断
<html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>标题页-学无忧(www.x ...
- 2018年值得关注的10大JavaScript动画库
2018年值得关注的10大JavaScript动画库 旭日云中竹 前端早读课 1周前 前言 平时大家开发动画是采用什么方式呢?虽然18年过半,可这十个动画库是真的没听过几个,有点尴尬.今日早读文章由@ ...
- 美人鱼 hdu 5784
Peter has a sequence a1,a2,...,ana1,a2,...,an and he define a function on the sequence -- F(a1,a2,.. ...
- WPFのImage控件souce引入的方法总结
1.后台代码相对路径添加(若为绝对路径,换UriKind的属性即可) BitmapImage testBitmapImage = new BitmapImage(new Uri(@"\bin ...
- (12)Python异常
- 20145236《网络对抗》Exp2 后门原理与实践
20145236<网络对抗>Exp2 后门原理与实践 目录: 一.基础问题回答 二.常用后门工具实践 2.1 Windows获得Linux Shell 2.2 Linux获得Windows ...
- docker安装jdk8
1.下载jdk8 wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.or ...