服务器上下线动态监控
主讲:李强
任务描述
本小节将介绍一个简单的ZooKeeper的案例应用。一般大数据场景都是分布式系统,
因此节点有多个。考虑到ZooKeeper作为分布式的协调框架可用作监控系统,监控
多个节点的状态,因此,这里将使用ZooKeeper模拟监控服务器上下线动态情况。
任务分析
通过IDEA配置好连接ZooKeeper集群的开发环境后,创建一个类Server,在
此类中连接ZooKeeper集群,创建一个父节点“./Server”,并设置可变参数动
态创建临时子节点,可通过IDEA提供的参数设置进行子节点的添加;创建一
个类Client,由于监控父节点“./Server”的子节点的上下线动态。
创建IDEA工程并连接ZooKeeper
创建IDEA工程并连接ZooKeeper
参考项目3,在IDEA中新建一个Maven工程,并命名为ZooKeeperPro,创建完毕后,只需要在文件中添加
ZooKeeper依赖,如表5-3所示,添加完成后需加载依赖。
表5-3 添加依赖
<dependencies>
<dependency>
<groupId></groupId>
<artifactId>zookeeper</artifactId>
<version></version>
</dependency>
</dependencies>
任务实现
任务实现
在IDEA工程/src/main/java目录下创建一个package名为OnlineMonitoring,首先创建一个类Server,该类用于连接
ZooKeeper集群,创建一个“/Server”父节点,并设置可变参数为动态创建临时子节点,如代码5-15所示。
代码5-15 Server类代码
public class Server implements Watcher {
public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
ZooKeeper zooKeeper = new ZooKeeper("slave1:2181,slave2:2181,slave3:2181", 5000, new Server());
//创建持久化服务节点Server
Stat exists = ("/Server", false);
if (exists == null){
("/Server","Hello".getBytes(), _ACL_UNSAFE,);
}
......省略
任务实现
接着再创建一个类Client作为客户端,该类主要获取子节点信息,并设置程序不关闭,即可动态监控子节点变化情
况,如代码5-16所示。
代码5-16 Client类代码
public class Client implements Watcher {
public static ZooKeeper zooKeeper;
public static void main(String[] args) throws IOException, InterruptedException {
zooKeeper = new ZooKeeper("slave1:2181,slave2:2181,slave3:2181", 5000, new Client());
(_VALUE);
}
......省略
任务实现
在执行服务端之前,需要设置main()方法的
参数,单击IDEA菜单栏“Run”按钮,在弹框
中选择“Edit Configurations…”,如图5-13所
示。
图5-13 打开“Edit Configurations…”
任务实现
接着在弹框中左侧选中Sever类,并在右侧
的“Program arguments”中输入“001 0”,注
意参数间需要用空格隔开,如图5-14所示。
图5-14 设置Server类main()方法参数
任务实现
执行Server类后,再执行Client类,即可
检测到“001”子节点,如图5-15所示。
图5-15 查看在线用户1
如果关闭Server类,那么临时子节点
“001”将会消失,这时Client端将更新,
在线的用户为空,如图5-16所示。
图5-16 查看在线用户2
任务实现
若更改Server类的main()方法参数为“002 1”,即将图5-14中的参数“001 0”修改为“002 1”,再次执行Server类,
那么Client端将检测到在线的用户为“002”,如图5-17所示。
图5-17 查看在线用户3
谢谢