1 基础知识
1.1 软件简介
Tigase XMPP Server是Tigase.net的旗舰服务器端软件,其提供XMPP服务或实时通讯(IC)服务,即Tigase是一个聊天服务器。
1.2 软件的功能
– 即时通讯服务(适合人员或机器)
– 聊天服务器
1.3 其他可选的即时通讯软件
1.3.1 开源产品
– EJabberd
– Openfire
– Jabberd2
– Prosody
1.3.2 非开源产品
– Isode
– Jabber XCP
1.4 软件特点
– 高度优化,核心代码小于1MB,运行最低仅需10MB内存
– 完全模块化,元素、组件、插件和功能都提供异常丰富的API配置和替换
– 灵活,易于调整和定制,可更具需求或环境定制
– 集群开箱即用,只需修改2行配置即可实现集群
– 硬件要求低,适合小型机,标准服务器以及虚机
– 经过严格测试,由专业工具进行兼容性测试和负载测试
– 内置支持脚本,支持Groovy,Python,Ruby和Scala进行模块扩展
– 易监控,可通过HTTP,SNMP,JMX,XMPP以及数据库进行监控并可服务邮件告警
– 安全,支持TLS,SASL,SSL等加密,API带身份隔离
– 支持在线升级,支持热插拔和系统升级
– 开源
1.5 配置文件
1.5.1 服务器配置文件
– 文件路径“%{TIGASE_HOME}/etc/tigase.xml”
– 存储tigase运行时的配置
– 缺少该文件时会在运行时自动创建
– 部分配置来源于init.properties
– 修改参数建议直接修改init.properties
注:该配置文件支持的属性列表如下,
http://docs.tigase.org/tigase-server/7.0.1/Administration_Guide/html/#_tigase_xmpp_server_configuration_properties
1.5.2 服务器启动文件
– 文件路径“%{TIGASE_HOME}/etc/tigase.conf”
– 该文件定义Java虚拟机启动的系统设置和环境参数
– 该文件仅仅适用于Bash shell的类Unix系统
– 该文件的配置将被”%{TIGASE_HOME}/scripts/tigase.sh”脚本加载
– Windows系统请使用wapper.conf
2 安装部署
2.1 系统配置
2.1.1 基本环境信息
IP Address = 10.168.0.90
Host Name = tigase.cmdschool.org
OS = CentOS 7.3 x86_64
2.1.2 安装所需的工具
yum install -y vim wget unzip net-tools
2.2 安装前的准备
2.2.1 安装JDK环境
2.2.2 准备MySQL数据库
2.2.2 预设防火墙端口
firewall-cmd --permanent --add-port 5222-5223/tcp
firewall-cmd --permanent --add-port 5269/tcp
firewall-cmd --permanent --add-port 5280/tcp
firewall-cmd --permanent --add-port 5290/tcp
firewall-cmd --permanent --add-port 8080/tcp
firewall-cmd --reload
firewall-cmd --list-all
2.2.3 配置名称解析
echo '10.168.0.90 tigase.cmdschool.org' >> /etc/hosts
注:
– 此操作代替DNS解析,如有DNS解析则无需设置
– 此域名解析应该配置当前服务器的hostname
2.2.5 下载安装包
cd ~
wget https://tigase.tech/attachments/2455/tigase-server-7.0.1-b3810-dist-max.zip
注:如果无法下载请使用浏览器下载
2.3 部署tigase
2.3.1 创建运行用户
groupadd -g 982 tigase
useradd -u 982 -g 982 -d /usr/tigase -s /bin/bash tigase
2.3.2 解压安装包
cd ~
unzip tigase-server-7.0.1-b3810-dist-max.zip
2.3.3 部署Tigase XMPP目录
mv tigase-server-7.0.1-b3810 /usr/
chown root:tigase -R /usr/tigase-server-7.0.1-b3810
chmod 775 -R /usr/tigase-server-7.0.1-b3810
rm -rf /usr/tigase
ln -s /usr/tigase-server-7.0.1-b3810/ /usr/tigase
2.3.4 配置Tigase XMPP环境变量
echo 'export TIGASE_HOME="/usr/tigase"' > /etc/profile.d/tigase.sh
source /etc/profile
2.3.5 部署配置文件
mkdir /etc/tigase
cp ${TIGASE_HOME}/etc/init.properties ${TIGASE_HOME}/etc/init.properties.default
cp ${TIGASE_HOME}/etc/tigase.conf ${TIGASE_HOME}/etc/tigase.conf.default
ln -s ${TIGASE_HOME}/etc/init.properties /etc/tigase/init.properties
ln -s ${TIGASE_HOME}/etc/tigase.conf /etc/tigase/tigase.conf
2.3.6 修改启动配置文件
vim /etc/tigase/tigase.conf
修改如下参数:
osgiEnabled=true
JAVA_HOME="/usr/java/jdk1.8.0_161"
TIGASE_HOME="/usr/tigase"
TIGASE_CONSOLE_LOG="/var/log/tigase/tigase-console.log"
TIGASE_CONFIG="/etc/tigase/tigase.xml"
TIGASE_OPTIONS=" --property-file /etc/tigase/init.properties "
TIGASE_PID="/var/run/tigase/tigase.pid"
注:Java家目录位置是“/usr/java/jdk1.8.0_161”
2.3.7 部署Tigase XMPP日志目录
mkdir /var/log/tigase
chown root:tigase -R /var/log/tigase
chmod 775 -R /var/log/tigase
2.3.8 部署Tigase XMPP PID目录
mkdir -p /var/run/tigase
chown root:tigase /var/run/tigase
chmod 775 /var/run/tigase
2.3.9 修改数据库字符编码格式
vim /etc/my.cnf
加入如下参数:
[mysqld]
character-set-server=utf8
重启服务使配置生效
/etc/init.d/mysqld restart
确认服务端的字符编码格式修改成功,
mysql -uroot -p -e "show variables like 'character_set_server';"
加入如下参数:
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| character_set_server | utf8 |
+----------------------+-------+
确认客户端的字符编码格式修改成功,
mysql -uroot -p -e "show variables like 'character_set_client';"
加入如下参数:
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| character_set_client | utf8 |
+----------------------+-------+
2.4 尝试启动服务
2.4.1 手动启动服务
cd /usr/tigase
sudo -u tigase ./scripts/tigase.sh start
2.4.2 查询服务状态
cd /usr/tigase
sudo -u tigase ./scripts/tigase.sh status
2.4.3 检查服务的端口
netstat -antp | grep ::: | grep java
端口显示如下:
tcp6 0 0 :::5290 :::* LISTEN 4174/java
tcp6 0 0 :::8080 :::* LISTEN 4174/java
tcp6 0 0 :::5269 :::* LISTEN 4174/java
tcp6 0 0 :::5280 :::* LISTEN 4174/java
tcp6 0 0 :::5222 :::* LISTEN 4174/java
tcp6 0 0 :::5223 :::* LISTEN 4174/java
2.5 使用Web向导配置tigase
2.5.1 生成配置文件
http://10.168.0.90:8080/setup/
注:按照以上向导提示生成配置(按照向导跑,简单这里不详述)并单击保存
2.5.2 校验保存的配置
cat /etc/tigase/init.properties
保存的配置如下:
config-type=--gen-config-def
--virt-hosts=cmdschool.org
--admins=admin@cmdschool.org
--debug=server
--user-db-uri=jdbc:mysql://localhost/tigasedb?user=tigase&password=tigasepwd
--sm-plugins=+jabber\:iq\:auth,+urn\:ietf\:params\:xml\:ns\:xmpp-sasl,+urn\:ietf\:params\:xml\:ns\:xmpp-bind,+urn\:ietf\:params\:xml\:ns\:xmpp-session,+jabber\:iq\:register,+jabber\:iq\:roster,+presence,+basic-filter,+domain-filter,+jabber\:iq\:privacy,+jabber\:iq\:version,+http\://jabber.org/protocol/stats,+starttls,-msgoffline,+vcard-temp,+http\://jabber.org/protocol/commands,+jabber\:iq\:private,+urn\:xmpp\:ping,+pep,+zlib,+message-archive-xep-0136,+amp
--comp-name-1=muc
--comp-class-1=tigase.muc.MUCComponnet
--comp-name-2=pubsub
--comp-class-2=tigase.pubsub.PubSubComponent
--comp-name-3=http
--comp-class-3=tigase.http.HttpMessageReceiver
2.5.2 重启服务使配置生效
cd /usr/tigase
sudo -u tigase ./scripts/tigase.sh restart
3 优化服务
3.1 优化服务的启动
3.1.1 手动停止服务
cd /usr/tigase
sudo -u tigase ./scripts/tigase.sh stop
3.1.2 部署启动脚本
cp ${TIGASE_HOME}/scripts/redhat/init.d/tigase /etc/init.d/tigased
3.1.3 修改环境变量
vim /etc/init.d/tigased
加入如下环境变量
JAVA_HOME="/usr/java/jdk1.8.0_161"
USERNAME=tigase
USERGROUP=tigase
NAME=tigase
DESC="Tigase XMPP server"
TIGASE_HOME="/usr/tigase"
TIGASE_LIB=${TIGASE_HOME}/jars
TIGASE_CONFIG=/etc/tigase/tigase-server.xml
TIGASE_OPTIONS=" --property-file /etc/tigase/init.properties "
TIGASE_PARAMS="/etc/tigase/tigase.conf"
PIDFILE="/var/run/tigase/tigase.pid"
TIGASE_CONSOLE_LOG="/var/log/tigase/tigase-console.log"
注:以上变量的部分变量会被TIGASE_PARAMS的配置覆盖
修改case分支判断的代码,
case "$1" in
start)
[...]
exit 0
;;
[...]
status|check)
[...]
;;
注:
– 将start分支判断中的退出返回值修改为“exit 0”
– 将check分支判断中增加对“status”关键字的检测
以上如果不修改将会有如下错误,
Job for tigased.service failed. See 'systemctl status tigased.service' and 'journalctl -xn' for details.
[FAILED]
或如下错误:
Usage: /etc/init.d/tigase {start|stop|restart|clearrestart|clear|force-reload|check|status}
3.1.4 增加PDI目录自动创建
vim /etc/init.d/tigased
启动函数中加如下代码:
PIDDIR=`echo $PIDFILE | awk -F'/' '{NF-=1;OFS="/";print}'`
if ! test -d $PIDDIR; then
mkdir $PIDDIR
chown tigase:tigase $PIDDIR
fi
local cmd="cd ${TIGASE_HOME}; setsid $JAVA $TIGASE_CMD >>${TIGASE_CONSOLE_LOG} 2>&1 & echo \$! >$PIDFILE"
su - ${USERNAME} -c "$cmd" || return 1
注:最后两行不用修改,仅用于定位代码
3.1.5 重载修改过的脚本
systemctl daemon-reload
3.1.6 测试启动脚本
/etc/init.d/tigased start
/etc/init.d/tigased status
/etc/init.d/tigased restart
/etc/init.d/tigased stop
3.1.7 配置服务自动启动
chkconfig tigased on
3.2 优化性能
3.2.1 修改打开文件的数量
sysctl -w fs.file-max=1610691
echo 'fs.file-max = 1610691' >> /etc/sysctl.d/99-sysctl.conf
3.2.2 修改KeepaLive设置
sysctl -w net.ipv4.tcp_keepalive_time=60 sysctl -w net.ipv4.tcp_keepalive_probes=3 sysctl -w net.ipv4.tcp_keepalive_intvl=90 echo 'net.ipv4.tcp_keepalive_time = 60' >> /etc/sysctl.d/99-sysctl.conf echo 'net.ipv4.tcp_keepalive_probes = 3' >> /etc/sysctl.d/99-sysctl.conf echo 'net.ipv4.tcp_keepalive_intvl = 90' >> /etc/sysctl.d/99-sysctl.conf
3.2.3 软硬限制
echo 'tigase soft nofile 600000' >> /etc/security/limits.d/30-tigase.conf echo 'tigase hard nofile 600000' >> /etc/security/limits.d/30-tigase.conf
注:查询用户的句柄可使用如下命令,
lsof -u tigase | wc -l