NFS文件共享 + 主备服务器自动同步方案部署落地

  • 系统部署说明

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

  • 服务端配置

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


        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备份服务器过去

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

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值