博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Zookeeper Ephemeral结点使用心得
阅读量:6035 次
发布时间:2019-06-20

本文共 895 字,大约阅读时间需要 2 分钟。

原文链接:http://hongweiyi.com/2012/11/zookeeper-ephemeral-nodes-experience/

Zookeeper Ephemeral结点使用心得

公司里面在拿Zookeeper做命名服务,通过使用ZK,前端只需要根据指定的ZK地址获得相应的资源或服务的后端服务器地址即可,而后端服务器需要做的仅仅是将自己的地址注册到ZK上作为一个Ephemeral结点即可。(虽然是挺方便后端扩容,但是我个人不太建议直接上ZK,否则开发成本会增加)

 

P.S.:Ephemeral结点在Apache Zookeeper中是一个临时结点,这些结点只要创建它的结点session不挂,它就一直存在,当session中止了,结点也就删除了。

 

问题:

在开发的时候遇到了一个奇怪的问题,当某个后端快速重启之后,该后端的结点信息过一段时间后会被删除,这样就导致了后端服务永远无法被前端访问到。

原因:

查了资料后得知,如果在你的session中,ephemeral结点不是由你创建的,你的session就不会拥有该结点,所以当拥有该结点的session终止(expire)了,该结点也就销毁了。那么,如果不是你显式的删除该结点的话,就只能由ZK帮你终止它,在会话超时之后ZK就自动删除结点。如果在会话还未超时的过程中(一般是30s),你重启后端服务器的话,就会导致我所说的情况。

解决方案:

Apache提供了几个patch,也有人提供了一些解决方案,均是显式的终止session。但是后端服务器挂了,显式终止一般是没用的。找到的这个方法是比较靠谱的,那就是在创建结点前,先删除之前的结点:

1. try {

2.   zk.delete(path)

3. } catch {

4.   e: NoNodeException => // do nothing

5. }

6. zk.create(path, data, CreateMode.EPHEMERAL)

参考资料:

转载于:https://www.cnblogs.com/linlemo/p/4807178.html

你可能感兴趣的文章
etc目录下配置文件详解
查看>>
配置 yum 源的两种方法
查看>>
A10 负载均衡模拟器下载安装及license免费激活详细介绍
查看>>
SQL Server数据库的存储过程中定义的临时表,真的有必要显式删除(drop table #tableName)吗?...
查看>>
双向链表的几种实现
查看>>
我的友情链接
查看>>
Ubuntu快捷键
查看>>
RGBA是什么
查看>>
华三云ONEstor存储测试
查看>>
centos用lastb命令看失败登录记录
查看>>
*** 2003
查看>>
Microsoft Deployment Toolkit 2010 (MDT)下载地址
查看>>
sort与uniq
查看>>
openvswitch架构图
查看>>
云锁模块libsensitiveFilter.so导致nginx报错,K哥
查看>>
Oracle 存储过程和包的使用
查看>>
计算机经典图书样章免费下载【持续更新中……】
查看>>
java 运算符,流程控制语句,键盘录入
查看>>
老男孩教育-linux面试题-基础题1
查看>>
关于lync安装问题
查看>>