翼度科技»论坛 云主机 LINUX 查看内容

文件共享服务之实时备份(inotify+rsync)

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
任务需求

1.对NFS服务器上的静态资源实时备份(inotify+rsync)
主机列表
  1. # 外网地址                内网地址          主机名
  2. 192.168.122.207   172.16.1.207  web-test-209
  3. 192.168.122.231  172.16.1.231  nfs-test-231
  4. 192.168.122.241  172.16.1.241  rsync-test-241
复制代码
架构图



开始实操

1.在rsync-test-241服务器上搭建rsync

1.1.安装rsync
  1. [root@rsync-test-241 ~]# yum install rsync -y
复制代码
1.2.修改配置文件/etc/rsyncd.conf
  1. [root@rsync-test-241 ~]# vim /etc/rsyncd.conf
  2. [root@rsync-test-241 ~]# cat /etc/rsyncd.conf
  3. uid = rsync
  4. gid = rsync
  5. fake super = yes
  6. use chroot = no
  7. max connections = 200
  8. pid file = /var/run/rsyncd.pid
  9. lock file = /var/run/rsync.lock
  10. log file = /var/log/rsyncd.log
  11. ignore errors
  12. read only = false
  13. list = false
  14. hosts allow = 172.16.1.0/24
  15. hosts deny = 0.0.0.0/32
  16. auth users = rsync_backup
  17. secrets file = /etc/rsync.password
  18. [backup-nfs]
  19. comment = This is nfs backup!
  20. path = /backup/
复制代码
配置文件解读
配置参数参数说明uid = rsync指定rsync服务运行的时候,向磁盘进行读取和写入操作的操作者gid = rsync指定rsync服务运行的时候,向磁盘进行读取和写入操作的操作者use chroot = no进行数据同步存储时,安全相关参数,默认内网进行数据同步,可以关闭max connections = 200定义向备份服务器进行数据存储的并发连接数timeout = 300定义与备份服务器建立的网络连接,在多长时间没有数据传输时,就释放连接pid file = /var/run/rsyncd.pid服务程序运行时,会将进程的pid信息存储到一个指定的pid文件中lock file = /var/run/rsync.lock定义锁文件,主要用于配合max connections 参数,当达到最大连接就禁止继续访问log file = /var/log/rsyncd.log定义服务的日志文件保存路径信息[backup]指定备份目录的模块名称信息path = /backup指定数据进行备份的目录信息ignore errors在进行数据备份传输过程过程中,忽略一些I/O产生的传输错误read only = false设置对备份的目录的具有读写权限,即将只读模式进行关闭list = false确认是否可以将服务配置的模块信息,在客户端可以查看显示hosts allow = 172.16.1.0/24设置备份目录允许进行网络数据备份的主机地址或网段信息,即设置白名单hosts deny = 0.0.0.0/32设置备份目录禁止进行网络数据备份的主机地址或网段信息,即设置黑名单auth users = rsync_backup指定访问备份数据目录的认证用户信息,为虚拟定义的用户,不需要进行创建secrets file = /etc/rsync.password设置访问备份数据目录进行认证用户的密码文件信息,会在文件中设置认证用户密码信息[backup]指定模块名称,便于日后维护path=/backup在当前模块中,Daemon使用的文件系统或目录,注意目录权限和配置文件权限一直,防止读写出问题#exclude=排除文件或目录,相对路径[ftp]还可以添加其他模块1.3.根据配置文件里定义的信息,创建用户,文件等

创建用户
  1. [root@rsync-test-241 ~]# useradd rsync -s /sbin/nologin -M
  2. [root@rsync-test-241 ~]# id rsync
  3. uid=1000(rsync) gid=1000(rsync) 组=1000(rsync)
复制代码
创建目录,修改属性
  1. [root@rsync-test-241 ~]# mkdir /backup
  2. [root@rsync-test-241 ~]# chown -R rsync.rsync /backup/
  3. [root@rsync-test-241 ~]# ls -ld /backup/
  4. drwxr-xr-x 2 rsync rsync 6 11月 15 16:19 /backup/
复制代码
创建认证文件,授权
  1. [root@rsync-test-241 ~]# echo "rsync_backup:mima666" > /etc/rsync.password
  2. [root@rsync-test-241 ~]# cat /etc/rsync.password
  3. rsync_backup:mima666
  4. [root@rsync-test-241 ~]# chmod 600 /etc/rsync.password
  5. [root@rsync-test-241 ~]# ll /etc/rsync.password
  6. -rw------- 1 root root 21 11月 15 16:22 /etc/rsync.password
复制代码
1.4.启动rsync服务,开机自启
  1. [root@rsync-test-241 ~]# systemctl start rsyncd
  2. [root@rsync-test-241 ~]# systemctl enable rsyncd
  3. Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
复制代码
1.5.检查rsync
  1. [root@rsync-test-241 ~]# systemctl status rsyncd
  2. ● rsyncd.service - fast remote file copy program daemon
  3.    Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled)
  4.    Active: active (running) since 五 2024-11-15 16:24:12 CST; 41s ago
  5. Main PID: 2411 (rsync)
  6.    CGroup: /system.slice/rsyncd.service
  7.            └─2411 /usr/bin/rsync --daemon --no-detach
  8. 11月 15 16:24:12 rsync-test-241 systemd[1]: Started fast remote file copy program daemon.
  9. [root@rsync-test-241 ~]#
  10. [root@rsync-test-241 ~]# ps -ef|grep rsync
  11. root      2411     1  0 16:24 ?        00:00:00 /usr/bin/rsync --daemon --no-detach
  12. root      2450  1928  0 16:26 pts/1    00:00:00 grep --color=auto rsync
  13. [root@rsync-test-241 ~]# netstat -tnlp | grep rsync
  14. tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      2411/rsync         
  15. tcp6       0      0 :::873                  :::*                    LISTEN      2411/rsync         
  16. [root@rsync-test-241 ~]#
复制代码
2.在nfs-test-231服务器上运行rsync

2.1安装rsync
  1. [root@nfs-test-231 ~]# yum install rsync -y
复制代码
2.2.创建密码文件,只写密码即可
  1. [root@nfs-test-231 ~]# echo 'mima666' > /etc/rsync.password
  2. [root@nfs-test-231 ~]# cat /etc/rsync.password
  3. mima666
复制代码
2.3.必须要给密码文件授权,去掉other的权限,否则rsync会报错
  1. [root@nfs-test-231 ~]# chmod 600 /etc/rsync.password
  2. [root@nfs-test-231 ~]# ll /etc/rsync.password
  3. -rw------- 1 root root 8 11月 15 16:34 /etc/rsync.password
复制代码
2.4.测试rsync数据同步是否正确

client > server 、数据推送
  1. [root@nfs-test-231 ~]# rsync -avzP network_init.sh rsync_backup@172.16.1.241::backup-nfs --password-file=/etc/rsync.password
  2. sending incremental file list
  3. network_init.sh
  4.             496 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)
  5. sent 381 bytes  received 35 bytes  277.33 bytes/sec
  6. total size is 496  speedup is 1.19
复制代码
  1. -avzP
  2. -a  保持文件原有属性
  3. -v    显示传输细节情况
  4. -z    对传输数据压缩传输
  5. -P    显示文件传输的进度信息
复制代码
  1. 也可以直接使用密码变量,进行同步
  2. tail -1 /etc/bashrc
  3. export RSYNC_PASSWORD=chaoge
复制代码
验证rsync服务端接收到了文件
  1. [root@rsync-test-241 ~]# cd /backup/
  2. [root@rsync-test-241 backup]# ls
  3. network_init.sh
  4. [root@rsync-test-241 backup]#
复制代码
3.在nfs-test-231服务器上部署inotify

3.1.安装inotify-tools
  1. [root@nfs-test-231 ~]# yum install inotify-tools -y
复制代码
3.2.编写脚本,完成数据同步

检测共享文件夹,只要有了数据变化,立即触发rsync备份
[root@nfs-test-231 ~]# vim rsync_nginx.sh
[root@nfs-test-231 ~]# cat rsync_nginx.sh
  1. #!/bin/bash
  2. /usr/bin/inotifywait -mrq -e modify,delete,create,attrib,move  /nfs-web-share/  | while read line
  3. do
  4.     rsync -a --delete  /nfs-web-share/  rsync_backup@172.16.1.241::backup-nfs --password-file=/etc/rsync.password
  5.     echo "`date +%F\ %T`出现事件$line" >> /var/log/rsync.log 2>&1
  6. done
  7. [root@nfs-test-231 ~]#
复制代码
3.3.执行脚本,放入后台运行
  1. [root@nfs-test-231 ~]# bash rsync_nginx.sh &
  2. [1] 13040
  3. [root@nfs-test-231 ~]# jobs
  4. [1]+  运行中               bash rsync_nginx.sh &
  5. [root@nfs-test-231 ~]#
复制代码
4.验证同步情况

4.1.在web-test-207服务器上更新文件
  1. [root@web-test-207 ~]# cd /usr/share/nginx/html/
  2. [root@web-test-207 html]# vim index.html
  3. [root@web-test-207 html]# cat index.html
  4. <meta charset=utf8> 这是一个网页
  5. hello world
  6. <h1>其实我来自nfs服务端</h1>
  7. <h2>哈哈哈,你好inotify</h2>
  8. [root@web-test-207 html]#
复制代码
4.2.在nfs-test-231上查看同步日志
  1. [root@nfs-test-231 ~]# tail -f /var/log/rsync.log
  2. 2024-11-15 17:28:11出现事件/nfs-web-share/ MODIFY index.html
  3. 2024-11-15 17:28:11出现事件/nfs-web-share/ MODIFY index.html
  4. 2024-11-15 17:28:12出现事件/nfs-web-share/ ATTRIB index.html
复制代码
4.3.在rsync-test-241上查看是否同步
  1. [root@rsync-test-241 backup]# pwd
  2. /backup
  3. [root@rsync-test-241 backup]# ll
  4. 总用量 4
  5. -rw-r--r-- 1 rsync rsync 123 11月 15 17:28 index.html
  6. [root@rsync-test-241 backup]# cat index.html
  7. <meta charset=utf8> 这是一个网页
  8. hello world
  9. <h1>其实我来自nfs服务端</h1>
  10. <h2>哈哈哈,你好inotify</h2>
  11. [root@rsync-test-241 backup]#
复制代码
  1. 如果过程里出现了失败,大部分原因是
  2. 1.防火墙未关
  3. 2.nfs配置权限不对
  4. 3.网络不通
  5. 其它情况看报错信息排查
复制代码
来源:https://www.cnblogs.com/funlyp/p/18548553
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具