⼀、备份
1.什么是备份?
备份就是把重要的数据或文件再次复制⼀份保存起来(给源⽂件增加⼀个副本)
2.为什么要备份?
数据很重要!!!
出现故障之后,需要恢复数据(软件服务出现问题⼏率很⼩,80%都是⼈为故障)
保证数据不丢失,便于快速恢复
3.能不能不做备份?
对于不重要的数据,我们可以不做备份
对于不必要的数据可以选择定时清理
4.备份常用工具?
本地复制 cp
远程传输 scp rsync
⼆、rsync服务概念
1.rsync简介
rsync英⽂称为remote synchronizetion
rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似于ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,⽽rsync可以增量拷⻉。
默认情况下,仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限、属主等属性的变化同步,但是需要制定相应的参数,甚至可以实现只同步⼀个文件里有变化的内容部分,所以,可是实现快速的同步备份数据。
- rsync简称远程同步,可以实现不同主机之间的同步. 同时⽀持增量和全量的备份.
- 不同主机:
- windows --> linux
- linux --> linux
- mac --> linux
- mac --> windows
- rsync监听的端口:873
- rsync运⾏模式:C/S模式 client/server
Rsync实战
1.安装 rsync 以下操作在root用户下进行
yum install rsync
2.执行数据同步:一旦安装了 rsync,您可以使用类似以下的命令进行数据同步:
基本格式: rsync [选项] 原始位置 目标位置
rsync -avz /path/to/source user@remote_server:/path/to/destination
其中,/path/to/source 是源文件或目录的路径,user 是远程服务器上的用户名,remote_server 是远程服务器的地址,/path/to/destination 是目标文件或目录的路径。请替换这些参数为实际的路径和信息。
常用参数
-a
:表示以递归模式进行同步,保持文件属性、权限等信息。-v
:表示以详细模式进行同步,显示执行过程中的详细信息。-z
:表示压缩传输数据,有助于减少数据传输量。-P
: 保留那些因故没有完全传输的文件,以是加快随后的再次传输。--delete
: 用于删除目标中没有源中的文件--exclude
: 用于排除特定文件或目录等。
3.验证同步结果:在同步完成后,您可以登录到远程服务器检查目标文件或目录是否成功同步过去。
请确保您具有适当的权限来访问源和目标路径,以及足够的权限来执行 rsync 命令。同时也要确保防火墙设置不会阻止 rsync 的网络连接。
备份格式:
格式一:
用户名@主机地址::共享模块名
格式二:
rsync://用户名@主机地址/共享模块名
# 注意结尾加"/"表示目录中的内容同步,不加"/"表示同步这个目录本身。
# 在本地同步目录中的文件
rsync -avz /test /test1
rsync -avz /test/ /test1
# 将本地文件同步到远程服务器
rsync -avz --delete /root/test1/ root@192.168.8.31:/root/test1
# 将远程服务器文件同步到本地
rsync -avz --delete root@192.168.8.31:/root/test1/ /root/test3
配置 Rsync 服务器
# 准本两台机器
master 192.168.8.50
slave 192.168.8.60
# 修改master(192.168.8.50)的配置文件
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#关闭防火墙及安装机制
yum install -y httpd rsync
#rsync系统一般已默认安装,安装httpd是为了生成/var/www/html目录(后续会用到作为共享目录)
mkdir -p /var/www/html #创建共享文件目录
chmod +r /var/www/html #给共享目录加上读的权限
# 编辑rsync配置文件
vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = yes
address = 192.168.8.50
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.8.0/24
[myhtml]
path = /var/www/html
comment = this is rsync
read only = yes
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users = tom
secrets file = /etc/rsyncd_users.db
# 配置详解
************************************************************************************
uid = root #用户id
gid = root #组id
use chroot = yes #开启,禁锢在源目录
address = 192.168.8.50 #监听地址,服务端IP地址
port 873 #默认端口号为873
log file = /var/log/rsyncd.log #日志文件存放位置
pid file = /var/run/rsyncd.pid #存放进程id的文件位置
hosts allow = 192.168.8.0/24 #允许访问的主机网段
[myhtml] #共享模块的名称
path = /var/www/html #源目录路径
comment = "this is myhtml" #配置说明信息
read only = yes #是否为只读
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不再压缩的文件类型
auth users = tom #授权用户,多个账户以空格隔开
secrets file = /etc/rsyncd_users.db #存放账号信息的数据文件,一行一个
# 主服务器创建用户账号和密码
vim /etc/rsyncd_users.db
tom:123123
#编辑用户账号文件,固定格式为[名称:密码],一行一个
#官方要求,最好只是赋权600!
chmod 600 /etc/rsyncd_users.db
# 主服务器开启服务
rsync --daemon
# 或者systemctl开启服务
systemctl restart rsyncd
#检测端口号,确认服务是否成功开启
netstat -natp | grep rsync
cd /var/www/html
#切换至共享目录下
echo "zuolaoshi 666" > index.html
#给共享文件夹下创建一个index.html文件输入内容
- 客户端查看内容
mkdir -p /opt/abc
rsync -avz tom@192.168.8.50::myhtml /opt/abc #用rsync登录
echo "123123"> /etc/server.pass #输入密码实现免交互
chmod 600 /etc/server.pass #给密钥文件赋权600
rsync -avz --delete --password-file=/etc/server.pass tom@192.168.8.50::myhtml /opt/abc/
# rsync,使用密钥文件/etc/server.pass对应tom用户,IP地址为192.168.8.50的共享模块文件进行压缩
# 并归档同步至当前服务器的/opt/abc目录下,同时删除差异内容,保持一致性
使用rsync+inotify实现触发式实时文件同步
实时同步能够在文件发生变化时立即进行同步,可以最大程度地减少数据丢失的风险,确保数据的及时性和准确性。相比之下,定时同步需要等待定时任务触发,可能会导致数据延迟,实时同步只在文件发生变化时进行同步操作,避免了定时同步可能存在的频繁无效同步,节省了系统资源和网络带宽。接下来具体介绍rsync+inotify模式如何实现触发式实时同步。 安装inotify工具 在服务端安装inotify工具:
yum install -y inotify-tools
如果提示No package inotify-tools available,更新源后再尝试下载
yum install -y epel-release && yum -y update
inotify是一个Linux内核提供的机制,用于监视文件系统事件。它可以通过命令行工具inotifywait和inotifywatch来使用。inotifywait更侧重于等待文件系统事件的发生并执行操作,而inotifywatch更侧重于监视文件系统事件并显示统计信息,本文使用inotifywait来实现文件同步 inotifywait常见选项:
-r 或 --recursive:递归监视目录及其子目录。
-e 或 --event :指定要监视的事件类型,多个事件类型可以用逗号分隔。常见的事件类型包括modify(文件内容修改)、create(文件创建)、delete(文件删除)、move(文件移动)等。
-m 或 --monitor:持续监视目录,不退出。
-q 或 --quiet:静默模式,不输出监视事件信息。
-t 或 --timeout :设置超时时间,超过指定时间没有事件发生则退出。
接下来,我们将配置rsync和inotify来实现实时文件同步:
1.生成SSH密钥对并上传公钥 在服务端生成SSH密钥对,并将公钥上传到客户端,以便实现无密码的SSH连接。
2.创建同步脚本 在服务端创建一个名为sync.sh的脚本文件,并添加以下内容:
#!/bin/bash
while inotifywait -r -e modify,create,delete,move /data/;do
rsync -avz /data/ root@192.168.8.11:/opt/data/
done
3.授予脚本执行权限并执行
chmod +x sync.sh
./sync.sh ##脚本会一直运行,并在`/data/`目录中的文件发生变化时进行实时同步
4.测试同步
在服务端/data目录下新建名为12345的文件,服务端提示/data创建了12345文件,并开始发送增量文件。 切换到客户端可以看到/data/目录下所有文件已实时同步到客户端/opt/data