标签归档:Openfire
使用Zookeeper实现来监控服务器集群及负载状态[转]
在正式的生产环境中,为了应付高并发、高负载的业务需求,集群部署已然成为了家常便饭。这样我们就需要监控服务器集群中所有服务器的运行状态和服务器当前的负载情况,根据服务器的运行状态和负载情况将可用且负载较低的服务器信息放回给服务器的调用方使用,以达到集群负载均衡的目的,如果服务器宕机,则需迅速响应并将信息反馈给调用方,通知调用方切换可用的服务器,同时启动相应的报警机制。
本例子就是利用Zookeeper的文件目录特性和事件通知机制,来实现服务器集群的监控的一个简单例子。在实际的开发中,可借鉴此例子的思想来实现自己的集群负载均衡管理器。
实现思路
- 在Zookeeper里面创建名为/sgroup的永久节点,表示是整个服务器集群的根节点
- 每一个服务器节点启动时,在/sgroup的节点下创建自己的EPHEMERAL节点,表示此服务器在运行状态,并每隔10秒上传自己的负载信息,存为此节点的数据。EPHEMERAL有个重要的特性,当创建此类节点的客户端与Zookeeper服务器的连接关闭时,此节点自动删除,可利用此特性来监控服务器的上下线状态。
- 监控服务器一直不断的监视集群节点/sgroup下子节点的状态,达到监控相应的服务器的运行状态和负载情况的目录,如有异常,可迅速地启动报警机制。
首先我们来创建自己的服务器,代码如下:
[su_spoiler title=”CODE”]
package |
zkfire 详细介绍[转]
zkfire 详细介绍
zkfire = zookeeper+openfire(3.8.1)
Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议,您可以使用它轻易的构建高效率的即时通信服务器.
根据对xmpp与openfire的理解,我在openfire中相应的地方植入少量的代码,并把zookeeper包也一并打包到zkfire中。使用zookeeper(http://zookeeper.apache.org/)管理集群中的节点。
客户登陆集群中的不同服务器进行通信就如登陆同一台服务器一样。
openfire自身也有一套集群的实现,使用了oracle