zookeeper应用 - 监控

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

  1. package monitor;
    import java.util.List;
    import java.util.concurrent.CountDownLatch;
    import java.util.concurrent.TimeUnit;
    import org.apache.zookeeper.CreateMode;
    import org.apache.zookeeper.WatchedEvent;
    import org.apache.zookeeper.Watcher;
    import org.apache.zookeeper.Watcher.Event.KeeperState;
    import org.apache.zookeeper.ZooDefs;
    import org.apache.zookeeper.ZooKeeper;
    /**
     * 监听客户端的上下线
     * @author lisg
     *
     */
    public class ServerMonitor {
    	public static final String HOSTS = "vm1";
    	private ZooKeeper zk = null;
    
    	public static final String PARENT_PATH = "/monitor";
    
    	private static int client_count = 0;
    	public ServerMonitor() {
    		final CountDownLatch cdl = new CountDownLatch(1);
    		try {
    			zk = new ZooKeeper(HOSTS, 5000, new Watcher() {
    				@Override
    				public void process(WatchedEvent event) {
    					if(KeeperState.SyncConnected.equals(event.getState())) {
    						cdl.countDown();
    					}
    				}
    			});
    
    			cdl.await();
    
    			//创建父节点
    			if(zk.exists(PARENT_PATH, false) == null) {
    				zk.create(PARENT_PATH,
    						"".getBytes(),
    						ZooDefs.Ids.OPEN_ACL_UNSAFE,
    						CreateMode.PERSISTENT);
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    	public void run() {
    		try {
    			zk.getChildren(PARENT_PATH, new ClientChangeWatcher());
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    	class ClientChangeWatcher implements Watcher {
    		@Override
    		public void process(WatchedEvent event) {
    			try {
    				if(Event.EventType.NodeChildrenChanged.equals(event.getType())) {
    					//获取子节点,同时注册监听
    					final List<String> children = zk.getChildren(PARENT_PATH, this);
    					if(client_count > children.size()) {
    						System.out.println("有客户端下线");
    					} else {
    						System.out.println("有客户端上线");
    					}
    					client_count = children.size();
    				}
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    	}
    
    	public static void main(String[] args) {
    		new ServerMonitor().run();
    
    		try {
    			TimeUnit.DAYS.sleep(1);
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    	}
    }
    

      

客户端:上线的时候在父节点上创建短暂的子节点

package monitor;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
/**
 * 客户端
 * 上线的时候在zk上创建一个短暂的子节点
 * @author lisg
 *
 */
public class Client {

	public static final String CLIENT_PATH_PREFIX = "cli-";
	public static void main(String[] args) {
		final CountDownLatch cdl = new CountDownLatch(1);
		try {
			ZooKeeper zk = new ZooKeeper(ServerMonitor.HOSTS, 5000, new Watcher() {
				@Override
				public void process(WatchedEvent event) {
					if(KeeperState.SyncConnected.equals(event.getState())) {
						cdl.countDown();
					}
				}
			});

			cdl.await();

			//创建父节点
			zk.create(ServerMonitor.PARENT_PATH + "/" + CLIENT_PATH_PREFIX,
					"".getBytes(),
					Ids.OPEN_ACL_UNSAFE,
					CreateMode.EPHEMERAL_SEQUENTIAL);

			TimeUnit.SECONDS.sleep(5);
			zk.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

  

来自为知笔记(Wiz)

附件列表

时间: 2024-08-06 16:05:44

zookeeper应用 - 监控的相关文章

zookeeper模拟监控服务节点宕机

/**   * 模拟监控服务节点宕机   * 思路:   *  节点上线的时候,往/watch下创建一个节点,然后监控该节点,记录事件类型,判断节点是否宕机   * @throws Exception   */  public static void watch() throws Exception {   while(true) {    final ZooKeeper zkClient = new ZooKeeper("192.168.1.231,192.168.1.232,192.168.

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

一 应用场景描述 在目前公司的业务中,没有太多使用ZooKeeper作为协同服务的场景.但是我们将使用Codis作为Redis的集群部署方案,Codis依赖ZooKeeper来存储配置信息.所以做好ZooKeeper的监控也很重要. 二 ZooKeeper监控要点 系统监控 内存使用量    ZooKeeper应当完全运行在内存中,不能使用到SWAP.Java Heap大小不能超过可用内存. Swap使用量    使用Swap会降低ZooKeeper的性能,设置vm.swappiness = 0

zookeeper监控告警

一.ZooKeeper简介 ZooKeeper作为分布式系统中重要的组件,目前在业界使用越来越广泛,ZooKeeper的使用场景非常多,以下是几种典型的应用场景: l  数据发布与订阅(配置中心) l  负载均衡 l  命名服务(Naming Service) l  分布式通知/协调 l  集群管理与Master选举 l  分布式锁 zk环境搭建 这里不详细说明,提供详细blog说明. Zookeeper集群搭建:http://www.cnblogs.com/linuxbug/p/4840137

通过TelnetClient获取Zookeeper监控数据

如果想编写一个监控Zookeeper的Java程序,可以通过两种方式 : (1)通过TelnetClient发送命令 ,命令的详解参考:http://zookeeper.apache.org/doc/trunk/zookeeperAdmin.html#sc_zkCommands (2)通过JMX,说明请参考:http://zookeeper.apache.org/doc/trunk/zookeeperJMX.html 本文通过一个简单的例子来演示如何通过TelnetClient发送mntr命令获

zookeeper命令使用及监控

本文只讲解zookeeper的四字命令及客户端连接服务端的zkCli.sh命令的使用及zookeeper的监控,如果需要安装请参考zookeeper安装及简介 1. 客户端获取zookeeper服务性能及详细信息的四字命令 用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令. ZooKeeper 常用四字命令如下表:ZooKeeper 四字命令 功能描述conf 输出相关服务配置的详细信息.cons 列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息.

Zookeeper监控(Zabbix)

一直在弄监控,这些个中间件Zookeeper.Kafka......,平时也只知道一点皮毛,也就搭建部署过,没有真正的用过,一般都是大数据的同学在用,作为运维人员我需要对他做一个监控,由于对他不是知根知底,监控哪些指标就真的是一个大头了.经过不断的在网上搜集,看别人是怎么做的,做了以下一个基本的监控. 一.效果图 二.指标 监控最重要的就是数据,一切皆数据,有了数据想怎么监控就怎么监控.那么哪些数据是重要的?这些数据怎么获取?监控指标尤其重要. Zookeeper的监控指标(通过网上收集,等实际

ZooKeeper和Curator相关经验总结

一.关于ZooKeeper的watch用法,需要注意 详细说明如下: ZooKeeper Watches All of the read operations in ZooKeeper - getData(), getChildren(), and exists() - have the option of setting a watch as a side effect. Here is ZooKeeper's definition of a watch: a watch event is o

Zookeeper 扫盲

Zookeeper 扫盲 :disappointed_relieved: 配置文件详解: tickTime:基本事件单元,以毫秒为单位,这个时间作为 Zookeeper 服务器之间或客户端之间维持心跳的时间间隔 dataDir:存储内存中数据库快照的位置,顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存到这个目录里 clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户

大数据系统之监控系统(二)Flume的扩展

一些需求是原生Flume无法满足的,因此,基于开源的Flume我们增加了许多功能. EventDeserializer的缺陷 Flume的每一个source对应的deserializer必须实现接口EventDeserializer,该接口定义了readEvent/readEvents方法从各种日志源读取Event. flume主要支持两种反序列化器: (1)AvroEventDeserializer:解析Avro容器文件的反序列化器.对Avro文件的每条记录生成一个flume Event,并将