系统部署说明
部署方案采用三台服务器,一主服务器、一客户机 + 一台备份服务器,备份服务器实现主服务器文件实时监控同步备份功能。
服务端配置
# 在线/离线安装所需依赖
yum install nfs-utils.x86_64
yum install rpcbind.x86_64
# 开机默认开启nfs和rpcbind服务, 输入以下命令:
systemctl enable nfs
systemctl enable rpcbind
systemctl start nfs
systemctl start rpcbind
systemctl stop firewalld
systemctl disable firewalld
# server端关闭防火墙,否则与client端进行连接会出现故障
# 系统根目录下创建共享目录nfs_data,赋予权限
[root@zard86 /]# cd /
[root@zard86 /]# mkdir nfs_data
[root@zard86 /]# chmod 777 nfs_data
# 编辑 /etc/exports 文件,配置共享的目录及相关权限
vi /etc/exports
/nfs_data *(rw,async,no_root_squash,no_subtree_check)
参数说明:
/public | 需要共享给其他机器的目录 |
* | 其他机器的IP地址,*代表任意机器都可以访问 |
ro | 该主机对该共享目录有只读权限 |
rw | 操作权限,rw代表其他机器对此目录具有可读写权限 |
async | 资料会先暂存于内存中,而非直接写入硬盘 |
sync | Sync 资料同步写入到内存与硬盘中 |
root_squash | 客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户 |
no_root_squash | 客户机用root访问该共享文件夹时,不映射root用户 |
all_squash | 客户机上的任何用户访问该共享目录时都映射成匿名用户 |
anonuid | 客户机上的用户映射成指定的本地用户ID的用户 |
anongid | 将客户机上的用户映射成属于指定的本地用户组ID |
insecure | 允许从这台机器过来的非授权访问 |
subtree_check | 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认) |
no_subtree_check | 不检查父目录权限 |
no_wdelay | 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置 |
wdelay | 如果多个用户要写入NFS目录,则归组写入 |
no_hide | 共享NFS目录的子目录 |
hide | 在NFS共享目录中不共享其子目录 |
# 编辑好后:wq保存退出,执行exportfs -rv 命令,nfs会重新读取配置文件,无需重启nfs服务
客户端配置
# 在线/离线安装所需依赖安装依赖 (与serve端相同)
yum install nfs-utils.x86_64
yum install rpcbind.x86_64
# 开机默认开启nfs和rpcbind服务, 输入一下命令:
systemctl enable nfs
systemctl enable rpcbind
systemctl start nfs
systemctl start rpcbind
systemctl stop firewalld
systemctl disable firewalld
# 客户端需要关闭防火墙,否则与server端进行连接会出现故障
# 开启服务后挂载进行挂载即可:
mount -t nfs 192.168.51.160:/nfs_data /nfs_data
♧ 文件共享验证
# 192.168.51.160 服务端创建文件夹“华夏”,接下来去客户端看看
# 192.168.51.170 当前服务器为客户端170,进入客户端挂载的文件看一看是否能查看服务端的文件的变化
下图可以看到文件夹下的文件已经共享过来 ↓
♧ 主备服务器实现同步备份
文件实时同步备份功能通过 rsync + inotify 实现
# yum或者离线安装 rsync
yum install rsync -y
# rsync本地同步操作
语法:rsync [选项...] 源目录 目标目录 复制:完全拷贝源到目标; 同步:增量拷贝,只传输变化过的数据。
参数详解:
-n: 测试同步过程,不做实际修改 --delete: 删除目标文件夹内多余的文档 -a: 归档模式,相当于-rlptglD -v: 显示详细操作信息 -z: 传输过程中启用压缩/解压 -r: 递归,包括目录/子目录及所有文件 -l: 保留符号链接文件 -p/-t: 保留文件的权限、时间标记 -o/-g: 保留文件的属主/属组标记 -D: 保留设备文件及其它特殊文
示 例: # 把nfs_data目录,同步复制到/nfs_data_back这个目录下面,且在目录下生成nfs_data目录 rsync -av /nfs_data /nfs_data_back # 把nfs_data目录中的文件,同步复制到/nfs_data_back这个目录下面,不会生成nfs_data目录 rsync -av /nfs_data/ /nfs_data_back/ # 保持源和目标文件一致,--delete表示删除目标文件夹内多余的文档 rsync -av --delete /nfs_data /nfs_data_back/
# rsync远端同步操作
rsync user@host:远程目录/ 下载: rsync [...] user@host:远程目录 本地目录 上传: rsync [...] 本地目录 user@host:远程目录
示 例:
# 保持源和目标一致,上传至:/opt/remote/目录下
rsync -av --delete /nfs_data root@192.168.51.180:/nfs_data_back/
j接下来我们看看操作的效果:
# rsync实时同步
# 源主机生成公钥与私钥:/root/.ssh/id_rsa,源主机: /root/.ssh/known_hosts 里面内容是登陆目标主机的日志信息,紧接着把公钥复制到:root@192.168.51.180:/root/.ssh/authorized_keys 的这个文件中,完成ssh无密码验证
ssh-keygen ssh-copy-id root@192.168.51.180
# 监控源主机共享目录的内容变化:
1、先安装yum install epel源
yum install epel-release
2、安装inotify-tools工具
yum install inotify-tools
或者还有另外一个方式安装:
[root@zard86 ~] # yum install make gcc gcc-c++[root@zard86 ~] # wget http://nchc.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz [root@zard86 ~] # tar xzf inotify-tools-3.13.tar.gz [root@zard86 ~] # cd inotify-tools-3.13 [root@zard86 inotify-tools-3.13] # ./configure [root@zard86 inotify-tools-3.13] # make && make install
编译安装成功之后,在 /usr/local/bin 目录下生成两个二进制文件:
# 常用命令:
基本命令: inotifywait [选项] 目标文件夹-m: 持续监控(捕获一个事件后不退出) -r: 递归监控、包括子目录及文件 -q: 减少屏幕输出信息 -e: 指定监视的modify,move,create,delete,attrig等事件类别;
# 监视文件夹的变化
inotifywait -rm /nfs_data/ 另开一个shell窗口,在/nfs_data/目录下面操作创建文件,可以看到相关的信息输出
# 此时手动同步一下文件到备份服务器192.168.51.180,看文件是否被rsync同步过去了
rsync -av --delete /nfs_data root@192.168.51.180:/nfs_data_back/
(该图为后补的,重点看到监控变化的效果)
# 接下来我们写实时同步脚本:
在/root/ 目录下新建脚本文件 inotifywait_rsync.sh
编辑 inotifywait_rsync.sh 脚本文件
# vi inotifywait_rsync.sh
#! /bin/bash
while inotifywait -rqq /nfs_data
do
rsync -a --delete /nfs_data root@192.168.51.180:/nfs_data_back/
done# chmod +x irsync.sh
# nohup /bin/bash /root/inotifywait_rsync.sh &
编辑好文件后 :wq 保存退出,在 /root/ 目录下执行下面命令,赋予权限并后在后台启动
[root@zard86 ~]# ls
anaconda-ks.cfg inotifywait_rsync.sh
[root@zard86 ~]# ! /bin/bash
[root@zard86 ~]# chmod +x inotifywait_rsync.sh
[root@zard86 ~]# chmod 755 inotifywait_rsync.sh
[root@zard86 ~]# nohup /bin/bash /root/inotifywait_rsync.sh &
# 测试实时同步效果
如图所示我们执行一系列文件操作
接下来查看192.168.51.160源服务器上操作的文件是否实时同步到51.180备份服务器过去
可以看到数据已经同步成功!