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

news/2024/12/25 13:13:14/文章来源:https://www.cnblogs.com/funlyp/p/18548553

任务需求

1.对NFS服务器上的静态资源实时备份(inotify+rsync)

主机列表

# 外网地址                内网地址          主机名
192.168.122.207   172.16.1.207  web-test-209
192.168.122.231  172.16.1.231  nfs-test-231
192.168.122.241  172.16.1.241  rsync-test-241

架构图


开始实操


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

1.1.安装rsync

[root@rsync-test-241 ~]# yum install rsync -y

1.2.修改配置文件/etc/rsyncd.conf

[root@rsync-test-241 ~]# vim /etc/rsyncd.conf 
[root@rsync-test-241 ~]# cat /etc/rsyncd.conf 
uid = rsync
gid = rsync
fake super = yes
use chroot = no
max connections = 200
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
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-nfs]
comment = This is nfs backup!
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.根据配置文件里定义的信息,创建用户,文件等

创建用户

[root@rsync-test-241 ~]# useradd rsync -s /sbin/nologin -M
[root@rsync-test-241 ~]# id rsync
uid=1000(rsync) gid=1000(rsync) 组=1000(rsync)

创建目录,修改属性

[root@rsync-test-241 ~]# mkdir /backup
[root@rsync-test-241 ~]# chown -R rsync.rsync /backup/
[root@rsync-test-241 ~]# ls -ld /backup/
drwxr-xr-x 2 rsync rsync 6 11月 15 16:19 /backup/

创建认证文件,授权

[root@rsync-test-241 ~]# echo "rsync_backup:mima666" > /etc/rsync.password
[root@rsync-test-241 ~]# cat /etc/rsync.password 
rsync_backup:mima666
[root@rsync-test-241 ~]# chmod 600 /etc/rsync.password
[root@rsync-test-241 ~]# ll /etc/rsync.password 
-rw------- 1 root root 21 11月 15 16:22 /etc/rsync.password

1.4.启动rsync服务,开机自启

[root@rsync-test-241 ~]# systemctl start rsyncd
[root@rsync-test-241 ~]# systemctl enable rsyncd
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.

1.5.检查rsync

[root@rsync-test-241 ~]# systemctl status rsyncd
● rsyncd.service - fast remote file copy program daemonLoaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled)Active: active (running) since 五 2024-11-15 16:24:12 CST; 41s agoMain PID: 2411 (rsync)CGroup: /system.slice/rsyncd.service└─2411 /usr/bin/rsync --daemon --no-detach11月 15 16:24:12 rsync-test-241 systemd[1]: Started fast remote file copy program daemon.
[root@rsync-test-241 ~]# 
[root@rsync-test-241 ~]# ps -ef|grep rsync
root      2411     1  0 16:24 ?        00:00:00 /usr/bin/rsync --daemon --no-detach
root      2450  1928  0 16:26 pts/1    00:00:00 grep --color=auto rsync
[root@rsync-test-241 ~]# netstat -tnlp | grep rsync
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      2411/rsync          
tcp6       0      0 :::873                  :::*                    LISTEN      2411/rsync          
[root@rsync-test-241 ~]# 

2.在nfs-test-231服务器上运行rsync

2.1安装rsync

[root@nfs-test-231 ~]# yum install rsync -y

2.2.创建密码文件,只写密码即可

[root@nfs-test-231 ~]# echo 'mima666' > /etc/rsync.password
[root@nfs-test-231 ~]# cat /etc/rsync.password 
mima666

2.3.必须要给密码文件授权,去掉other的权限,否则rsync会报错

[root@nfs-test-231 ~]# chmod 600 /etc/rsync.password 
[root@nfs-test-231 ~]# ll /etc/rsync.password 
-rw------- 1 root root 8 11月 15 16:34 /etc/rsync.password

2.4.测试rsync数据同步是否正确

client > server 、数据推送

[root@nfs-test-231 ~]# rsync -avzP network_init.sh rsync_backup@172.16.1.241::backup-nfs --password-file=/etc/rsync.password 
sending incremental file list
network_init.sh496 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)sent 381 bytes  received 35 bytes  277.33 bytes/sec
total size is 496  speedup is 1.19
-avzP 
-a  保持文件原有属性
-v    显示传输细节情况
-z    对传输数据压缩传输
-P    显示文件传输的进度信息
也可以直接使用密码变量,进行同步tail -1 /etc/bashrc
export RSYNC_PASSWORD=chaoge

验证rsync服务端接收到了文件

[root@rsync-test-241 ~]# cd /backup/
[root@rsync-test-241 backup]# ls
network_init.sh
[root@rsync-test-241 backup]# 

3.在nfs-test-231服务器上部署inotify

3.1.安装inotify-tools

[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

#!/bin/bash
/usr/bin/inotifywait -mrq -e modify,delete,create,attrib,move  /nfs-web-share/  | while read line
dorsync -a --delete  /nfs-web-share/  rsync_backup@172.16.1.241::backup-nfs --password-file=/etc/rsync.password echo "`date +%F\ %T`出现事件$line" >> /var/log/rsync.log 2>&1
done
[root@nfs-test-231 ~]# 

3.3.执行脚本,放入后台运行

[root@nfs-test-231 ~]# bash rsync_nginx.sh &
[1] 13040
[root@nfs-test-231 ~]# jobs
[1]+  运行中               bash rsync_nginx.sh &
[root@nfs-test-231 ~]# 

4.验证同步情况

4.1.在web-test-207服务器上更新文件

[root@web-test-207 ~]# cd /usr/share/nginx/html/
[root@web-test-207 html]# vim index.html 
[root@web-test-207 html]# cat index.html 
<meta charset=utf8> 这是一个网页
hello world
<h1>其实我来自nfs服务端</h1>
<h2>哈哈哈,你好inotify</h2>
[root@web-test-207 html]# 

4.2.在nfs-test-231上查看同步日志

[root@nfs-test-231 ~]# tail -f /var/log/rsync.log
2024-11-15 17:28:11出现事件/nfs-web-share/ MODIFY index.html
2024-11-15 17:28:11出现事件/nfs-web-share/ MODIFY index.html
2024-11-15 17:28:12出现事件/nfs-web-share/ ATTRIB index.html

4.3.在rsync-test-241上查看是否同步

[root@rsync-test-241 backup]# pwd
/backup
[root@rsync-test-241 backup]# ll
总用量 4
-rw-r--r-- 1 rsync rsync 123 11月 15 17:28 index.html
[root@rsync-test-241 backup]# cat index.html 
<meta charset=utf8> 这是一个网页
hello world
<h1>其实我来自nfs服务端</h1>
<h2>哈哈哈,你好inotify</h2>
[root@rsync-test-241 backup]# 
如果过程里出现了失败,大部分原因是
1.防火墙未关
2.nfs配置权限不对
3.网络不通
其它情况看报错信息排查

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/834207.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

专题四:信息安全

信息系统安全属性 机密性:确保信息不暴露给未授权的实体或进程。 完整性:只有得到允许的人才能修改数据,并且能够判断出数据是否已被篡改。 可用性:得到授权的实体在需要时可访问数据,即攻击者不能占用所有的资源而阻碍授权者的工作。 可控性:可以控制授权范围内的信息流…

生产环境中AI调用的优化:AI网关高价值应用实践

随着越来越多的组织将生成式AI引入生产环境,他们面临的挑战已经超出了初步实施的范畴。如果管理不当,扩展性限制、安全漏洞和性能瓶颈可能会阻碍AI应用的推广。实际问题如用户数据的安全性、固定容量限制、成本管理和延迟优化等,需要创新的解决方案。 本文我们深入探讨了一些…

MobileViT-v1-所有patch内相对位置相同的token之间计算自注意力

paper def my_self(x: torch.Tensor):通过这段代码 可以把每张图片图片中相对位置相同的若干个tokens放到最后两个维度# [B, C, H, W] -> [B, C, n_h, p_h, n_w, p_w] # n_h是高度方向上可以分多少个patch p_h patch的高度 n_w 宽度方向上可以分多少个patch p_w patch的宽…

27. 使用MySQL之全球化和本地化

1. 字符集和校对顺序 数据库表被用来存储和检索数据。不同的语言和字符集需要以不同的方式存储和检索。因此,MySQL需要适应不同的字符集(不同的字母和字符),适应不同的排序和检索数据的方法。 在讨论多种语言和字符集时,将会遇到以下重要术语:字符集为字母和符号的集合;…

TCP/IP上三层协议

TCP/IP上三层的角色 同一台设备上的进程间通信有多种方式,如管道、消息队列、共享内存、信号等。而不同设备间的进程通信需要网络通信,由于设备具有多样性,因此协商出了一套通用的网络协议。这个网络协议是分层的,每一层都有各自的作用和职责,接下来将依据 “TCP/IP 网络模…

无线部分

AC堆叠(VAC) 配置两台AC设备,使用虚拟化方案组合成1台虚拟AC。 AC1和AC2之间的G 0/3-4端口作为虚拟交换链路。配置AC1为主,AC2为备。主设备 description为AC1,备用设备description为AC2。 AC1 virtual-ac domain 100device 1 device 1 priority 200 device 1 description …

DHCP欺骗

DHCP 欺骗原理DHCP 协议(Dynamic Host Configuration Protocol) 动态主机配置协议:主要给客户机提供 TCP/IP 参数,包括:IP 地址、子网掩码、网关、DNS、租期工作原理应用层协议,基于UDP 主机向服务器 67 号端口发送 DHCP 请求 服务器响应给客户机的 68号端口配置设置DHCP 服…

Redis运行的时候碰到# Creating Server TCP listening socket *:6379: bind: No error

Redis运行的时候碰到# Creating Server TCP listening socket *:6379: bind: No error 解决方案: 1、启动redis客户端:redis-cli.exe。 2、执行关闭命令:输入shutdown3、执行退出命令:exit4、重新启动Redis输入:redis-server.exe redis.windows.conf

https实验

https 实验原理httphttps https = http + SSL/TLS •SSL: Secure Socket Layer 安全套接层 •TLS: Transport Layer Security 传输层安全协议加密方式:PKI(公钥基础设施)使用公钥技术和数字签名来保证信息安全由公钥密码算法、数字证书(Certificate)、CA(Certificate Aut…

手把手教你搭建OpenScenario交通场景(上)

经纬恒润动力学仿真软件ModelBase基于OpenScenario1.0标准,开发内嵌了场景编辑器,可用于对仿真测试过程中的车辆行驶道路模型之外,继续进行周边动态场景的搭建。 OpenScenario是一种专为自动驾驶系统仿真测试设计的场景描述语言,它基于XML格式,旨在提供一个标准化、…

动态规划题单2

第一个题单编辑到后面实在是太卡了,就新开了一个,以后应该也会 \(30\) 题为一个题单。 31.CF1580D Subsequence CF1580D Subsequence 不会笛卡尔树,但是看到题解区的妙妙解法...... 题目的式子非常大便,我们考虑把它翻译成人话: 一个子序列的价值为: \(sum*m - 每两个数及他…

java 反序列化 cc7 复现

java 反序列化 cc7 复现复现环境:common-collections版本<=3.2.1,java版本随意.cc7就是cc6换了一个出口,整体的逻辑没有太大的变化.在Lazymap之前的还那样,我们从如何触发Lazymap的get方法开始看起. AbstractMap 看他的equals方法 public boolean equals(Object o) { if (o…