Zookeeper简介

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

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

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

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

案例

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

界面示例(动效):

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

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

实现逻辑

实现过程

本文用到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推送数据到浏览器)。

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

只依赖zookeeper的jar:

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

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

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

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

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

创建临时节点代码片段:

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

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

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

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

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

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

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

继承ServletContextListener

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

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

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

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

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

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

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

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

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

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

  1. Linux 时间一致性环境NTP/Chrony服务器部署配置

    一.背景 生产环境中,一个业务系统往往涉及几十台甚至上百台主机或云主机构成,有些管理系统对整个环境时间一致性由强要求,即使没有,保证环境中时间的一致性,有利于业务交互时时间匹配,保证事务的一致性,甚至 ...

  2. 服务器部署配置以及端口映射(针对win2008)

    近来,公司项目需要做硬件服务器的配置及端口映射. 由于没做过,网上查询了一些文档,咨询了几个朋友.终于让我给做好了.小白分享一下自己的经验.欢迎指正. 一:硬件服务器开箱安装 首先要检查服务器带的线是 ...

  3. 服务器部署——配置hadoop集群

    1.下载hadoop 这里搭建最新的hadoop3.3.0版本的集群,进入hadoop官网https://hadoop.apache.org/releases.html找到要下载的版本,我这里选择的是 ...

  4. 查看服务器ip配置信息失败,U-Center 纳管戴尔的服务器报错“报错获取厂商信息失败,请确认IP、用户名、密码 、厂商、协议与配置文件是否正确”...

    1.先查询是否可以纳管该设备 2.检查配置 注意: 加前请先将该服务器通过增加设备的方式增加至U-Center中,此时U-Center将该服务器识别为PC,再通过增加服务器的方式将其识别为服务器. 输 ...

  5. tensorflow中使用tf.ConfigProto()配置Session运行参数GPU设备指定

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/dcrmg/article/detail ...

  6. linux 系统网络服务器组建,配置和管理实训教程 pdf,Linux网络服务器配置管理项目实训教程2...

    Linux网络服务器配置管理项目实训教程2 附录2 Linux常用命令 在文本模式和终端模式下,经常使用Linux命令来查看系统的状态和监视系统的操作,如对文件和目录进行浏览.操作等.在Linux较早 ...

  7. Pycharm配置运行参数

    分享运行代码的个小技巧: 在跑python程序中,一般都会使用argparse工具包在运行过程中传递参数,然后在终端设置运行,比如: python tools/analysis_tools/analy ...

  8. 服务器配置能连多少个小程序,每个服务器能配置多少小程序

    每个服务器能配置多少小程序 内容精选 换一换 numactl工具可用于查看当前服务器的NUMA节点配置.状态,可通过该工具将进程绑定到指定CPU core,由指定CPU core来运行对应进程.命令参 ...

  9. 服务器信息 sid,裸金属服务器SID配置

    裸金属服务器SID配置 内容精选 换一换 Linux裸金属服务器的静态主机名来源于创建裸金属服务器时,通过控制台注入的用户自定义名称.可以使用控制台或hostname命令更改裸金属服务器的主机名,但如 ...

最新文章

  1. spoj DPRSDCDR - Depressed Coder
  2. R 语言开发环境搭建
  3. boost::process::pipe相关的测试程序
  4. android 如何保留数据两位小数
  5. flink event-time 和连续窗口的使用
  6. C#中Console.ReadKey()与ConsoleKey的一些用法
  7. 用java输出图形_java基础-输出一个简单的图形。
  8. 我中招了:解喝汽水问题
  9. Monitor线程同步
  10. 二.公共建筑安全防范系统配置
  11. 监狱干警定位管理系统
  12. 升降压型电感电容计算
  13. android studio 模拟器文件管理器
  14. 破解携程中文验证码爬取机票价格数据
  15. 谷歌浏览器chrome 自己写的插件使用教程
  16. 高通平台开发系列讲解(AtCoP篇)AtCoP架构简介
  17. 用mplab x ipe进行联机以及脱机的烧写
  18. 语音群呼促进企业营销大力推广
  19. 数据挖掘-客户倾向分析
  20. 量化交易 聚宽 止盈止损策略

热门文章

  1. java layoutmanager_Java Swing 探索(一)LayoutManager
  2. 框架详解_详解:python Web框架flask表单实现(建议收藏)
  3. 字符串截取后两位,字符串转成数组,再转换位字符串
  4. 第13章 程序的动态加载和执行(三,核心代码)
  5. Storm的ack机制在项目应用中的坑
  6. Entity Framework context per request
  7. 基于FlashPaper的文档播放器
  8. 弹出键盘,UIView 上移
  9. boost helloworlld
  10. Convert.Int32、(int)和int.Parse三者的区别