阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Openfire Hazelcast集群详解

146次阅读
没有评论

共计 4104 个字符,预计需要花费 11 分钟才能阅读完成。

一、概述
Openfire Hazelcast 插件提供了在一个集群上运行多个冗余 Openfire 服务器的支持。通过把 Openfire 运行为一个集群,可以把终端的连接分配到多台 Openfire 服务器上,同时还提供了服务器的故障转移。Hazelcast 个插件是 Openfire 原集群插件的替代,它使用了开源的 Hazelcast 数据分布框架来代替昂贵的专有第三方产品。目前 Hazelcast 版本是 3.5.1。

Hazelcast 的主页:http://www.hazelcast.org/

二、集群与联邦的比较
XMPP 协议的设计与邮箱相似,每个 Openfire 的安装支持单个的 XMPP 域,且服务器到服务器(Server to Server,S2S)协议在 XMPP 规范中描述为把多个 XMPP 域连接到一起,也就是联邦(Federation)。联邦代表了 XMPP 横向扩展的有效方式,因为它允许一个 XMPP 用户能够安全地与其他联邦域的任意用户进行通信。这些联邦可以是公共的或者是私有的。联邦域可以在互联网上交换 XMPP 节(Stanzas),甚至可以使用基于 DNS 的服务查找或是地址解析进行发现。

与之相反,集群是单个 XMPP 域进行纵向扩展的技术,集群内的诚意共享相同的配置。集群中的每一个成员都允许任意用户在域内进行连接、授权认证、交换节。所有集群的服务器都共享单个的数据库,因此需要部署在同一个局域网内,以保持网络通信的低延迟。集群的部署适合提供运行时的冗余,而且能支持更大的用户数量和更多的连接数。

对于比较大的 Openfire 部署,结合联邦和集群两种技术能提供比较佳的效果。单个的 XMPP 域能够支持数万甚至数十万的用户,再结合联邦部署,就能达到支持百万级以上的用户规模。

三、安装
要创建 Openfire 集群,至少要有 2 台 Openfire 服务器,每一台都必须安装 Hazelcast 插件。要按照 Hazelcast,只需简单的把 hazelcast.jar 包放入 Openfire 的 plugins 子目录。还可以在管理控制台的插件页直接安装此插件。

要注意,集群内的每一台 Openfire 服务器都必须配置为连接同一个外部数据库。

默认情况下,Openfire 在启动并初始化进程期间,服务器节点会彼此互相发现(通过彼此互相交换 UDP 广播数据包)。要注意一点,如果局域网不支持广播通信,那么可以使用一些初始化的配置选项。

每个 Openfire 服务器部署了 Hazelcast 插件后,在管理控制台的集群页面上使用单选按钮激活 / 启用集群。只需要启用一次集群,此变更会自动通知到集群的其它节点。在刷新集群页面后就能看到所有的服务器已经成功加入集群了。

注意,Hazelcast 和更早的集群插件(如 clustering.jar 或 enterprise.jar)是互斥的。也就是说,使用了 Hazelcast 插件,就不能使用早期的集群插件。

在集群运行后,你就需要某种形式的负载均衡来把用户的访问分配到各个 Openfire 节点上。这里有多个商业解决方案和开源解决方案。如果你使用 HTTP/BOSH Openfire 连接器来连接 Openfire 的话,那么可以使用 Apache HTTP Server 来做负载均衡器(使用 mod_proxy_balancer 模块)。一些流行的选项如 F5 LTM(商业解决方案)和 HAProxy(开源解决方案)都可以。

F5 LTM:http://www.f5.com/products/big-ip/big-ip-local-traffic-manager/overview/
HAProxy:http://haproxy.1wt.eu/

还有一个简单的 Round-robin DNS 配置可以帮助分配 XMPP 连接到集群中的 uogeOpenfire 服务器节点。尽管流行的轻量级、低成本的方法提供了基本的可扩展性,但要注意这些方法是既没有考虑到足够满足实际的负载均衡,又没有提供高可用性的能力。

四、Hazelcast 插件的升级
升级 Hazelcast 插件需要额外的一些步骤,而且集群中的每个节点都需要安装同一个插件版本,以避免各种错误和数据同步的问题。

方法 1:离线升级
这种升级方法很简洁,但会发生短暂的服务中断。
1)关闭集群中所有的 Openfire 服务
2)对集群中的第一台 Openfire 服务器,执行以下步骤:
a. 移除 plugins 目录下现有的 Hazelcast 插件 hazelcast.jar;
b. 移除 plugins 目录下现有的 hazelcast 子目录;
c. 复制最新的 hazelcast.jar 文件到 plugins 目录;
d. 重启 Openfire 服务器,实现插件的解压和安装。
3)对剩余的每一个 Openfire 服务器重复以上工作。

方法 2:在线升级
这种方法在升级期间也不影响 Openfire 的服务。
1. 关闭集群中的 Openfire 服务器,只保留一台还运行。
2. 登录这台 Openfire 服务器的管理控制台,在插件页面移除现有的 Hazelcast 插件。
3. 上传最新的 Hazelcast 插件,并完成安装。
4. 使用“离线”步骤升级并启动剩余的服务器。

方法 3:分割升级
注意:如果你只能访问 Openfire 的控制台,那么可以使用本方法。但是要注意,在升级过程中,用户可能彼此无法互相通信。
1)在 Openfire 管理控制台的集群页面,让集群停用(Disable),这会对集群的所有成员都关闭集群。
2)对于每一台 Openfire,更新其 Hazelcast 插件。
3)当所有 Openfire 服务器的 Hazelcast 插件都更新完毕后,在管理控制台的集群页面启用(Enable),它会激活集群中的所有 Openfire 成员。

五、配置
Hazelcast 有数个配置选项可作为 Openfire 的系统属性。

1、hazelcast.startup.delay.seconds (5)
运行 Hazelcast 插件的等待时间(秒)。这可以让 Openfire 在初始化集群的缓存时部署其他插件。

2、hazelcast.startup.retry.count (1)
集群首次启动失败后重复启动的次数。

3、hazelcast.startup.retry.seconds (10)
相邻两次启动的间隔时间。(秒)

4、hazelcast.max.execution.seconds (30)
在集群成员间执行同步任务时的最大等待时间。

5、hazelcast.config.xml.filename (hazelcast-cache-config.xml)
Hazelcast 插件配置文件的名字,便于安装自定义的缓存配置文件。

6、hazelcast.config.xml.directory ({OPENFIRE_HOME}/conf)
可以添加到插件类路径下的目录,便于加载自定义的 Hazelcast 配置文件。

7、hazelcast.config.jmx.enabled (false)
为 Hazelcast 集群启用 JMX 功能。

Hazelcast 插件使用了 XML 配置建立器来初始化集群。默认情况下,集群的成员间会尝试通过广播下面的位置实现彼此互相发现。
IP 地址:224.2.2.3
端口:54327

六、Hazelcast 使用
Hazelcast 对于延迟是非常敏感的,它或许会导致一个长期运行的 GC 周期,尤其是在使用默认的 JVM 配置时。在大多数情况下,优先激活并行的垃圾收集器(CMS)或者是使用新的 G1 垃圾收集器来使得阻塞最小化。
另外,Openfire 集群的运行特点在很大程度上取决于客户端的数量、连接的类型、以及部署的 XMPP 服务类型。但是要注意,许多在堆(Heap)上分配的对象是短活动期的,增加年轻代的空间或许会对性能产生积极的影响。

比如,下面提供一个适合 3 个节点的服务器集群(4 核 CPU),支持大约 5 万个活动用户:

OPENFIRE_OPTS=”-Xmx4G -Xms4G -XX:NewRatio=1 -XX:SurvivorRatio=4
              -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+UseParNewGC
              -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=1
              -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly
              -XX:+PrintGCDetails -XX:+PrintPromotionFailure”

————————————– 分割线 ————————————–

CentOS 下 Openfire 详细安装过程 http://www.linuxidc.com/Linux/2012-09/69539.htm

CentOS 5.4 下基于 Jabber/XMPP 协议的 Openfire 服务器配置笔记 http://www.linuxidc.com/Linux/2012-02/55497.htm

Ubuntu 12.04 安装 Openfire http://www.linuxidc.com/Linux/2012-07/64945.htm

Openfire 在使用 MySQL 数据库后的中文乱码问题解决 http://www.linuxidc.com/Linux/2014-03/97989.htm

通过 Nginx 实现 Openfire 集群的负载均衡  http://www.linuxidc.com/Linux/2015-09/122943.htm

————————————– 分割线 ————————————–

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-09/123291.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计4104字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中