1、备份服务概述
备份服务:需要使用到脚本,打包备份,定时任务
备份服务:rsyncd 服务,不同主机之间数据传输
特点:
- rsync是个服务也是命令
- 使用方便,具有多种模式
- 传输数据的时候是增量传输
增量与全量:
全量:无论多少数据全部推送走(scp -r)
增量:只会把 修改,新建 的文件传输走(rsync -avz)
#把/etc/目录传输到另一台机器的/tmp/下面 scp -r /shishuwu/ root@111.229.205.81:/tmp/ rsync -avz /shishuwu/ root@111.229.205.81:/tmp/
2、rsync企业应用场景
应用场景(业务场景)
| 应用场景(业务场景) | 应用建议 |
|---|---|
| rsync 作为命令使用 | 临时拉取,推送数据.未来这个需求可以通过scp命令实现. |
| 定时备份:rsync 服务 + 定时任务 | 定时备份,定期备份案例.(定时任务进行备份+通过rsync传输备份) |
| 实时同步:rsync 服务 + sersync/lsyncd 实现实时同步 | 解决存储服务单点问题 |
| rsync服务与异地容灾 | 找一个异地的服务器存放备份 |
3、rsync使用模式
| 模式 | 应用场景 |
|---|---|
| 本地模式 | |
| 远程模式 | 传输数据(临时使用可以使用scp替代) |
| rsync 守护进程模式(daemon) | 传输数据(不需要密码),用于定时备份,定时同步. |
4、推与拉
5、rsync本地模式
rsync -a /etc/ /tmp/
rsync -a /etc /tmp/
在rsync对于目录 /etc/ /etc 是有区别的
- /etc /etc目录+目录的内容
- /etc/ /etc/目录下面的内容
6、rsync远程模式
| 格式 | ||
|---|---|---|
| rsync -a | 源文件 | 目标 |
| 推送:rsync | /etc/hostname | root@10.0.0.31:/etc/hosts |
| 拉取:rsync | root@10.0.0.31:/tmp | /opt/ |
7、rsync守护进程模式
| 服务使用流程 |
|---|
| 部署 |
| 配置 |
| 启动,使用 |
| 优化 |
| 故障 |
| 自动化(监控,日志,安全,自动部署,容器) |
7.1 检查是否安装
#检查安装 更新
yum install -y rsync
#查看安装包名称
rpm -qa rsync
#检查服务目录
rpm -ql rsync
/etc/rsyncd.conf #命令配置文件,服务端配置文件,守护进程文件
/usr/bin/rsync #命令
/usr/lib/systemd/system/rsyncd.service #systemctl对应的配置文件
7.2 进程配置
a)配置详情
b)进行配置
[root@backup /oldboy]# cat /etc/rsyncd.conf
#created by shishuwu 2024.2.17
##rsyncd.conf start ##
fake super =yes
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
timeout = 600
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 = 10.0.0.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#####################################
[data]
comment = www by old0boy 14:18 2012-1-13
path = /data
c)后续配置
#1、添加虚拟用户,用于进程
[root@nanjing ~]# useradd -s /sbin/nologin -M rsync
[root@nanjing ~]# id rsync
uid=1316(rsync) gid=1316(rsync) 组=1316(rsync)
#2、创建密码文件,并且修改600权限
[root@nanjing ~]# echo 'rsync_backup:1' > /etc/rsync.password
[root@nanjing ~]# cat /etc/rsync.password
rsync_backup:1
[root@nanjing ~]# ll /etc/rsync.password
-rw-r--r-- 1 root root 15 2月 17 11:09 /etc/rsync.password
[root@nanjing ~]# chmod 600 /etc/rsync.password
[root@nanjing ~]# ll /etc/rsync.password
-rw------- 1 root root 15 2月 17 11:09 /etc/rsync.password
#3、创建数据文件,修改目录所有者
[root@nanjing ~]# mkdir /data/
[root@nanjing data]# ll -d /data
drwxr-xr-x 2 root root 4096 11月 5 2019 /data
[root@nanjing data]# chown rsync.rsync /data
[root@nanjing data]# ll -d /data
drwxr-xr-x 2 rsync rsync 4096 11月 5 2019 /data
d)启动服务
systemctl start rsyncd
systemctl enable rsyncd
7.3 测试
1、本地测试
rsync -avz /etc/hostname rsync_backup@43.137.51.152::data
2、客户端测试
echo '1' > /etc/rsyncnanjing.passwd
chmod 600 /etc/rsyncnanjing.passwd
rsync -avz /etc/passwd rsync_backup@43.137.51.152::data --pasword-file=/etc/rsyncnanjing.passwd
3、查看日志
tail -f /var/log/rsyncd.log
7.4 小结
| 部署流程 | |
|---|---|
| 服务端 | 配置文件 |
| 添加虚拟用户 | |
| secret文件,密码文件,文件权限 | |
| 创建共享目录和修改权限 | |
| 启动或重启,开机自启动, | |
| 测试 | |
| 客户端 | 密码文件,权限 |
| 客户端命令测试 |
8、守护进程-补充
8.1 uid,gid 与auth user
#用户执行
rsync -avz /etc/passwd rsync_backup@43.137.51.152::data --password-file=/etc/rsyncnanjing.passwd
1、服务端收到数据:判断rsync_backup用户,然后等待输入密码
2、把用户名和密码与配置文件里面对比 auth user 和secrets file(600权限)
3、通过后,传输数据
4、数据到达服务器所有者被修改为uid和gid指定的(rsync)
5、数据写入data模块(用户和用户组为rsync)目录下面.
8.2 访问控制-安全措施
- hosts allow 只准许指定的ip或网段访问
- hosts deny 拒绝.
可以配置只允许内网(10.0.0.0/24)访问。
如果不是白名单网段访问,会在log查看rsync denied。
9、rsync选项
| rsync选项 | 含义 |
|---|---|
| -a | -r递归复制 -l复制软连接 -p保持权限不变 -m保持修改时间不 -o所有者不变 -g用户组不变 -D devices specials 设备与特殊文件 |
| -v | 显示过程 |
| -z | 传输数据到公网 |
| --bwlimit | 限速,不能与-z一起使用 |
| -p | 显示更全面的过程 |
| -delete | 保持高度同步(实时同步使用) |
| -exclude | 排除 |
限速并传输
rsync -aP --bwlimit=500kb /tmp/1g root@10.0.0.31:/mnt/
10、故障记录
| 提示 | 原因 |
|---|---|
| pawwsord mismatch | 密码错误 |
| no secrets file | 权限配置错误(600) |
| permission denied | 防火墙firewalld和selinux |
| no matching rule | 与hosts allow允许网段的白名单有关 |
11、全网备份项目
| 步骤说明 | 详情内容 |
|---|---|
| rsync服务端并调试 | 服务端配置 /backup/目录 |
| rsync客户端节点配置脚本(备份) | 备份 推送 清理 |
| 其他节点匹配值定时任务 | 定时运行脚本 |
| 在备份服务器上检查并发送结果邮件 | 清理备份 rsync服务端检查备份并发送邮件 |
1、rsync服务端配置
[root@backup ~]# rpm -ql rsync| head -3
/etc/rsyncd.conf
/etc/sysconfig/rsyncd
/usr/bin/rsync
[root@backup ~]# cat /etc/rsyncd.conf
#created by shishuwu 2024.2.17
##rsyncd.conf start ##
fake super =yes
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
timeout = 600
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 = 10.0.0.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#####################################
[data]
comment = www by old0boy 14:18 2012-1-13
path = /data
[backup]
comment = www by shishuwu 23:37 2024-2-17
path = /backup
#1、创建虚拟用户
useradd -s /sbin/nologin -M rsync
#2、创建并赋权密码文件
echo 'rsync_backup:1' > /etc/rsync.password
chmod 600 /etc/rsync.password
#3、创建并且修改所有者目标目录
mkdir -p /backup
chown rsync.rsync /backup
#4、启动服务
systemctl start rsyncd
systemctl enable rsyncd
#5、测试rsync进程
rsync -avz /etc/passwd rsync_backup@10.0.0.5::backup
2、客户端配置脚本&定时任务
#指定密码文件
echo "1" >/etc/client.rsync
chmod 600 /etc/client.rsync
#脚本信息
#!/bin/bash
#author:shishuwu
#desc:客户端脚本
source /etc/profile
#变量
ip=`hostname -I | awk '{print $1}'`
time=`date +%F_%w`
backup_dir=/backup/${ip}
backup_file=conf-${time}.tar.gz
#备份
mkdir -p ${backup_dir}
tar zcf ${backup_dir}/${backup_file} /etc/ /var/spool/cron/
#推送备份文件
rsync -avz /backup/ rsync_backup@10.0.0.5::backup --password-file=/etc/client.rsync
#rsync -avz ${backup_dir} rsync_backup@10.0.0.5::backup --password-file=/etc/client.rsync
#清理
find ${backup_dir} -type f -name '*.tar.gz' -mtime +7 | xargs rm -f
#定时任务
[root@nfs01 ~]# crontab -l
#备份任务
00 00 * * * sh /root/rsync.sh &>/dev/null
3、服务端脚本
#!/bin/bash
#author:shishuwu
#decs:服务端脚本
#变量
time=`date +%F_%w`
#1、清理旧的备份文件
find /backup -type f -name '*.tar.gz' -mtime +180 | xargs rm -f
#2、检查
find /backup/ -type f -name "*.tar.gz" |\
xargs ls -lhd |\
awk -F '[ /]+' 'BEGIN{print"ip地址","备份文件名称","大小"}{print $(NF-1),$NF,$5}'|column -t\
>/root/mail.txt
#3、发送邮件
mail -s "每日备份结果" 2116099522@qq.com < /root/mail.txt
4、额外:增加校验功能
检查多个文件md5
#给/etc/下面所有的文件创建MD5保存到指定文件中
find /etc/ -type f | xargs md5sum > etc.md5
#进行校验
md5sum -c etc.md5
#只显示md5异常的文件
md5sum -c --quiet etc.md5