【网络文件共享】

1、存储类型

  • 直连式存储:Direct-Attached Storage,简称DAS,本机使用,不支持远程,可管理块设备,适用于数据量不大,对磁盘访问速度要求较高的环境
  • 网络附加存储:Network-Attached Storage,简称NAS,跨网络形式,可管理块设备,分配使用空间,适用于文件服务器,存储非结构化数据
  • 存储区域网络:Storage Area Network,简称SAN,跨网络形式,可使用文件,不占用本机空间,共享使用空间,大型应用或数据库系统

2、NFS网络共享服务

C/S形式

配置文件

/etc/exports
/etc/exports.d/*.exports     #自定义,后缀需指定
2.1、nfs-utils工具

实现共享文件夹

环境:两台主机服务器端10.0.0.8 , 客户端10.0.0.7

##在服务器端下载工具
yum -y install nfs-utils
systemctl enable --now nfs-server

#创建所需共享文件夹
mkdir /data/nfs -p


#更改配置文件
vim /etc/exports        #更改配置文件,把谁共享出去,希望谁能访问(且访问后能做什么操作,可不写,默认是ro只读)
/data/nfs   *(rw,ro)
#/data/test1   *(rw,no_root_squash)                      #不压榨远程root用户
#/data/test1   *(rw,all_squash)                          #所有远程用户都压榨成nobody
/data/nfs   *(rw,all_squash,anonuid=666,anongid=666)     #所有远程用户都压榨成uid=666的用户和gid=666的组
#/data/test1   *(rw,all_squash,anonuid=666,anongid=666) 10.0.0.17(ro)  #针对17主机设为只读权限

#对NFS服务来说,远程客户端的root访问时默认会被压榨成nobody用户,普通用户不会被压榨而是映射成服务器端uid相同的用户,如没有会显示远程普通用户的uid

#重新加载配置文件
exportfs -r      #或者重启服务

exportfs -v      #可显示当前共享的资源
exportfs -au     #暂停共享
exportfs -a      #恢复共享

##在客户端
yum -y install nfs-utils     
#ubuntu使用apt install nfs-common,ubuntu敲所需要的命令可找到软件包所在
root@ubuntu2004:~# showmount
Command 'showmount' not found, but can be installed with:
apt install nfs-common

#查看是否有可连接共享文件夹
showmount -e 10.0.0.8

#创建挂载目录,便于管理,名称没要求
mkdir /data/nfs1 -p


#挂载
mount 10.0.0.8:/data/nfs /data/nfs1
#永久挂载  _netdev选项可以判断网络通时可以挂载,网络不通就不挂载
vim /etc/fstab
10.0.0.8:/data/nfs    /data/nfs1   nfs  defaults,_netdev  0  0

mount -a

#df查看挂载
2.2、inotify-tools工具

通过Inotify可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况

yum -y install inotify-tools

inotifywait #常用选项,可以监控文件属性变化,有新的读写操作会在屏幕上显示
inotifywatch

2.2.1、inotifywait常用选项

默认一次性

[root@rocky8 ~]#inotifywait /data/
Setting up watches.
Watches established.


-m, --monitor             #始终保持事件监听
-d, --daemon              #以守护进程方式执行,和-m相似,配合-o使用
-r, --recursive           #递归监控目录数据信息变化
-q, --quiet               #输出少量事件信息,静默
--exclude <pattern>       #指定排除文件或目录,使用扩展的正则表达式匹配的模式实现
--excludei <pattern>      #和exclude相似,不区分大小写
-o, --outfile <file>      #打印事件到文件中,相当于标准正确输出,注意:使用绝对路径
-s, --syslogOutput        #发送错误到syslog相当于标准错误输出
--timefmt <fmt>           #指定时间输出格式
--format <fmt>            #指定的输出格式;即实际监控输出内容
-e                        #指定监听指定的事件,如果省略,表示所有事件都进行监听
2.2.2、输出格式定义
%T       #输出时间格式中定义的时间格式信息,通过 --timefmt option 语法格式指定时间信息
%w       #事件出现时,监控文件或目录的名称信息,相当于dirname
%f       #事件出现时,将显示监控目录下触发事件的文件或目录信息,否则为空,相当于basename
%e       #显示发生的事件信息,不同的事件默认用逗号分隔
%Xe      #显示发生的事件信息,不同的事件指定用X进行分隔
--format "%T %w%f event: %;e"
--format '%T %w %f'

#传统时间格式
%Y       #年份信息,包含世纪信息
%y       #年份信息,不包括世纪信息
%m       #显示月份,范围 01-12
%d       #每月的第几天,范围是 01-31
%H       #小时信息,使用 24小时制,范围 00-23
%M       #分钟,范围 00-59
%S       #秒,范例 0-60
--timefmt "%Y-%m-%d %H:%M:%S"

#-e选项指定事件
create           #文件或目录创建
delete           #文件或目录被删除
modify           #文件或目录内容被写入
attrib           #文件或目录属性改变
close_write      #文件或目录关闭,在写入模式打开之后关闭的
close_nowrite    #文件或目录关闭,在只读模式打开之后关闭的
close            #文件或目录关闭,不管读或是写模式
open             #文件或目录被打开
lsdir            #浏览目录内容
moved_to         #文件或目录被移动到监控的目录中
moved_from       #文件或目录从监控的目录中被移动
move             #文件或目录不管移动到或是移出监控目录都触发事件
access           #文件或目录内容被读取
delete_self      #文件或目录被删除,目录本身被删除
unmount          #取消挂载
2.2.3、范例
#持续后台监控,并记录日志
inotifywait -o /root/inotify.log -drq /data/www --timefmt "%Y-%m-%d %H:%M:%S" --format "%T %w%f event: %e"

#持续前台监控特定事件
inotifywait -mrq /data/www --timefmt "%F %H:%M:%S" --format "%T %w%f event: %;e" -e create,delete,moved_to,close_write,attrib
2.2.4、rsync用法
rsync rsync://root@10.0.0.8/backup .             #下载共享文件夹里的文件到本机
rsync /etc/shells rsync://root@10.0.0.8/backup   #将文件上传到共享目录
rsync /etc/shells 10.0.0.8::backup               #将文件上传到共享目录
rsync --password-file=/etc/rsync.pas  rsync://rsyncuser@10.0.0.8::backup   #非交互式访问rsync服务器
2.2.5、inotify+rsync+shell 脚本实现实时数据同步

两台主机,搭建好rsyncd的备份服务器,创建监控脚本,触发多次rsync,效率稍低,占据资源

10.0.0.7客户端 inotify监控文件变化,主存储设备

10.0.0.8rsyncd服务器 共享出文件夹,用于同步接收客户端所发送的文件,备份存储设备

##10.0.0.8上
#搭建rsyncd服务器
yum -y install rsync-daemon
mkdir -p /data/backup/

vim /etc/rsyncd.conf
uid = root 
gid = root  
max connections = 0
ignore errors
exclude = lost+found/
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
reverse lookup = no
[backup] 
path = /data/backup/  
comment = backup dir
read only = no 
auth users = rsyncuser  
secrets file = /etc/rsync.pas

#可每0.5秒监控一次/data/backup/目录下的文件属性变化
watch -n 0.5 ls -l /data/backup/

##在10.0.0.7上脚本实现监控文件属性变化并同步
[root@10.0.0.7 ~]#vim inotify_rsync.sh
#!/bin/bash
SRC='/data/www/'                      #注意最后的/,指定监控哪个文件夹
DEST='rsyncuser@10.0.0.8::backup'     #将所监控文件备份到远程rsyncd主机
rpm -q rsync &> /dev/null || yum -y install rsync
rpm -q inotify-tools &> /dev/null || yum -y install inotify-tools

inotifywait  -mrq --exclude=".*\.swp" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR FILE;do
        FILEPATH=${DIR}${FILE}
       rsync -az --delete  --password-file=/etc/rsync.pas $SRC $DEST && echo
"At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
done

bash inotify_rsync.sh   #生产中建议后台执行该脚本,nohup
2.3、sersync 实现实时数据同步

基于rsync协议

2.3.1、环境准备

官方下载地址,需科学上网

wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz

tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/

#用户密码文件
useradd rsyncuser
echo "rsyncuser:123456" > /etc/rsync.pas
chmod 600 /etc/rsync.pas
2.3.2、更改配置文件

修改##位置即可

[root@rocky ~]#vim /usr/local/GNU-Linux-x86/confxml.xml
 ......
 <moveTo start="true"/>
 <attrib start="true"/>                 ##修改此行为true,文件属性变化后也会同步
 <modify start="false"/>
   </inotify>
   <sersync>                            #rsync命令的配置段
 <localpath watch="/data/www">          ##修改此行,需要同步的源目录或文件,建议同步目录
   <remote ip="备份服务器IP" name="backup"/>  ##修改此行,指定备份服务器地址和rsync daemon的模块名,如果下面开启了ssh start,此时name为远程shell方式运行时的目标目录
    ......
    <commonParams params="-artuz"/>      #指定rsync选项,账号验证
   <auth start="true" users="rsyncuser" passwordfile="/etc/rsync.pas"/>   ##修改此行,为true,指定备份服务器的rsync配置的用户和密码文件
   <userDefinedPort start="false" port="874"/><!-- port=874 -->    #指定rsync的非标准端口号
   ......
2.3.3、sersync使用
[root@centos8 ~]#cd /usr/local/GNU-Linux-x86/
[root@centos8 ~]#./sersync2 -h     #查看帮助
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
_______________________________________________________
参数-d:启用守护进程模式,后台执行
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍,先同步一次
c参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用当前工作目录下的confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序

./sersync2 -dro /usr/local/GNU-Linux-x86/confxml.xml
2.3.4、基于ssh协议使用sersync
#更改配置文件
[root@rocky ~]#vim /usr/local/GNU-Linux-x86/confxml.xml
 <attrib start="true"/>

<localpath watch="/data/www">         
   <remote ip="备份服务器IP" name="/databackup"/>     #注意写完整路径
   
    <auth start="false" users="rsyncuser" passwordfile="/etc/rsync.pas"/>
    
     <ssh start="true"/>        #更改为true
     
#运行程序
./sersync2 -dro /usr/local/GNU-Linux-x86/confxml.xml

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值