本项目是一个外包出去的Web项目。硬件涉及同一局域网内的若干工控机及一个服务器。工控机内运行python工作脚本,服务器部署项目前后端等。现有需求:前端实时展示各个服务器的python脚本日志文件。
外包使用的日志方式是重定向python脚本输出到文件,再将文本写入mysql中。该方法会导sql文件过大,读取太慢且不易维护。
本人的想法是对日志系统进行重构,尽量使用原生的文件系统,搭建一个轻量化,易维护的服务。
于是使用NFS。NFS全名为Network File System。本服务可以用于linux系统间通过网络共享一个文件系统。设计思路是在服务器上搭建一个NFS-Server,通过局域网挂载出服务器的一个目录到工控板上某目录,使其对工控机可见,工控机实时写入python日志文本文件。
服务器端(192.168.8.71)安装NFS-Server:
apt install nfs-kernel-server
编辑配置文件
vim /etc/exports
添加一行:
/tmp/logs *(rw,sync,no_subtree_check,no_root_squash)
各参数说明如下:
ro 该主机对该共享目录有只读权限
rw 该主机对该共享目录有读写权限
root_squash 客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户
no_root_squash 客户机用root访问该共享文件夹时,不映射root用户
all_squash 客户机上的任何用户访问该共享目录时都映射成匿名用户
sync 资料同步写入到内存与硬盘中
async 资料会先暂存于内存中,而非直接写入硬盘
insecure 允许从这台机器过来的非授权访问
subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check 和上面相对,不检查父目录权限
wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
hide 在NFS共享目录中不共享其子目录
no_hide 共享NFS目录的子目录
secure NFS通过1024以下的安全TCP/IP端口发送
insecure NFS通过1024以上的端口发送
配置修改完成后,重启NFS服务
service nfs-kernel-server restart
客户端(192.168.8.72)安装NFS-Client:
apt install nfs-common
创建欲挂载到服务端192.168.8.71:/tmp/logs的目录/tmp/logs
使用指令挂载:mount -t nfs 192.168.8.71:/tmp/logs /tmp/logs
挂载后可以使用df -h指令查看已挂载的文件系统
root@pc-desktop:/tmp# df -h
文件系统 容量 已用 可用 已用% 挂载点
udev 3.9G 0 3.9G 0% /dev
tmpfs 787M 9.1M 778M 2% /run
/dev/sda5 36G 4.3G 30G 13% /
tmpfs 3.9G 184K 3.9G 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda6 93M 1.6M 85M 2% /d1
/dev/sda10 969M 1.3M 902M 1% /d5
/dev/sda8 380M 2.3M 354M 1% /d3
/dev/sda7 190M 1.6M 175M 1% /d2
/dev/sda9 772M 808K 715M 1% /d4
/dev/sda2 1.9G 6.0M 1.8G 1% /home
/dev/sda1 464M 74M 362M 17% /boot
tmpfs 787M 24K 787M 1% /run/user/108
tmpfs 787M 0 787M 0% /run/user/0
192.168.8.71:/tmp/logs 39G 14G 23G 38% /tmp/logs
在客户机上测试文件系统功能:echo '1' >>/tmp/logs/client.txt
主机上出现了client.txt文件。
在主机上测试: echo '1'>>/tmp/logs/server.txt
客户机上出现了server.txt文件