文章目录
备份服务
1. 作用
- 数据备份的服务器
- 进行日志的统一保存
2. 查找备份下的特定内容
grep -r 'codefun' /backup/ # -r 递归查询
/backup/192.168.80.130_bak/codefun.txt:hello codefun
3. 什么是 rsync
- Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。
4. rsync 使用方法
-
本地备份数据
rsync /etc/hosts /tmp
-
远程备份数据
scp -rp /etc/hosts root@backup:/tmp # -r 递归复制传输数据 -p 保持文件属性信息不变 hosts 100% 373 0.4KB/s 00:00 rsync -rp 192.168.80.130_bak root@nfs01:/tmp # 没有斜线,直接备份目录,有斜线备份该目录下的所有内容
-
删除文件 —无差别同步数据
rsync -rp --delete /null/ backup:/backup/codefun # --delete 无差别同步数据,删除大文件时可快速删除
-
查看文件命令
rsync /etc/hosts -rw-r--r-- 373 2021/04/26 10:16:03 hosts # 远程查看目录下的内容 rsync root@backup:/etc/hosts root@backup's password: -rw-r--r-- 373 2021/04/26 10:16:03 hosts
4. rsync 命令帮助文档解读
1. 语法格式
SYNOPSIS
####本地备份数据:
Local: rsync [OPTION...] SRC... [DEST]
#src: 要备份的数据信息
#dest: 备份到什么路径中
####远程备份数据:
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
#[USER@] --- 以什么用户身份拉取数据(默认以当前用户)
#hosts --- 指定远程主机IP地址或者主机名称
#SRC --- 要拉取的数据信息
#dest --- 保存到本地的路径信息
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
#SRC --- 本地要进行远程传输备份的数据
#[USER@] --- 以什么用户身份推送数据(默认以当前用户)
#hosts --- 指定远程主机IP地址或者主机名称
#dest --- 保存到远程的路径信息
####守护进程方式备份数据 --- 一直运行的进程
#好处:
#01. 进行一些配置管理
#02. 进行安全策略管理
#03. 实现自动传输备份数据
Access via rsync daemon:
#客户端做拉的操作:恢复数据
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
#客户端做推的操作:备份数据
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
#SRC --- 本地要进行远程传输备份的数据
#[USER@] --- 以什么用户身份推送数据(默认以当前用户)
#HOST --- 指定远程主机IP地址或者主机名称
#::DEST --- 备份服务器的模块信息
--------------------- 命令示例 ------------------
rsync -avz nfs.txt rsync_backup@backup::backup
-------------------------------------------------
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
2. 参数详解
-v --verb # 显示详细的传输信息
-a --archive # 命令的归档参数,包含 rtopgDl
-r --recursive # 递归参数
-t --time # 保持文件的修改时间不变
-o --owner # 保持文件的属组信息不变
-g --group # 保持文件的属主的信息不变
#PS: 如何让 -og 参数生效:需要将uid和gid改成root,将 fake super 注释掉
-p --perms # 保持文件权限信息不变
-D # 保持设备文件的信息不变
-l --links # 保持链接文件属性不变
-L # 保持链接文件数据信息不变
-P # 显示文件传输的进度信息
--exclude=PATTERN # 排除指定数据不被传输
--exclude-from=file # 排除指定数据不被传输(批量排除)
--bwlimit=RATE # 显示传输速率
--delete # 无差异同步参数(慎用)
5. rsync 服务部署安装过程
-
Linux 系统安装部署服务流程
- 下载安装软件 — yum
- 编写配置文件
- 搭建服务环境 备份的目录/目录权限
- 启动服务程序 开机自动启动
- 测试服务功能
-
守护进程的部署
-
下载安装软件
rpm -qa | grep rsync || yum install -y rsync
-
编写配置文件
man rsyncd.ocnf # 查看官方文档 vim /etc/rsyncd.conf cat /etc/rsyncd.conf ##create by codefun at 2021 ###rsyncd.conf start### uid = rsync # 指定管理备份目录的用户 gid = rsync # 指定管理备份目录的用户组 port = 873 # 定义 rsync 备份服务的网络端口号 fake super = yes use chroot = no # 和安全相关的配置 max connetions = 200 # 最大的连接数 timeout = 300 # 超时时间(second) pid file = /var/run/rsyncd.pid # 记录进程号码信息 lock file = /var/run/rsync.lock # 锁文件 log file = /var/run/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] comment = "backup dir by codefun" path = /backup # 指定备份目录
-
-
搭建服务环境 备份的目录/目录权限
### 以下操作都是根据配置文件的要求来操作 # 创建rsync服务的虚拟用户 useradd rsync -M -s /sbin/nologin # 创建备份服务认证密码文件 echo "rsync_backup:oldboy123" >/etc/rsync.password chmod 600 /etc/rsync.password # 创建备份目录并修改属主属组信息 mkdir /backup chown rsync.rsync /backup/
-
启动服务程序 开机自动启动
# systemctl start rsyncd # systemctl status rsyncd Active: active (running) since Mon 2021-04- # systemctl enable rsyncd Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
-
测试服务功能
rsync -avz nfs.txt rsync_backup@backup::backup Password: sending incremental file list nfs.txt sent 106 bytes received 43 bytes 99.33 bytes/sec total size is 12 speedup is 0.08
-
守护进程客户端配置 — 添加定时任务
-
创建一个密码文件
echo "code" > /etc/rsync.password [root@nfs01 ~]# chmod 600 /etc/rsync.password
-
测试免交互命令
sync -avz /etc/hosts rsync_backup@backup::backup --password-file=/etc/rsync.password sending incremental file list hosts sent 229 bytes received 43 bytes 181.33 bytes/sec total size is 373 speedup is 1.37
-
6. 守护进程服务企业应用
1. 守护进程多模块功能
1. 编写配置文件
vim /etc/rsyncd.conf
---- 增加内容如下 ----
[devdata]
comment = "devdata dir by codefun"
path = /devdata
---- 精致的结尾 ----
mkdir /devdata && chown -R rsync:rsync /devdata
systemctl restart rsyncd
rsync -avz devdata/ rsync_backup@backup::devdata --password-file=/etc/rsync.password
sending incremental file list
./
devtest0.txt
devtest1.txt
devtest2.txt
sent 220 bytes received 84 bytes 608.00 bytes/sec
total size is 0 speedup is 0.00
2. 守护进程的排除功能实践
### 建立一个这样的目录 mkdir -p test/{1..3} touch test/{1..3}/{a..c}.txt ,然后仅不备份 2 目录下的 a.txt 和全部的 c 目录
rsync -avz test/ --exclude=2/a.txt --exclude=3/* rsync_backup@backup::backup --password-file=/etc/rsync.password
# 这里的目录路径为 test/ 下的相对路径
### 1 2 3 目录下的 a.txt 都不备份
cat /root/exclude.txt
1/a.txt
2/a.txt
3/a.txt
rsync -avz test/ --exclude-from=/root/exclude.txt rsync_backup@backup::backup --password-file=/etc/rsync.password
3. 守护进程来创建备份目录
rsync -avz test/ rsync_backup@backup::backup/nfs01/ --password-file=/etc/rsync.password
# 注意目录后面有斜线
7. 项目案例 — 备份项目
1. 项目需求
-
所有服务器的备份目录必须都为/backup
mkdir /backup
-
备份的文件按照时间名字保存
-
要打包的系统配置文件包括,但不限于
- 定时任务服务的配置文件(
/var/spool/cron/root
)(适 web 和 nfs 服务器) - 开机自启动的配置文件(
/etc/rc.local
)(适合 web 和 nfs 服务器) - 日常脚本的目录 (
/server/scripts
)。 - 防火墙iptables的配置文件(
/etc/sysconfig/iptables
) - 自己思考下还有什么需要备份呢
cd / # 目的是用相对路径,不报错 tar -zcvhf ./backup/web01/systemctl_rsync$(date +_%F_week%w).tar.gz ./etc/rc.local ./etc/sysconfig/iptables ./server/scripts/ ./var/spool/cron/root ./etc/rc.local ./etc/sysconfig/iptables/ ./server/scripts/ ./var/spool/cron/root ## -h 参数为打包链接文件的源文件
- 定时任务服务的配置文件(
-
Web服务器站点目录假定为(
/var/html/www
)cd / tar -zcvhf ./backup/web01/www$(date +_%F_week%w).tar.gz ./var/html/www
-
Web服务器A访问日志路径假定为(
/app/logs
)cd / tar -zcvhf ./backup/web01/www_log$(date +_%F_week%w).tar.gz ./app/logs
-
Web服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)
find /backup -type f -mtime +7 | xargs rm
-
备份服务器上,保留每周一的所有数据副本,其它要保留6个月的数据副本
# 首先将六个月前的找出,然后用名字匹配出不是周一的,最后将他们删除 find /backup/*.tar.gz --type f -mtime +180 ! -name '*week1' |xargs rm
-
部署好rsync守护进程服务
## 参照上文的守护进程的配置
-
备份服务器上要按照备份数据服务器的内网IP为目录保存备份
# 即远程传输时需要加上内网的IP的地址作为目录 rsync /backup/web01 rsync_backup@backup::backup/web01/ --password-file=/etc/rsync.passwd # 因为要写入定时服务
-
需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查
### 用 md5 算法确保数据的完整性 web01# md5sum /backup/web01/systemctl_rsync_2021-04-27_week2.tar.gz > /backup/web01/figer.txt backup# find /backup/ -type f -name "figer.txt" |xargs md5sum -c &> /tmp/result.txt
-
把备份的成功及失败结果信息发给系统管理员邮箱
-
打开 SMTP 服务
-
获取授权码
不能给你们
-
编写linux服务邮件相关配置文件
yum install -y mailx # 若没有 /etc/mail.rc 文件 vim /etc/mail.rc ------------------------------------------------ set from=邮件账号 smtp=smtp.163.com set smtp-auth-user=邮件账号 smtp-auth-password=授权码 smtp-auth=login ------------------------------------------------ set from=gx163_163gx@163.com smtp=smtp.163.com set smtp-auth-user=gx163_163gx@163.com smtp-auth-password=PBOQWACPMQPCYSZX smtp-auth=login
-
发送邮件测试
echo "邮件发送测试" ---内容 |mail -s "邮件测试" ---主题 3061552332@qq.com mail -s "备份结果" 3061552332@qq.com < /tmp/result.txt
-
2. 环境准备
IP | 主机名 | 节点 |
---|---|---|
192.168.80.130 | nfs01 | nfs + rsync |
192.168.80.131 | backup | rsync |
192.168.80.132 | web01 | nginx + rsync |
3. 编写全网备份脚本
-
客户端脚本:
-
服务端脚本:backup date
50 15 * * * /bin/sh /server/scripts/backup.sh