服务器部署 配置jetty运行参数_Zookeeper+websocket实现对分布式服务器的实时监控...

Zookeeper简介

Zookeeper是Hadoop的一个子项目,它是分布式系统中的协调系统。

简单来说就是一个Zookeeper注册同步中心,内部结构为一个树形目录,每个节点上可以存放一定量(默认的数据量上限是1M,但是可以通过调整参数修改)的数据,客户端(一段通过Zookeeperapi编写的程序或者一个cmd和shell窗口)连接Zookeeper后,可以在任何节点上注册监听(watcher),当节点被删除或者节点上的数据有变化时,Zookeeper会主动触发注册在当前节点上的监听程序。

同时Zookeeper类似于文件系统,各个节点都可以配置不同的读写访问权限。

zookeeper本身是支持多个zookeeper组成集群,利用选举机制选出负责不同职责的角色,本文暂不涉及。

案例

备注:由于全文粘贴代码实在不好排版,本文代码相关部分,只介绍了相关片段,完整的请下载后查看。

界面示例(动效):

本文利用Zookeeper节点可存放数据以及节点可监听的机制,借助WebSocket实现对多个服务器的实时监控。具体web端效果如下(由于是模拟,界面略显粗糙):

可以同时打开多个浏览器,接收WebSocket推送的实时监控数据。

42a3f53f81a2cc817da1f145586ba527.gif

实现逻辑

2e165bce6e5f5f5eb1b2da1e8ba9f1f6.png

实现过程

本文用到maven以及websocket,这两部分内容本文只做配置介绍,相关知识需自己提前掌握。同时zookeeper的详细命令和api也不做详细解释,可自己试验。

环境:

eclispe Oxygen Release (4.7.0);

maven 3.2.2

Zookeeper3.4.13

win10环境(一般线上都是linux环境,这里为了省事所有都在自己的笔记本上折腾的,所以用了win环境)

1、Zookeeper的安装

安装比较简单,这里略过,下载后解压,配置zoo.cfg里面的目录参数,完后就可以启动了。

2、启动Zookeeper

打开cmd窗口运行Zookeeper安装目录bin下的zkServer.cmd,即可。

也可写个bat文件,方便每次使用,内容(保存即可,其中d:zookeeper-3.4.13bin是我的zookeeper的bin目录)如下:

cd d:zookeeper-3.4.13bin

d:

zkServer.cmd

@pause

3、创建根目录

通过cmd连接到Zookeeper创建更目录/servers,也可通过java代码来创建。

client的bat启动内容参考如下:

cd d:zookeeper-3.4.13bin

d:

zkCli.cmd -server 127.0.0.1:2181

@pause

回车之后,通过命令create /server serverlist 完成根节点的创建, 后面所有待监控的服务器都在此节点下创建子节点(临时节点)。

关于zookeeper节点的类型,也请自行脑补。

这里根节点为持久化节点,服务器数据节点为临时节点,是因为服务器程序在于zookeeper断开后,需要删除节点,这样才监控程序才能知道服务器下线了。当然实际线上应该都会采用持久化节点,然后通过状态数据来判断,这里就偷懒了。

3、代码编写

maven配置

整个示例有2个项目组成:一个是模拟服务器的程序(定时采集监控指标,把指标数据更新到node上),一个是监控程序(用于监控zookeeper节点变化,并获取节点数据计算阈值,并通过Websocket推送数据到浏览器)。

afacc5a2fb4b01ef640842dd80fcf40a.png

business-server(服务器指标采集程序)的maven配置

只依赖zookeeper的jar:

eb93dbf5c7baebb4ec350625085dfa9e.png

business-server-monitor(监控程序)的maven配置:

由于有web界面,所以需依赖Servlet、JavaEE相关包,同时容器采用了maven的jetty插件,关于maven配置jetty以及如何启动可以参考上一篇文章中的相关介绍:模块化编程及Maven配置最佳实践之一。

当然实现Websocket的方式有很多,比如SpringMvc,SpringBoot等等,这里为了防止太多干扰就用了原生写法。具体maven配置如下:

46d2256bb95825ab4b8a66d5cc0c261f.png

1、business-server(服务器指标采集程序) 代码片段:

代码逻辑为:启动后(main方法)连接zookeeper并建立临时节点,同时初始化数据,之后启动模拟指标采集的线程,间隔一段时间生成随机指标数据。

3d3fb6a20d7b2fd1104fbf54fe176e2d.png

创建临时节点代码片段:

376476b12e06ea23572380d63f60d040.png

其中ACL是zookeeper的节点访问权限配置,也需要自行脑补。

模拟指标变化并将数据更新到节点上

11b7586d71788567f92988875d7bd1c4.png

其中ServerData是我自己创建的bean对象,用于存放服务器指标,如下:

主要包含3个模拟指标,cpu,内存,磁盘,可自己添加。指标和zookeeper无关。

3d70faa77a3e977ec808f5f801229a65.png

至此采集程序代码就结束了。

2、business-server-monitor(监控程序)实时监控zookeeper节点变化并推送数据的代码片段

项目启动采用了JavaEE的ServletContextListener监听启动的方式来启动和Zookeeper的连接,需要在web.xml配置这个Listener。

588e7cbd6060ecbac2a050976b0efe63.png

继承ServletContextListener

当jetty容器初始化后,触发建立和zookeeper的连接并注册监听:

37a3c1249072cc98b4be4aceb5050200.png

df4fe937c7f6b0954f8c8feb053f559a.png

然后通过Zookeeper api中的的getChildren获取节点数据并启动监听,

List servers = zk.getChildren(ServerData.serverRootNode, true);

当节点发生数据变化时触发监听的process方法,process方法获取根节点下的所有子节点的数据并封装成ServerData对象列表,用于websocket推送。

3fc61cfafe318835e0931302403549cf.png

之后通过Websocket推送到浏览器:

Websocket配置很简单,只需要注释上先关annotation(@ServerEndpoint)即可,无需其他配置,容器启动时会自行扫描到此类。

9e4e6d58e1c54cfd7547fb7423da1710.png

推送数据这里就简单了拼接成了html,界面上就直接放在div就行了。

5791a5bf7be45e1096dd6141bf6dfa22.png

3、monitor.jsp获取实时监控数据

dbccdcc169059ebe51a264dd39d74d2c.png

以上便是这个例子的完成介绍过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python Interview Question and Answers

引文:http://ilian.i-n-i.org/python-interview-question-and-answers/ For the last few weeks I have been interviewing several people for Python/Django developers so I thought that it might be helpful to show the questions I am asking together with …

软件工程项目总结_复旦大学软件工程实验室来ASE实验室交流

2020年12月11日下午,复旦大学彭鑫教授一行与我院多智能体软件工程实验室开展科研工作交流。本次交流会议旨在为双方建立沟通桥梁,探讨研究问题,谋划后续合作,促使双方增进了解、加强互动、互相学习、共同进步。学院党委书记、多智…

windows无法发现任何计算机或设备,Win10系统提示windows无法与设备或资源通信如何解决...

最近有win10系统用户发现电脑无法打开网页,然后进行网络诊断的时候,提示“Windows无法与设备或资源(主DNS) 通信”,该怎么解决这样的问题呢?接下来给大家带来Win10系统提示windows无法与设备或资源通信的具体解决步骤。一、更改DN…

scrapy 中不同页面的拼接_scrapy使用技巧总结

1. scrapy运行过程概述scrapy是一个基于python的网络爬虫框架,它读取对指定域名的网页request请求,截取对应域名的返回体,开发者可以编写解析函数,从返回体中抓取自己需要的数据,并对数据进行清洗处理或存入数据库。sc…

Buffers, windows, and tabs

If you’ve moved to Vim from an editor like Notepad or TextMate, you’ll be used to working with the idea of tabs in a text editor in a certain way. Specifically, a tab represents an open file; while the tab’s there, you’ve got an open file, as soon as y…

docker访问宿主机mysql_docker容器内访问宿主机127.0.0.1服务

点击上方”技术生活“,选择“设为星标”做积极的人,而不是积极废人背景原因分析解决方案背景已经通过docker启动的elasticsearch 服务,监听端口9200。在宿主机中直接通过http://127.0.0.1:9200 可以直接访问,但是通过docker访问缺…

ADO.NET+Access: 3,参数 @departmentName 没有默认值

ylbtech-Error-ADO.NETAccess: 3,参数 departmentName 没有默认值。1.A,错误代码返回顶部 3,参数 departmentName 没有默认值。1.B,出错原因分析返回顶部未解决1.C,相关解决方法返回顶部作者:ylbtech出处:http://ylbtech.cnblogs.com/本文版权归作者和博…

lombok有参构造注解_Java高效开发工具: Lombok

Lombok, 一个Java开发必备效率工具,可以大大避免编写一些常用方法(get/set, hashcode等),简化开发。虽然现在IDE很多都可以通过快捷键生成POJO的一些方法了,但是如果该POJO字段发生变动后,还是需要程序员再次手动重新生成相关方法…

JavaScript操作大全整理(思维导图三--函数基础)

3.JavaScript函数基础 转载于:https://www.cnblogs.com/yuxia/p/3360806.html

nginx指定配置文件启动_NGINX安全加固手册

NIGNX系统安全基线规范1.概述1.1 适用范围本配置标准的使用者包括:各事业部服务器负责人。 各事业部服务器负责人按规范要求进行认证、日志、协议、补丁升级、文件系统管理等方面的安全配置要求。对系统的安全配置审计、加固操作起到指导性作用。1.2 文档内容本文档…

口袋网咖已有服务器在使用怎么注销,口袋网咖_口袋网咖常见问题_口袋网咖专区...

口袋网咖是专门为游戏高玩打造的手机变电脑软件,虚拟电脑神器,体验各种电脑游戏,非常的方便,能让小伙伴尽情的体验手机电脑的感觉,很多小伙伴在使用过程中遇到了一些问题,快啦网为大家分享口袋网咖常见问题…

统计个人已完成的工作量_团队工作量及团队价值贡献统计、核算、评审及提升的重要性...

在推行阿米巴经营模式时,需要进行企业内部产品及服务全价值分析,也就是企业内部团队产品及服务价值增值的全过程分析,团队价值增值是团队存在的目的和意义,对于团队经营来讲,团队工作量就团队的收入,团队价…

hyper服务器虚拟网卡和实际网卡,Hyper-V 3 虚拟网卡带宽应用限制

Windows Server 2012的Hyper-V 3中,打来了系列新功能,例如网卡流量限制功能。 基础架构注意的问题宿主服务器规划过程中,管理员主要考虑服务器基础架构中的CPU、内存、磁盘空间等必要因素,但是网络适配器(简称网卡)通常属于被忽略…

状态机思路在程序设计中的应用

状态机思路在单片机程序设计中的应用 状态机的概念 状态机是软件编程中的一个重要概念。比这个概念更重要的是对它的灵活应用。在一个思路清晰而且高效的程序中,必然有状态机的身影浮现。 比如说一个按键命令解析程序,就可以被看做状态机:本来…

卷积核_漫画:卷积神经网络中的卷积核到底是什么?

卷积计算的直观体现如上所示,一张汽车图片经过了多次卷积操作,一开始卷积在提取低层次的特征(检测边缘),然后逐渐提取高层次的特征(完整的物体)不同的卷积探测器我们可以看到同一张图片经过不同的卷积核,得到的结果是不一样的&…

如何打开win7禁用的无线网卡服务器,Windows7如何使用批处理开启/禁用无线网卡...

对于无线网卡,Win7笔记本用户应该都不会陌生,许多笔记本用户都是在自己的电脑上安装了无线网卡之后,使用无线网络进行联网的,不过对于一些有线用户来说,无线网卡就显得并不太重要了。因此,今天小编就教大家…

超声声场模拟_超声全聚焦(TFM)简介

应读者要求,小编将介绍一下全聚焦TFM的基础知识。如有讲解不对的,欢迎批评指正。全聚焦是超声检测里面的新事物。早在2005前, Caroline Holmes、Paul D. Wilcox等国外学者就开始研究了全聚焦成像,并通过实验得出了TFM相对于常规相…

post修改服务器数据源,postgresql安装及配置超详细教程

1. 安装根据业务需求选择版本,官网下载初始化数据库执行完初始化任务之后,postgresql 会自动创建和生成两个用户和一个数据库:linux 系统用户 postgres:管理数据库的系统用户;密码由于是默认生成的,需要在系…

小程序分享到朋友圈_如何给小程序添加分享朋友圈

微信公众号更新以后,推送不是按照优先来的,你们可以把我的微信公众号点击设置为星标,以便于及时的接收信息.从微信小程序官方分享朋友圈有那么几天了,今天就分享下如何给自己的小程序添加分享朋友圈代码,几行代码的事。根据官方的提示需要基础…

JS代码大全

一、验证类 1、数字验证内 1.1 整数 /^(-|\)?\d$/.test(str) 1.2 大于0的整数 (用于传来的ID的验证) /^\d$/.test(str) 1.3 负整数的验证 /^-\d$/.test(str) 2、时间类 2.1 短时间,形如 (13:04:06) function isTime(str) …