Day 36 NFS服务及实时同步备份

实时复制实践:

前提:backup rsync服务端部署好。

1)部署NFS客户端

[root@nfs01 ~]# echo 'export RSYNC_PASSWORD=oldboy' >>/etc/bashrc

[root@nfs01 ~]# source /etc/bashrc

[root@nfs01 ~]# echo $RSYNC_PASSWORD

oldboy


测试推送

[root@nfs01 ~]# rsync -avz /data [email protected]::backup/

sending incremental file list

sent 164 bytes  received 25 bytes  126.00 bytes/sec

total size is 0  speedup is 0.00

2)查看inotify支持情况

[root@nfs01 ~]# uname -r

3.10.0-957.5.1.el7.x86_64

[root@nfs01 ~]#  ls -l /proc/sys/fs/inotify/

总用量 0

-rw-r--r-- 1 root root 0 4月  19 09:45 max_queued_events

-rw-r--r-- 1 root root 0 4月  19 09:45 max_user_instances

-rw-r--r-- 1 root root 0 4月  19 09:45 max_user_watches

3)安装inotify-tools

yum install epel-release -y

yum install inotify-tools -y

[root@nfs01 ~]# rpm -ql inotify-tools|head -2

/usr/bin/inotifywait

/usr/bin/inotifywatch

[root@nfs01 ~]# rpm -qa inotify-tools

inotify-tools-3.14-8.el7.x86_64


4)命令参数和事件知识

5)测试实践

inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create /data

6)思考:实现数据复制

监控哪些事件?

增 改 删 需要监控

[root@nfs01 ~]# inotifywait -mrq --format '%w%f' -e close_write,delete /data

/data/a.txt

/data/a.txt

/data/a.txt

7)编写脚本

mkdir /server/scripts -p

rsync -az --delete /data/ [email protected]::backup

[root@nfs01 /server/scripts]# /bin/sh /server/scripts/monitor1.sh &

[2] 9199

[root@nfs01 /server/scripts]# tail -2 /etc/rc.local

########################

/bin/sh /server/scripts/monitor1.sh &

实时同步脚本:

(一)

[root@nfs01 /server/scripts]# cat monitor1.sh

#!/bin/sh

cmd="/usr/bin/inotifywait"

$cmd -mrq  --format '%w%f' -e close_write,delete /data|\

while read line

do

  cd /data&&\

  rsync -az --delete ./ [email protected]::backup

done

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

脚本(二)

[root@nfs01 /server/scripts]# cat monitor.sh

#!/bin/sh

cmd="/usr/bin/inotifywait"

$cmd -mrq  --format '%w%f' -e close_write,delete /data|\

while read line

do

  #删除事件发生

  [ ! -e  "$line" ] && cd /data &&\

  rsync -az --delete ./ [email protected]::backup && continue

  #处理增改事件

  rsync -az --delete $line [email protected]::backup

done

(以上脚本二选一)

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

NFS 配置文件各参数详解

执行 man exports 命令,然后切换到文件结尾,可以快速查看如下样例格式:

nfs 共享参数    参数作用

rw*                    读写权限

all_squash            无论 NFS 客户端使用什么账户访问,均映射为 NFS 服务器的匿名用户(常用)

sync*                同时将数据写入到内存与硬盘中,保证不丢失数据

async                优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据

anonuid*            配置 all_squash 使用,指定 NFS 的用户 UID,必须存在系统

anongid*            配置 all_squash 使用,指定 NFS 的用户 UID,必须存在系统

1.1 ro 权限修改及测试流程

a. 验证 ro 权限

[root@nfs ~]# cat /etc/exports

/data 172.16.1.0/24(ro,sync,all_squash)

b. 重载 nfs(exportfs)

[root@nfs ~]# systemctl restart nfs-server

c. 先卸载客户端已挂载好的共享,并重新挂载

[root@web01 ~]# umount /data/

[root@web01 ~]# mount -t nfs 172.16.1.31:/data /data/

d. 测试是否能写数据

[root@web01 ~]# cd /data/

[root@web01 data]# touch file-test  #不允许写入数据

touch: cannot touch 'file-test': Read-only file system

1.2 指定执行共享用户的 uid 与 gid

a. 验证 all_squash,anonuid,anongid



[root@nfs ~]# cat /etc/exports

/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

b. 需要添加一个 uid 是 666,gid 是 666 的用户

[root@nfs ~]# groupadd -g 666 www

[root@nfs ~]# useradd -u666 -g666 www

[root@nfs ~]# id www

uid=666(www) gid=666(www) 组=666(www)

c. 必须重新授权为 www 用户,否则无法写入文件

[root@nfs ~]# chown -R www.www /data/

d. 重启服务

[root@nfs ~]# systemctl restart nfs-server

e. 客户端重新挂载

[root@web01 /]# umount /data/

[root@web01 /]# mount -t nfs 172.16.1.31:/data /data/

[root@web01 data]# ll

total 4

-rw-r--r-- 1 666 666 4 Sep  6 03:41 test

f. 测试是否能写入数据

[root@web01 data]# touch tes1

[root@web01 data]# ll

total 4

-rw-r--r-- 1 666 666 0 Sep  7 10:38 tes1

-rw-r--r-- 1 666 666 4 Sep  6 03:41 test

g. 为了防止权限不一致导致权限不足,建议在客户端创建一模一样的用户

[root@web01 ~]# groupadd -g 666 www

[root@web01 ~]# useradd -u666 -g666 www

[root@web01 ~]# id www

uid=666(www) gid=666(www) groups=666(www)



第2章 实时同步备份

定义:通过 sersync 服务将 nfs 服务器的存储,实时备份到 backup 服务器中,以此来避免 nfs 服务器 宕机带来的危害。

2.1 sersync 配置流程(基于已搭建完成 nfs、rsync 服务基础上)

2.1.1 backup 服务器配置 rsync

增加 data 模块

2.1.2 nfs 服务器配置

a. yum 安装 inotify-tools 工具

[root@nfs-31 ~]# yum -y install inotify-tools

b.官网下载安装 sersync

[root@nfs~]#wget

https://raw.githubusercontent.com/wsgzao/sersync/master/sersync2.5.4_64bit_binary_stable_final.tar.

gz

c. 解压并将解压内容移动到/usr/local/sersync 目录下 [root@nfs~]# mv GNU.******/  /usr/local/sersync e. 修改配置文件

[root@nfs-31 ~]# vim /usr/local/sersync/confxml.xml

5     

  6     

  7       

  8       

  9       

10       

11   


12   

13       

14       

15       

16       

17       


18       

19       

20       

21   


23   

24       

25             

28       


29       

30           

31           

32           

33           

34           

35       

           

  36       

f. 创建密码文件

[root@nfs-31 ~]# echo ‘6256133’>/etc/rsync.password.sersync 

6256133

g. 设置权限

[root@nfs ~]# chmod 600 /etc/rsync.pass

h. 启动进程 查看参数

[root@nfs-31 ~]# /usr/local/sersync/sersync2 –h

启动进程

[root@nfs-31 ~]# /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml 


第3章 企业场景中 nfs 服务器宕机如果临时启用 backup 服务器充当 nfs

3.1 1.nfs 和 backup 两台服务器应该保持一样(nfs 配置。nfs 共享的目录。nfs 的权限)

    [root@backup ~]# yum install nfs-utils -y

    [root@backup ~]# rsync -avz [email protected]:/etc/exports /etc/

    [root@backup ~]# groupadd -g 666 www

    [root@backup ~]# useradd -u666 -g666 www

3.2 配置 backup

[root@rsync-backup ~]# vim /etc/rsyncd.conf

uid = www

gid = www

port = 873

fake super = yes

use chroot = no

max connections = 200

timeout = 600

ignore errors

read only = false

auth users = rsync_backup

secrets file = /etc/rsync.password

list = false

log file = /var/log/rsyncd.log

#####################################

[backup]

comment = welcome to oldboyedu backup!

path = /backup

[data]

path = /data

3.3 创建对应用户,配置相关权限

你可能感兴趣的:(Day 36 NFS服务及实时同步备份)