openfire3.10.2安装部署及集群配置及openfire优化

建议:使用openfire3.10.3 这个版本相较于3.10.2修复了几个重大BUG。


版权声明:本文为博主原创文章,未经博主允许不得转载。

由于是纯手打,并没有实际操作一遍(懒),所以有些名词可能不对,见谅!
图片太小则缩放页面比例调高


openfire单节点安装

步骤:

1.修改主机名Hostname:

对于CentOS系统,需要修改两处:
一是/etc/sysconfig/network,二是/etc/hosts,只修改任一处会导致系统启动异常。

对于Ubuntu系统,也需要修改两处:
一是/etc/hostname,二是/etc/hosts

最后,两个系统都需要执行:
hostname hostname1

完成后 hostname查看

2.安装jdk

  • 把jdk1.8 tar.gz压缩文件丢入 /home
  • 解压到/usr/local
  • 重命名为jdk1.8
  • vi /etc/profile,加入
 export JAVA_HOME=/usr/local/jdk
 export PATH=$JAVA_HOME/bin:$PATH 
 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
  • xshell重进 OK

3.安装openfire

  • 百度搜索openfire,进入官网http://www.igniterealtime.org/
  • 点击download,找到 openfire3.10.2 或者最新版本,选择linux,选择tar.gz
  • 下载好后,丢到linux服务器上,此处以/home目录为例
  • tar -zxvf openfire3.10.2.tar.gz -C /usr/local,解压到 /usr/local 目录
  • vi /openfire/bin/openfire,加入jvm参数,按需分配
INSTALL4J_ADD_VM_PARAMS="
-Xms10240m -Xmx10240m -XX:MaxPermSize=1024m -XX:PermSize=1024m 
-Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider"

而后保存退出

openfire3.10.2安装部署及集群配置及openfire优化_第1张图片

openfire3.10.2安装部署及集群配置及openfire优化_第2张图片

openfire3.10.2安装部署及集群配置及openfire优化_第3张图片

openfire3.10.2安装部署及集群配置及openfire优化_第4张图片
完成!

4.配置openfire

  • openfire目录下 ./bin/openfire start启动openfire
  • 浏览器进入控制台 ip:9090(conf/openfire.xml可以改端口,或者在管理控制台更改)
  • 控制台设置,按需分配,此处为: ubuntu,意味之后客户端连接用户名为 username@ubuntu
  • 选择mysql 下面填写内网地址,填写对应的账号密码:
// mysql数据库提前安装好,并建好openfire专用库,此处库名openfire
jdbc:mysql://172.168.111.13:3306/openfire?rewriteBatchedStatements=true
  • 连接数最大设置为300,管理员账户改为admin,密码随意设置,此处admin
  • 至此openfire设置完毕.已经可以用客户端注册登录了

图示:

openfire3.10.2安装部署及集群配置及openfire优化_第5张图片

openfire3.10.2安装部署及集群配置及openfire优化_第6张图片

openfire3.10.2安装部署及集群配置及openfire优化_第7张图片

openfire3.10.2安装部署及集群配置及openfire优化_第8张图片

openfire3.10.2安装部署及集群配置及openfire优化_第9张图片

openfire3.10.2安装部署及集群配置及openfire优化_第10张图片

openfire3.10.2安装部署及集群配置及openfire优化_第11张图片

默认配置下openfire能支持5000+在线用户


5.openfire集群安装

  • 提前配置好两个服务器的openfire(参考上面步骤)
  • openfire控制台加入插件broadcast和Hazelcast
  • 完成后,在2台openfire控制台的clusting/集群,点击启用集群
  • 等待5-10分钟,若是没有动静(期间一定要等几分钟等集群设置生效),则重启openfire,重启后进入,可以看到两个节点已经加入了集群
  • 至此,集群配置成功

ps:hazelcast插件默认方式是广播,可以配置点对点。
配置文件在openfire/plugins/hazelcast/class/hazelcast.xml

替换如下:

<join>
    <multicast enabled="false">
        <multicast-group>224.2.2.3multicast-group>
        <multicast-port>54327multicast-port>
    multicast>
    <tcp-ip enabled="true">
        <member>172.168.111.1:5701member>
        <member>172.168.111.2:5701member>
    tcp-ip>
    <aws enabled="false"/>
join>

openfire3.10.2安装部署及集群配置及openfire优化_第12张图片

openfire3.10.2安装部署及集群配置及openfire优化_第13张图片

openfire3.10.2安装部署及集群配置及openfire优化_第14张图片

openfire3.10.2安装部署及集群配置及openfire优化_第15张图片

openfire3.10.2安装部署及集群配置及openfire优化_第16张图片

openfire3.10.2安装部署及集群配置及openfire优化_第17张图片

openfire3.10.2安装部署及集群配置及openfire优化_第18张图片
现在,2台节点的openfire已经可以支撑10000+在线用户了!


其他设置以及优化

插件

  • Subscription插件:自动同意好友请求,添加插件后在服务器设置最下面设置方式。

服务器设置

  • 把没用的一些设置关掉,例如HTTP绑定等等

优化

  • 修改打开最大文件数目:ulimit –n 65535
  • 设置服务器缓存大小,系统属性加入:
// 注意不能有空格,特别是 size后面
// -1代表无穷大 100000000即是95M
ClientSessionInfoCache:     cache.ClientSessionInfoCache.size
Roster:                     cache.username2roster.size
user:                       cache.userCache.size
group:                      cache.group.size
groupMeta:                  cache.groupMeta.size
offline message:            cache.offlinemessage.size
offlinePresence:            cache.offlinePresence.size
Last Activity Cache:        cache.lastActivity.size
VCard:                      cache.VCard.size
// 以上都是高压下容易飘红的

附图:

openfire3.10.2安装部署及集群配置及openfire优化_第19张图片

openfire3.10.2安装部署及集群配置及openfire优化_第20张图片

openfire3.10.2安装部署及集群配置及openfire优化_第21张图片

openfire3.10.2安装部署及集群配置及openfire优化_第22张图片

openfire3.10.2安装部署及集群配置及openfire优化_第23张图片


未来需要优化的几个点:

1.加大服务器内存 20G变成150G
2.之前源码修改的是3.10.2,之后把新版本的源码下载下来重新修改,而后打包部署.
  以解决3.10.2遗留的BUG(现在4.0beta版本出来了,可能过段时间会开源,改了很多bug)
3.根据需求定制openfire,即去除无用的组件,出去无用的消耗资源的一些cache或hashMap,变量之类
4.移出session,把session存入到redis中。
5.除了session,其他的很多cache(服务器缓存)全部移入redis。

更加科幻的展望:

1.openfire不使用mysql,使用redis作为数据库存储数据,再做个mysql持久化及主从就行了。

论坛有牛人说过:openfire使用了它那不知所谓的cache(其实就是HashMap),就注定无法支撑数十万连接。
(强哥说了:HashMap存储超过几万后,会有问题,好像是jdk自带的问题)

2016-1-8:
另外一个最重要的优化的方面,就是保证连上服务器的是 有用 的用户。

譬如我们服务器之前连了10W,但是其实真正用户绑定并使用XX系统的只有1W,但是10W个客户端却是连着的。
(举例子,之前我们的系统就好比进入淘宝后台自动登录旺旺,那么进淘宝多少人就有多少人登录了旺旺,但是其实真正使用旺旺的只有十分之一甚至更少,我们只需要让用户在需要旺旺对话的时候才连接服务器的话,那么瞬间服务器压力能减少 90%
这是比任何优化方案都有效的解决方法。是从业务本身去思考并优化,这个需要集思广益。)

自带BUG解决
需修改源码重新打包部署,后续补上

2016-1-8:
新的3.10.3甚至4.0版本已经解决了很多个大bug了,我们坐享其成即可。
4.0beta估计不久后就开源了,那时候应该就无比稳定健壮了.


你可能感兴趣的:(openfire)