服务器端:监听zk上父节点的子节点变化

    1. package monitor;
    2. import java.util.List;
    3. import java.util.concurrent.CountDownLatch;
    4. import java.util.concurrent.TimeUnit;
    5. import org.apache.zookeeper.CreateMode;
    6. import org.apache.zookeeper.WatchedEvent;
    7. import org.apache.zookeeper.Watcher;
    8. import org.apache.zookeeper.Watcher.Event.KeeperState;
    9. import org.apache.zookeeper.ZooDefs;
    10. import org.apache.zookeeper.ZooKeeper;
    11. /**
    12. * 监听客户端的上下线
    13. * @author lisg
    14. *
    15. */
    16. public class ServerMonitor {
    17. public static final String HOSTS = "vm1";
    18. private ZooKeeper zk = null;
    19.  
    20. public static final String PARENT_PATH = "/monitor";
    21.  
    22. private static int client_count = 0;
    23. public ServerMonitor() {
    24. final CountDownLatch cdl = new CountDownLatch(1);
    25. try {
    26. zk = new ZooKeeper(HOSTS, 5000, new Watcher() {
    27. @Override
    28. public void process(WatchedEvent event) {
    29. if(KeeperState.SyncConnected.equals(event.getState())) {
    30. cdl.countDown();
    31. }
    32. }
    33. });
    34.  
    35. cdl.await();
    36.  
    37. //创建父节点
    38. if(zk.exists(PARENT_PATH, false) == null) {
    39. zk.create(PARENT_PATH,
    40. "".getBytes(),
    41. ZooDefs.Ids.OPEN_ACL_UNSAFE,
    42. CreateMode.PERSISTENT);
    43. }
    44. } catch (Exception e) {
    45. e.printStackTrace();
    46. }
    47. }
    48.  
    49. public void run() {
    50. try {
    51. zk.getChildren(PARENT_PATH, new ClientChangeWatcher());
    52. } catch (Exception e) {
    53. e.printStackTrace();
    54. }
    55. }
    56.  
    57. class ClientChangeWatcher implements Watcher {
    58. @Override
    59. public void process(WatchedEvent event) {
    60. try {
    61. if(Event.EventType.NodeChildrenChanged.equals(event.getType())) {
    62. //获取子节点,同时注册监听
    63. final List<String> children = zk.getChildren(PARENT_PATH, this);
    64. if(client_count > children.size()) {
    65. System.out.println("有客户端下线");
    66. } else {
    67. System.out.println("有客户端上线");
    68. }
    69. client_count = children.size();
    70. }
    71. } catch (Exception e) {
    72. e.printStackTrace();
    73. }
    74. }
    75. }
    76.  
    77. public static void main(String[] args) {
    78. new ServerMonitor().run();
    79.  
    80. try {
    81. TimeUnit.DAYS.sleep(1);
    82. } catch (InterruptedException e) {
    83. e.printStackTrace();
    84. }
    85. }
    86. }

      

 
客户端:上线的时候在父节点上创建短暂的子节点
 
  1. package monitor;
  2. import java.util.concurrent.CountDownLatch;
  3. import java.util.concurrent.TimeUnit;
  4. import org.apache.zookeeper.CreateMode;
  5. import org.apache.zookeeper.WatchedEvent;
  6. import org.apache.zookeeper.Watcher;
  7. import org.apache.zookeeper.Watcher.Event.KeeperState;
  8. import org.apache.zookeeper.ZooDefs.Ids;
  9. import org.apache.zookeeper.ZooKeeper;
  10. /**
  11. * 客户端
  12. * 上线的时候在zk上创建一个短暂的子节点
  13. * @author lisg
  14. *
  15. */
  16. public class Client {
  17.  
  18. public static final String CLIENT_PATH_PREFIX = "cli-";
  19. public static void main(String[] args) {
  20. final CountDownLatch cdl = new CountDownLatch(1);
  21. try {
  22. ZooKeeper zk = new ZooKeeper(ServerMonitor.HOSTS, 5000, new Watcher() {
  23. @Override
  24. public void process(WatchedEvent event) {
  25. if(KeeperState.SyncConnected.equals(event.getState())) {
  26. cdl.countDown();
  27. }
  28. }
  29. });
  30.  
  31. cdl.await();
  32.  
  33. //创建父节点
  34. zk.create(ServerMonitor.PARENT_PATH + "/" + CLIENT_PATH_PREFIX,
  35. "".getBytes(),
  36. Ids.OPEN_ACL_UNSAFE,
  37. CreateMode.EPHEMERAL_SEQUENTIAL);
  38.  
  39. TimeUnit.SECONDS.sleep(5);
  40. zk.close();
  41. } catch (Exception e) {
  42. e.printStackTrace();
  43. }
  44. }
  45. }

  

附件列表

zookeeper应用 - 监控的更多相关文章

  1. zookeeper 的监控指标

    一 应用场景描述 在目前公司的业务中,没有太多使用ZooKeeper作为协同服务的场景.但是我们将使用Codis作为Redis的集群部署方案,Codis依赖ZooKeeper来存储配置信息.所以做好Z ...

  2. zookeeper 的监控指标(一)

    一 应用场景描述 在目前公司的业务中,没有太多使用ZooKeeper作为协同服务的场景.但是我们将使用Codis作为Redis的集群部署方案,Codis依赖ZooKeeper来存储配置信息.所以做好Z ...

  3. zookeeper的监控

    1.idea插件: zookeeper https://blog.csdn.net/long290046464/article/details/52974061 优点:直接查看,不用来回切换监控 缺点 ...

  4. JMXtrans + InfluxDB + Grafana实现Zookeeper性能指标监控

    一.总体效果图 这里是将集群全部放在一起,可以根据自己的审美看怎么放 二.监控指标 其中有些指标与第一篇Zookeeper通过四字命令基础监控(Zabbix)的四字命令的指标是有重复的,二者选一个则可 ...

  5. zookeeper监控告警

    一.ZooKeeper简介 ZooKeeper作为分布式系统中重要的组件,目前在业界使用越来越广泛,ZooKeeper的使用场景非常多,以下是几种典型的应用场景: l  数据发布与订阅(配置中心) l ...

  6. Hadoop记录- zookeeper 监控指标

    目前zookeeper获取监控指标已知的有两种方式: 1.通过zookeeper自带的 four letter words command 获取各种各样的监控指标 2.通过JMX Client连接zo ...

  7. Prometheus jvm_exporter监控zookeeper

    Zookeeper Prometheus 监控zookeeper使用jvm_exporter来采集数据,jvm_exporter是一个可以配置抓取和暴露JMX目标的mBeans的收集器. 下载java ...

  8. zabbix系列(十)zabbix添加对zookeeper集群的监控

    1.应用场景描述 在目前公司的业务中,有部分ESB架构用ZooKeeper作为协同服务的场景,做好ZooKeeper的监控很重要. 2.ZooKeeper监控要点 系统监控 内存使用量    ZooK ...

  9. 使用Zabbix监控ZooKeeper服务的健康状态

    一 应用场景描述 在目前公司的业务中,没有太多使用ZooKeeper作为协同服务的场景.但是我们将使用Codis作为Redis的集群部署方案,Codis依赖ZooKeeper来存储配置信息.所以做好Z ...

随机推荐

  1. 为Linux集群创建新账户,并配置hadoop集群

    转自:http://blog.csdn.net/bluesky8640/article/details/6945776 之前装python.jdk.hadoop都是用的root账户,这是一个绝对的失策 ...

  2. Python的不定长参数研究

     通过观察程序和运行结果我们发现,传参时将1传给了a,将2传给了b,将3,4,5传给了*args,将m=6,n=7,p=8传给了**kwargs.为什么是这样传参呢?*args和**kwargs又是什 ...

  3. django第二课 网页继承

    第一步 创建项目(有问题可以看我的第一个博客) C:\Python36\Scripts\django-admin.py startproject *** (我的写法,仅供参考) 第二步 创建文件夹,同 ...

  4. SourceTree跳过Atlassian账号,免登陆,跳过初始设置

    SourceTree 安装之后需要使用账号登陆以授权,并且是强制登陆. 登录过程非常漫长,并未在不FQ的情况下是不能成功的,下面记录一下跳过登录的方法. 装之后,转到用户本地文件夹下的 SourceT ...

  5. javascript快速入门1--JavaScript前世今生,HelloWorld与开发环境

    JavaScript历史 大概在1992年,一家称作Nombas的公司开始开发一种叫做C--(C-minus-minus,简称Cmm)的嵌入式脚本语言. Cmm背后的理念很简单:一个足够强大可以替代宏 ...

  6. [笔记] Python 中JSON数据的读写

    前言 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换语言 JSON是独立于语言的文本格式, JSON 数据格式与语言无关 JSO ...

  7. unity之定制脚本模板

    1.unity的脚本模板        新版本unity中的C#脚本有三类,第一类是我们平时开发用的C# Script:第二类是Testing,用来做单元测试:第三类是Playables,用作Time ...

  8. Golang xorm工具,根据数据库自动生成 go 代码

    使用 golang 操作数据库的同学都会遇到一个问题 —— 根据数据表结构创建对应的 struct 模型.因为 golang 的使用首字母控制可见范围,我们经常要设计 struct 字段名和数据库字段 ...

  9. wcf win7+iis7 异常消息为: 可能证书“CN=PmsWcfServer”没有能够进行密钥交换的私钥

    原因是证书没有用户权限,解决方法: 1.开始-运行-mmc 2.添加[证书]管理单元 3.选择[证书(本地计算机)]-[个人]-[证书],右击PmsWcfServer证书-[所有任务]-[管理密钥] ...

  10. [转]HTTP请求中的form data和request payload的区别

    本文转自:http://www.cnblogs.com/btgyoyo/p/6141480.html jQuery的ajax方法和post方法分别发送请求,在后台Servlet进行处理时结果是不一样的 ...