1) 运行发布服务器软件包iGuard5-Stagingd-5.0.1-XXXXXXXX.exe;
2) 安装向导,点击【下一步】按钮(图示2-1);
图示2-1 安装向导
3) 阅读软件最终用户许可协议,点击【我接受】按钮(图示2-2);
图示2-2 软件最终用户许可协议
4) 输入所购买产品的许可证信息,点击【下一步】按钮(图示2-3);
图示2-3 许可证信息
5) 选择安装目录,可以点击【浏览】按钮选择其它目标文件夹,确定后点击【下一步】按钮(图示2-4);
图示2-4 选择安装位置
6) 选中【生成发布服务器标识文件】复选框,点击【安装】按钮(图示2-5);
注意:发布服务器标识文件用于发布服务器和同步服务器之间进行通讯验证,生成后请在安装目录下找到该文件,并妥善保存。 在安装同步服务器过程中,将会要求使用该标识文件。如果是覆盖安装或者升级,可以选择不重新生成标识文件。一旦该标识文件被重新生成, 请务必将其更新到同步服务器的安装目录下,以确保发布服务器和同步服务器之间能够正常通讯。
图示2-5 生成标识文件
7) 文件将自动复制到目标文件夹,完成后可以选中【立即启动iGuard V5发布服务】复选框,点击【完成】按钮结束安装过程(图示2-6)。
图示2-6 完成安装
1) 图形界面方式
打开Windows操作系统的【管理工具】→【服务】窗口,查找名称为stagingd5服务,如图示2-7所示。该服务默认自动启动,可以在其【属性】窗口中手工进行启动/停止服务的操作。
图示2-7 stagingd5服务的图形界面管理
2) 命令行方式
打开Windows操作系统的命令行窗口(在【开始】→【运行】里输入“cmd”命令),输入
net start stagingd5
可以进行启动服务的操作。而输入
net stop stagingd5
可以进行停止服务的操作,如图示2-8所示。
图示2-8 stagingd5服务的命令行方式启动
注意:Windows Vista以上版本,需要以管理员身份运行命令行窗口。
打开Windows操作系统的命令行窗口(在【开始】→【运行】里输入“cmd”命令),输入
netstat -an
可以查看网络连接状态,若有TCP端口39999处在监听(LISTENING)状态,则表示发布服务已正常运行,如图示2-9所示。
图示2-9 stagingd5服务状态查看
注意:发布服务的默认端口号是TCP端口39999,若在配置文件中进行了修改,则需要查看相应端口号的状态。
iGuardV5 发布服务器支持的操作系统内核版本号至少需要 2.6.32 以上。
1) 选择适用的产品包放在需要安装发布服务器的主机上,适用的原则是内核版本尽量接近,硬件平台需要一致。如以Redhat 6 64位平台的安装为例。首先在操作系统中输入“uname -an”命令确认系统内核版本和硬件平台:
# uname -an
Linux localhost.localdomain 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
2) iGuard5-stagingd-Linux-2.6.32-71.el6.x86_64-yyyymmdd.tar.gz为相对应平台的安装程序,把该文件放到需要安装的主机上。
3) 切换到上述安装程序所在的目录,执行以下步骤:
# tar xzvf iGuard5-stagingd-Linux-2.6.32-71.el6.x86_64-20160119.tar.gz
# cd iGuard5-stagingd-Linux-2.6.32-71.el6.x86_64
# ./install.sh
在输入“./install.sh”脚本命令后,出现以下交互式安装过程。在【Destination dir to install】的停顿提示处,可以手工输入自定义的安装目录。如果直接回车,则安装在默认的“/usr/local/iguard5/stagingd”目录下。
xxxxxxxxxx
Welcome to iGuard Staging Server Installation
(C)Copyright 2002-20015 Shanghai Tercel Info Tech. Co., Ltd.
All rights reserved.
Destination dir to install
(default:/usr/local/iguard5/stagingd)
Server install ok!
Run '/usr/local/iguard5/stagingd/admtool start' to start server
上述安装步骤的最后,提示“Run ‘/usr/local/iguard5/stagingd/admtool start’ to start server”,这是启动发布服务器的具体命令,前面的路径会根据实际路径变化。直接按照提示的信息,输入启动服务:
# /usr/local/iguard5/stagingd/admtool start
如需停止发布服务,则执行:
# /usr/local/iguard5/stagingd/admtool stop
可通过如下命令,查看39999端口是否处于监听状态,确实安装和启动是否成功。
# netstat -an |grep -i 39999
tcp 0 0 0.0.0.0:39999 0.0.0.0:* LISTEN
也可以通过以下进程查看命令,确认iGuard发布服务是否正常。通常应该有2个名为stagingd的工作进程。
# ps -ef|grep stagingd
root 7769 1 0 16:07 00:00:00 /usr/local/iguard5/stagingd/stagingd -d /usr/local/iguard5/stagingd
root 7770 7769 0 16:07 00:00:00 /usr/local/iguard5/stagingd/stagingd -d /usr/local/iguard5/stagingd
完成安装后,则可以通过在浏览器里访问 https://发布服务器IP:39999/,登录Web控制台,进行下一步配置,具体参见第三章【管理中心】。
编辑系统自启动文件/etc/rc.local,在最后加入以下一行:
xxxxxxxxxx
/usr/local/iguard5/stagingd/admtool start
Linux下的文件监控比较复杂,没有特别可靠的原生文件变化检测机制,我们实现了多种文件监控模式,适用于不同的适用场景。具体哪种场景适用哪种监控模式,与文件生成方式、文件生成的位置与监控位置,均有一定的关联,需要清楚地了解客户的实际使用场景,才能选择恰当的监控的方式。
序号 | 监控日志模块 | 监控方式 | 说明 |
---|---|---|---|
1 | libfen.so | 默认,inotify模式 | 适用于监控文件量较少的场景 |
2 | liblsmxfen.so | iLocker模式 | 适用于监控文件较多,更新方式为本地更新 |
3 | libnfslogfen.so | Linkfs 模式 | 现在不太常用,只为了兼容v3时候老的linkfs模式 |
4 | libnfslogfen.so | NFS server | 文件的更新方式不在本地,而在远程的NFS客户端,但希望统一在NFS服务器端进行监控 |
5 | libnfslogfen.so | Hook模式 | 不太常用,只监控某个进程对文件的更新 |
6 | libnfslogfen.so | 轮询(fepoll) | 不太常用,主要用作暂时无法定位漏传问题时的兜底方案 |
具体选择哪个监控日志转换模块,可以在stagingd.conf
配置文件里,加入以下 "libfenpath"
配置段实现:
xxxxxxxxxx
"taskdb":{
"max_task_cache_size":3000
},
"libfenpath":"liblsmxfen.so",
... ...
另一个办法是,如果没有指定 "libfenpath"
配置段,发布默认加载的是 libfen.so
模块。可以把原来 libfen.so
改名,把需要适用的正确模块文件名,做个软链接,指定为 libfen.so
,如:
# cd /usr/local/iguard5/stagingd
# mv libfen.so libfen.so.original
# ln -sf liblsmxfen.so libfen.so
以上是总结,下面详细介绍各种模式的部署方式和步骤。
Linux版Stagingd服务安装完成后,即可默认监控原生本地目录下的文件变化,使用的是inotify机制。
该机制的缺陷是,文件过多或者目录过深的时候,可能导致监控的失效。所以在安装完成后,建议调整该数量,增大监控数量。方法是编辑 /etc/sysctl.conf 系统配置文件,加入:
xxxxxxxxxx
#编辑 /etc/sysctl.conf
fs.inotify.max_user_watches=10485760
然后以root用户权限,执行以下命令使配置生效:
# sysctl -p
确认配置已生效:
# cat /proc/sys/fs/inotify/max_user_watches
备注:Linux从kernel 2.6.13开始支持inotify机制。它的各项默认内核参数为:
注意!使用默认inotify机制做文件变化监控,可能有如下两个问题:1)目录太深或文件数量太多的情况下,有可能会有文件变化信息丢失的问题;2)在监控目录下,如果存在软链接形式的子目录时,有可能导致目录嵌套,任务死循环的问题。 这两个问题建议使用iLocker 监控方式解决。
也可以通过天存公司的iLocker文件监控模式,监控Linux下的文件变化。
先按常规方式安装iLocker for linux,如以使用 ilocker-yyyymmdd.tar.gz 安装包为例,可执行:
# tar xzvf ilocker-yyyymmdd.tar.gz
# cd ilocker
# cp -rf * /usr/local/iguard5/stagingd/
到iLocker/lib子目录下,选择合适的ilocker.ko文件,以下是示例的步骤,请根据实际情况选择适用的ilocker.ko文件。
cd /usr/local/iguard5/stagingd/lib
ln -sf ilocker\@2.6.32-573.el6.x86_64\@x86_64\@rhel6.7\@.ko ilocker.ko #这步要根据uname -an的实际情况选择合适模块
无需做其他配置,正常地启动iLocker:
# /usr/local/iguard5/stagingd/bin/ilocker start
在 linux版发布服务器的安装目录下执行:
# cd /usr/local/iguard5/stagingd
# mv libfen.so libfen.so.original
# ln -sf liblsmxfen.so libfen.so
在完成上述步骤后,才能启动iGuard发布服务程序:
# cd /usr/local/iguard5/stagingd/admtool start
然后通过Web控制台,常规地设置源目录和同步目录即可。
最后,再设置自启动文件(通常为/etc/rc.local时),一定要先写ilocker start这句命令,再接着写stagingd的admtool start,不要把顺序颠倒过来,例如:
xxxxxxxxxx
/usr/local/iguard5/stagingd/bin/ilocker start
/usr/local/iguard5/stagingd/admtool start
注意!使用iLocker机制做文件变化监控,可能有如下两个问题:
1)需要提前确定系统的版本,因为iLocker需要使用比较符合的系统版本的模块。如果iLocker当前安装包里,没有需要的内核版本,可以浏览在线版获得相应模块:http://www.tcxa.com.cn/ilocker/current/lib/
2)如果把iLocker监控用在NFS服务器端,有可能会有消息遗漏的现象,这和nfs服务特殊的文件句柄缓存操作有关系,不推荐使用。这种场景推荐使用【2.1.3.4 NFS Server 端监控】。
【备注1】如果依然需要使用iLocker1作为Linux 发布监控模式,具体步骤参见 FAQ 5.4.11 "Linux发布服务器怎么切换为 iLocker1做文件变化监控?"
【备注2】如果用iLocker2做发布监控,但发布程序没有自动上传文件,可以做如下检查: 1)在发布控制台上做好iLocker部署和站点配置以后,在发布服务器上输入调试命令:
# echo instruction=print > /dev/ilocker1
# dmesg
在执行dmesg命令后,能看到发布程序里配置的监控目录,说明两者关联好了,可以正常监控指定目录的文件变化了。如果执行了 dmesg后,没看到发布程序里的监控目录,那就是有问题的。
2)iLocker不能监控软链接目录!!! 可以执行一下命令,测试一下监控目录是否真实目录,/your/path
的部分需要替换为实际监控的目录:
# readlink -f /your/path
如果发现上述命令的执行结果,和监控的目录并不一致,就要调整为监控真实目录。
3)以上检查都确认过,依然无法自动更新。可以配置conf/ilocker.conf
,把需要监控的目录加入到ilocker.conf,并以log
模式做监控,完成后重启ilocker服务。看更新方式能否被iLocker监控到,并记录到 logs/ilocker.log
日志文件里。
4)如果以上1-3步骤都检查过,都符合预期,依然无法自动更新,可以输入命令 sestatus
,检查SELinux是否处于开启状态。如果开启了SELinux,可能影响我们程序的正常使用。可以尝试使用以下命令临时关闭SELinux:setenforce 0
。如需永久禁用SELinux,可以编辑 /etc/sysconfig/selinux
配置文件,设定SELinux的启动状态。
5)其他可能:可能有其他第三方类似的安全模块,和iLocker有冲突,需要执行 lsmod
命令仔细观察;某些CMS会使用一些特别的文件更新方式,需要修改发布程序安装目录下的 conf/fen.conf
配置文件,加入监控OPEN_APPEND OPEN_WRITE
操作的那一行指令。
如果某个用户已经装过iGuardvV3的Linux发布服务器,稳定运行了很长一段时间了。 现在换用V5,还是可以继续沿用V3的fuse模式文件监控的。
具体方法是在发布服务器的安装目录下,执行以下命令:
# mv libfen.so libfen.so.original
# ln -sf libnfslogfen.so libfen.so
其他使用方式和iGuardv3版本一致。
在某些场景里,多台CMS服务器通过NFS共享的方式,挂载NFS服务器上的同一个区域做文件共享。这种方式如果在每台CMS服务器上都部署iGuard发布程序,则采用2.1.3.2中的iLocker文件监控即可。但这种方式的弊端是,如果有多个NFS客户端都需要写入,每个上面就都需要部署iGuard发布程序,略微麻烦。
替代的方案是,直接部署在NFS Server端,监控通过NFS写入的文件变化。这种场景下,监控端和文件生成端往往不在一台主机上。
这个部署方案还需要额外的两个模块:
安装的大致步骤(以下我们假设在内核为3.10.0-862.el7.x86_64
的系统下部署):
1、替换现机器上的nfsd服务内核模块,该模块必须与系统内核完全精确匹配,使用的模块无法通用。
### 备份老的系统nfsd模块文件
cd /lib/modules/$(uname -r)/kernel/fs/nfsd
mv nfsd.ko.xz nfsd.ko.xz.bak
### 获得修改过的 nfsd.ko.xz内核模块
cd /tmp
tar xzvf nfsd-notifier-3.10.0-862.el7.x86_64-v2.0-20200615.tgz
### 把我们修改过的nfsd模块替换到系统里
cp nfsd.ko.xz /lib/modules/$(uname -r)/kernel/fs/nfsd
替换后重启 nfs服务:
# systemctl restart nfs-server
这个修改后的nfs模块能正常加载的标志是,nfs服务启动后,系统会产生名为 /dev/nfslog
的设备,可以如下查看:
# ls -l /dev/nfslog
crw------- 1 root root 244, 0 Jun 4 16:06 /dev/nfslog
注意:如果这台机器原来就启动着nfs服务,是需要重启整个机器,才能加载这个新的nfsd模块的,无法手工卸载/重新加载该模块。
2、安装 nfslogd 事件转发工具,假设安装包 nfslogd_linux_2.6_x86_64-20200604b.tgz
位于 /tmp 目录下。安装过程中需要指定该程序的安装目录,可以根据实际情况指定。以下假定安装在 /usr/local/iguard5/nfslogd
# tar xzvf nfslogd_linux_2.6_x86_64-20201022b.tgz
# cd nfslogd_linux_2.6_x86_64
# ./install.shDestination dir to install
(default:/usr/local/iguard/nfslogd)
/usr/local/iguard5/nfslogd
#上面的安装目录可以随意指定,如果搭配v5使用,建议放在v5的大目录下
安装结束后,执行 /usr/local/iguard5/nfslogd/run-nfslogd.sh start
启动该程序。
3、然后按照常规的步骤安装和部署iGuardv5发布程序。完成v5的发布程序安装后,修改conf/stagingd.conf配置文件,加入一段 "libfenpath":"libnfslogfen.so"
, 前后内容大致如下(加入倒数第二行,以及不要忘了前面的逗号):
xxxxxxxxxx
{ ... ...
"use_flying_db":false,
"force_rmold_on_rendir": false,
"taskdb":{
"max_task_cache_size":3000
},
"libfenpath":"libnfslogfen.so"
}
iGuardv5的监控源目录写NFS的输出目录。
更多的安装和使用细节,请参考研发写的详细版说明【iGuard 和 NFS 服务一起工作】。
注意:这种方式下,就只监控通过nfs客户端更新过来的文件了。其他方式修改了监控的源目录文件,并不会自动被上传。
从2019年8月份开始,Linux 发布又支持一种新的Hook监控方式,这种方式适用于CMS统一大批量生成文件的场景。从这个版本开始,Linux发布服务器安装目录下应该有以下文件:libfenjk.so、conf/fenjk.conf 和 conf/nfslogd.conf。以下为这种模式的安装步骤,需配置201908以后安装包时候。
1、把 conf/nfslogd.conf 配置文件,复制到系统 /etc 目录下:
# cp conf/nfslogd.conf /etc/nfslogd.conf
2、编辑发布程序安装目录下的 conf/stagingd.conf
配置文件,加入一段 "libfenpath":"libnfslogfen.so"
, 前后内容大致如下(加入倒数第二行,以及不要忘了前面的逗号):
xxxxxxxxxx
{
"default_worker_thread_number_per_host":2,
"listen":{
"address":"",
"port":39999,
"certnickname":"stagingd.iguard5",
"use_ssl":1
},
"ipv6first":false,
"ipv6only":false,
"use_flying_db":false,
"force_rmold_on_rendir": false,
"taskdb":{
"max_task_cache_size":3000
},
"libfenpath":"libnfslogfen.so"
}
3、编辑发布程序安装目录下的 conf/fenjk.conf
,重点是需要设置 "watch-dirs"
里的监控目录。如果有多个监控目录,这里是个数组,按JSON格式写即可。
xxxxxxxxxx
{
"log":{"level":"notice"},
"watch-dirs":[
"/usr/local/tomcat/webapps","/var/www/html"
]
"event-logfile":"/usr/local/iguard5/stagingd/logs/nfslogd.log"
}
4、如果需要监控的是Tomcat做CMS产生的文件,修改Tomcat安装目录下的 bin/setclasspath.sh,在最后加入以下内容:
xxxxxxxxxx
export FENJK_WORKDIR=/usr/local/iguard5/stagingd
export LD_PRELOAD=/usr/local/iguard5/stagingd/libfenjk.so
export LD_LIBRARY_PATH=/usr/local/iguard5/stagingd/:$LD_LIBRARY_PATH
重启Tomcat。其他 JAVA 中间件大致同理,需要在启动脚本里,加入以上几行配置。
5、正常配置iGuardv5 源端目录和目标端目录,测试文件自动同步功能。
6、上述安装步骤完成后,只是会自动上传由JAVA中间件产生的文件,其他进程即使把文件产生在监控目录内,也并不会自动上传。如果还有其他的进程产生的文件也需要自动上传,需要做以下步骤。
把发布程序安装目录下的 jkrun.sh 脚本,加入到系统目录下:
# ln -sf /usr/local/iguard5/stagingd/jkrun.sh /usr/local/bin/jkrun
在执行需要产生自动同步的命令行时,需要先运行jkrun脚本(设置环境变量)。如使用vi编辑监控目录下的文件,需要执行:
# jkrun vi /var/www/html/index.html
7、如果需要监控sftp-server的文件更新,需要做以下步骤:
# cd /usr/libexec/openssh/
# mv sftp-server sftp-server.exe
# touch sftp-server
# chmod +x sftp-server
编辑 sftp-server脚本,内容如下:
xxxxxxxxxx
#!/bin/sh
export FENJK_WORKDIR=/usr/local/iguard5/stagingd
export LD_PRELOAD=/usr/local/iguard5/stagingd/libfenjk.so
export LD_LIBRARY_PATH=/usr/local/iguard5/stagingd/:$LD_LIBRARY_PATH
/usr/libexec/openssh/sftp-server.exe $@
然后通过常规的sftp客户端上传更新文件即可。
备注:某些应用程序的dlopen操作,是以 RTLD_DEEPBIND 标记 打开的,这种方式下无法使用Hook方式监控文件操作。
在常规文件变更检查手段无效的情况下,最直接最原始的方法就是轮询文件检查。
工作原理:先获取目录结构信息,然后定时查询对比,文件时间戳或者尺寸有变化就视为文件发生变更。
与发布服务的 nfsd 接口相匹配的模块是 libnfslogfen.so,两者依旧通过配置文件 /etc/nfslogd.conf 来协调文件变更事件的信息交换。
部署步骤如下:
1、解压fepoll独立安装包(需要单独获取):
# tar xzvf linux-2.6.16.46-0.12-smp-x64-fepolld-20191205.tgz
2、执行fepoll的安装脚本:
# cd fepolld # ./install.sh
安装脚本提示安装到哪个路径。默认使用iGuard发布程序安装目录,实际上该目录和发布没有必然联系,可以设置在任意独立目录下。
Destination dir to install (default:/usr/local/iguard5/stagingd)
后续步骤提示是否需要覆盖 conf/nfslogd.conf配置文件,覆盖与否均可,无大碍。
3、编辑发布程序安装目录下的 conf/fepolld.conf
配置文件,在"watch_files"
部分,加入监控目录的配置(一定要写一个监控目录,否则fepolld服务无法启动)。如果有多个监控目录,这里是个数组,按JSON格式写即可。
x
{
"loglevel": "info",
"poll_interval": 30,
"reverse_check_in_polls": 15,
"thread_num": 4,
"max_path_depth": 30,
"follow_link": false,
"watch_files":["/var/www/html" ],
"filters":[
]
}
参数:
loglevel
工作日志级别,"info" | "debug"
thread_num
工作线程数量
poll_interval
轮询间隔,秒为单位
reverse_check_in_polls
多少个轮询进行一次反向检查,即根据已知的目录结构来检查文件/目录的删除情况。
max_path_depth
最大目录层次数,主要用来防止嵌套的文件链接导致文件遍历无穷尽
follow_link
文件链接跟随,遍历链接指向的文件或目录
watch_files
检查的文件/目录列表,例如: ["/data1/htdocs","/data2/images"]
filters
文件名过滤,忽略条目用减号"-"开始的通配串,例如:["-/proc/","-.exe"]
4、启动轮询监控服务,执行:./run-fepolld.sh start
其他就是常规地配置发布的监控目录,启动发布服务等。
以上五种监控方式,只能同时采用其中一种,不能混合使用。