今天手上负责的一个管理平台发布,测试的时候发现处理详情无法直接在页面展示。
这里的处理详情是通过WEB后台的JAVA程序直接读取磁盘文件获取,但现在后台和WEB分布在两台机器上,当然无法显示。
考虑到两台机器分别申请了不同的网络策略,互相不可迁移,必须通过某种机制保证两台服务器能够实时同步文件。
考虑的方案有下面两种:
1、使用 rsync 定期同步文件,比如每分钟同步,但这样延迟会比较大
2、使用 NFS 文件系统,把台后机器上的日志目录直接映射到WEB所在主机,以做到实时显示。
说干就干,处理步骤如下:
1、打开文件 /etc/exports ,增加下面一行:
[root@172.27.39.37:/etc/rc.d/rc3.d]#vim /etc/exports
# See the exports(5) manpage for a description of the syntax of this file.
# This file contains a list of all directories that are to be exported to
# other computers via NFS (Network File System).
# This file used by rpc.nfsd and rpc.mountd. See their manpages for details
# on how make changes in this file effective.
/data/amc_data/logs 10.130.23.142(rw,no_root_squash,sync)
(这里设置/data/amc_data/logs目录,允许WEB主机142访问,对应权限为:rw 可读写; no_root_squash 如果是root属主目录则不继承root权限; sync 实时写入内存和磁盘)
2、在后台机器上启动 rpc 服务:
[root@172.27.39.37:/etc/rc.d/rc3.d]#/etc/init.d/portmap start
Starting RPC portmap daemon done
[root@172.27.39.37:/etc/rc.d/rc3.d]#
[root@172.27.39.37:/etc/rc.d/rc3.d]#/etc/init.d/portmap status
Checking for RPC portmap daemon: running
[root@172.27.39.37:/etc/rc.d/rc3.d]#
查看状态:
[root@172.27.39.37:/etc/rc.d/rc3.d]#rpcinfo -p
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100024 1 udp 33428 status
100021 1 udp 33428 nlockmgr
100021 3 udp 33428 nlockmgr
100021 4 udp 33428 nlockmgr
100024 1 tcp 38543 status
100021 1 tcp 38543 nlockmgr
100021 3 tcp 38543 nlockmgr
100021 4 tcp 38543 nlockmgr
100005 1 udp 907 mountd
100005 1 tcp 908 mountd
100005 2 udp 907 mountd
100005 2 tcp 908 mountd
100005 3 udp 907 mountd
100005 3 tcp 908 mountd
[root@172.27.39.37:/etc/rc.d/rc3.d]#
3、在后台机器上启动 nfs 服务:
[root@172.27.39.37:/etc/rc.d/rc3.d]#/etc/init.d/nfsserver start
Starting kernel based NFS serverFATAL: Could not load /lib/modules/2.6.16.54-0.2.3-TENCENT64-STATE-OC-080623/modules.dep: No such file or directory
/etc/init.d/nfsserver: line 105: echo: write error: Device or resource busy
done
[root@172.27.39.37:/etc/rc.d/rc3.d]#/etc/init.d/nfsserver status
Checking for kernel based NFS server: running
[root@172.27.39.37:/etc/rc.d/rc3.d]#
(注:有些机器上启动命令为 /etc/init.d/nfs start)
查看状态:
[root@172.27.39.37:/etc/rc.d/rc3.d]#showmount -e
Export list for 39_37:
/data/amc_data/logs 10.130.23.142
[root@172.27.39.37:/etc/rc.d/rc3.d]#
4、在WEB机器上挂载NFS分区到目录:
[root@10.130.23.142:/root]#mkdir -p /data/amc_data/logs
[root@10.130.23.142:/root]#
[root@10.130.23.142:/root]#mount -t nfs -o tcp 172.27.39.37:/data/amc_data/logs /data/amc_data/logs
[root@10.130.23.142:/root]#
(挂载过程比较久,等一下就好了)
测试,在WEB机器上成功看到后台机器上的文件列表:
[root@10.130.23.142:/data/amc_data/logs]#ll
total 448K
drwxr-xr-x 2 mqq mqq 4.0K 2011-11-03 23:09:59 20111103213404243/
drwxr-xr-x 2 mqq mqq 4.0K 2011-11-04 09:54:26 20111104095229170/
至此,文件系统挂载成功:
[root@10.130.23.142:/data/amc_data/logs]#df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 10325748 1632848 8168380 17% /
udev 8214280 176 8214104 1% /dev
/dev/sda3 20641788 2933412 16659736 15% /usr/local
/dev/sda4 107448544 34551704 67438760 34% /data
172.27.39.37:/data/amc_data/logs
107448544 66630880 35359584 66% /data/amc_data/logs
[root@10.130.23.142:/data/amc_data/logs]#
增加自动启动功能:
1、在WEB机器上修改 /etc/fstab 文件,增加下面一行(用于开机时自动挂载文件系统):
[root@172.27.39.37:/data/amc_data/logs]#vim /etc/rc.d/rc.local
/etc/rc.d/portmap
修改自动启动文件/etc/rc.d/rc.local,增加下面记录:
[root@10.130.23.142:/data/amc_data/logs]#vim /etc/fstab
172.27.39.37:/data/amc_data/logs /data/amc_data/logs nfs vers=3,rsize=4096,wsize=4096,timeo=14,intr
2、检查后台机器上的自动启动服务:
[root@172.27.39.37:/etc/rc.d/rc3.d]#chkconfig --list | grep -E "portmap|nfsserver"
nfsserver 0:off 1:off 2:off 3:off 4:off 5:off 6:off
portmap 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@172.27.39.37:/etc/rc.d/rc3.d]#
设置 portmap 和 nfsserver 服务在runlevel为3或5时自动启动:
root@172.27.39.37:/etc/rc.d/rc3.d]#chkconfig portmap 35 on
Usage: chkconfig -s service on|off|runlevels
[root@172.27.39.37:/etc/rc.d/rc3.d]#chkconfig nfsserver 35
[root@172.27.39.37:/etc/rc.d/rc3.d]#
[root@172.27.39.37:/etc/rc.d/rc3.d]#chkconfig --list | grep -E "portmap|nfsserver"
nfsserver 0:off 1:off 2:off 3:on 4:off 5:on 6:off
portmap 0:off 1:off 2:off 3:on 4:off 5:on 6:off
[17:12:27][root@172.27.39.37:/etc/rc.d/rc3.d]#