系统部署说明

       部署方案采用三台服务器,一主服务器、一客户机 + 一台备份服务器,备份服务器实现主服务器文件实时监控同步备份功能。

服务端配置

        # 在线/离线安装所需依赖

        yum install nfs-utils.x86_64 

        yum install rpcbind.x86_64

      

NFS主备 nfs主备切换不需要remount_centos

# 开机默认开启nfs和rpcbind服务, 输入以下命令:

systemctl enable nfs

systemctl enable rpcbind

systemctl start nfs

systemctl start rpcbind

systemctl stop firewalld

systemctl disable firewalld

# server端关闭防火墙,否则与client端进行连接会出现故障

           

NFS主备 nfs主备切换不需要remount_linux_02

# 系统根目录下创建共享目录nfs_data,赋予权限

[root@zard86 /]# cd /

[root@zard86 /]# mkdir nfs_data

[root@zard86 /]# chmod 777 nfs_data

NFS主备 nfs主备切换不需要remount_NFS主备_03

# 编辑 /etc/exports 文件,配置共享的目录及相关权限

vi /etc/exports        

/nfs_data *(rw,async,no_root_squash,no_subtree_check)

NFS主备 nfs主备切换不需要remount_NFS主备_04

   参数说明:

/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服务

NFS主备 nfs主备切换不需要remount_服务器_05

客户端配置

# 在线/离线安装所需依赖安装依赖 (与serve端相同)
yum install nfs-utils.x86_64 

yum install rpcbind.x86_64

NFS主备 nfs主备切换不需要remount_子目录_06

# 开机默认开启nfs和rpcbind服务, 输入一下命令:

systemctl enable nfs

systemctl enable rpcbind

systemctl start nfs

systemctl start rpcbind

systemctl stop firewalld

systemctl disable firewalld

# 客户端需要关闭防火墙,否则与server端进行连接会出现故障

NFS主备 nfs主备切换不需要remount_子目录_07

# 开启服务后挂载进行挂载即可:

mount -t nfs 192.168.51.160:/nfs_data /nfs_data

NFS主备 nfs主备切换不需要remount_NFS主备_08

♧ 文件共享验证

# 192.168.51.160  服务端创建文件夹“华夏”,接下来去客户端看看

NFS主备 nfs主备切换不需要remount_服务器_09

# 192.168.51.170  当前服务器为客户端170,进入客户端挂载的文件看一看是否能查看服务端的文件的变化

下图可以看到文件夹下的文件已经共享过来 ↓

NFS主备 nfs主备切换不需要remount_NFS主备_10

♧ 主备服务器实现同步备份

     文件实时同步备份功能通过 rsync + inotify 实现

 #  yum或者离线安装 rsync

yum install rsync -y

NFS主备 nfs主备切换不需要remount_子目录_11

#  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接下来我们看看操作的效果:

NFS主备 nfs主备切换不需要remount_子目录_12

#  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

NFS主备 nfs主备切换不需要remount_服务器_13

#  监控源主机共享目录的内容变化:

1、先安装yum install epel源

yum install epel-release

NFS主备 nfs主备切换不需要remount_NFS主备_14

2、安装inotify-tools工具

yum install inotify-tools   

NFS主备 nfs主备切换不需要remount_centos_15


或者还有另外一个方式安装:

[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 目录下生成两个二进制文件:

NFS主备 nfs主备切换不需要remount_服务器_16

# 常用命令:

基本命令: inotifywait    [选项]    目标文件夹-m:       持续监控(捕获一个事件后不退出) -r:       递归监控、包括子目录及文件 -q:       减少屏幕输出信息 -e:       指定监视的modify,move,create,delete,attrig等事件类别;

#  监视文件夹的变化


inotifywait -rm /nfs_data/   另开一个shell窗口,在/nfs_data/目录下面操作创建文件,可以看到相关的信息输出 


NFS主备 nfs主备切换不需要remount_NFS主备_17

# 此时手动同步一下文件到备份服务器192.168.51.180,看文件是否被rsync同步过去了

   rsync -av --delete /nfs_data root@192.168.51.180:/nfs_data_back/  

NFS主备 nfs主备切换不需要remount_linux_18

NFS主备 nfs主备切换不需要remount_服务器_19

(该图为后补的,重点看到监控变化的效果)

# 接下来我们写实时同步脚本: 

在/root/ 目录下新建脚本文件 inotifywait_rsync.sh

NFS主备 nfs主备切换不需要remount_子目录_20

编辑 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 &

NFS主备 nfs主备切换不需要remount_子目录_21

# 测试实时同步效果

   如图所示我们执行一系列文件操作

NFS主备 nfs主备切换不需要remount_子目录_22

 接下来查看192.168.51.160源服务器上操作的文件是否实时同步到51.180备份服务器过去

NFS主备 nfs主备切换不需要remount_子目录_23

可以看到数据已经同步成功!