实时复制实践:
前提: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 创建对应用户,配置相关权限