zookeeper应用 - 监控
服务器端:监听zk上父节点的子节点变化
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();
}
}
}
附件列表
zookeeper应用 - 监控的更多相关文章
- zookeeper 的监控指标
一 应用场景描述 在目前公司的业务中,没有太多使用ZooKeeper作为协同服务的场景.但是我们将使用Codis作为Redis的集群部署方案,Codis依赖ZooKeeper来存储配置信息.所以做好Z ...
- zookeeper 的监控指标(一)
一 应用场景描述 在目前公司的业务中,没有太多使用ZooKeeper作为协同服务的场景.但是我们将使用Codis作为Redis的集群部署方案,Codis依赖ZooKeeper来存储配置信息.所以做好Z ...
- zookeeper的监控
1.idea插件: zookeeper https://blog.csdn.net/long290046464/article/details/52974061 优点:直接查看,不用来回切换监控 缺点 ...
- JMXtrans + InfluxDB + Grafana实现Zookeeper性能指标监控
一.总体效果图 这里是将集群全部放在一起,可以根据自己的审美看怎么放 二.监控指标 其中有些指标与第一篇Zookeeper通过四字命令基础监控(Zabbix)的四字命令的指标是有重复的,二者选一个则可 ...
- zookeeper监控告警
一.ZooKeeper简介 ZooKeeper作为分布式系统中重要的组件,目前在业界使用越来越广泛,ZooKeeper的使用场景非常多,以下是几种典型的应用场景: l 数据发布与订阅(配置中心) l ...
- Hadoop记录- zookeeper 监控指标
目前zookeeper获取监控指标已知的有两种方式: 1.通过zookeeper自带的 four letter words command 获取各种各样的监控指标 2.通过JMX Client连接zo ...
- Prometheus jvm_exporter监控zookeeper
Zookeeper Prometheus 监控zookeeper使用jvm_exporter来采集数据,jvm_exporter是一个可以配置抓取和暴露JMX目标的mBeans的收集器. 下载java ...
- zabbix系列(十)zabbix添加对zookeeper集群的监控
1.应用场景描述 在目前公司的业务中,有部分ESB架构用ZooKeeper作为协同服务的场景,做好ZooKeeper的监控很重要. 2.ZooKeeper监控要点 系统监控 内存使用量 ZooK ...
- 使用Zabbix监控ZooKeeper服务的健康状态
一 应用场景描述 在目前公司的业务中,没有太多使用ZooKeeper作为协同服务的场景.但是我们将使用Codis作为Redis的集群部署方案,Codis依赖ZooKeeper来存储配置信息.所以做好Z ...
随机推荐
- sql server 只读帐号设置能读取存储过程,view等内容。
如果设定了某个帐号是只读权限,是无法查看存储过程的,比如你用 sp_helptext '存储过程名' ,这样子会提示权限不足或者存储过程不存在,其实就是没权限, 要再给这个只读帐号用 sa 赋予它查看 ...
- 【es6】class
class是es6引入的最重要特性之一.在没有class之前,我们只能通过原型链来模拟类. 基本用法 如果你用过java这样的纯面向对象语言,那么你会对class的语法非常熟悉. class Peop ...
- Okhttp3上传多张图片同时传递参数
之前上传图片都是直接将图片转化为io流传给服务器,没有用框架传图片. 最近做项目,打算换个方法上传图片. Android发展到现在,Okhttp显得越来越重要,所以,这次我选择用Okhttp上传图片. ...
- rails 5.2 启动警告 warning: previous definition of VERSION was here和bootsnap
bootsnap依赖问题 You should add gem 'bootsnap' to your gemfile to install it or remove the line require ...
- python3 连接HBase
db_url = 'http://47.93.89.99:8765' from traceback import format_exc import phoenixdb as pb class Uti ...
- ThreadPool线程池的关注点
public class TestThreadPool { //线程池维护线程的最少数量 private static final int COREPOOLSIZE = 2; //线程池维护线程的最大 ...
- C#直接用数字定义背景颜色
如下: tableLayoutPanel.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte ...
- Android之网络丢包事件
原文链接 http://www.litrin.net/2013/03/01/android%E4%B9%8B%E7%BD%91%E7%BB%9C%E4%B8%A2%E5%8C%85%E4%BA%8B% ...
- The "tsconfig.json" file must have compilerOptions.sourceMap set to true
在编译ionic项目的时候出现:Error:The "tsconfig.json" file must have compilerOptions.sourceMap set to ...
- SQL Server - 文件组,文件,备份,分区
FileGroup:文件组,为逻辑划分:Files:文件,为实际文件,需要指定文件属于哪个文件组. 使用多个文件的有点:可以将磁盘I/O压力分散,提供按文件和文件组(按文件和文件组进行备份需要设置数据 ...