备份服务rsync
1.备份服务目标
1.备份服务应用场景
2.两台机器之间传输数据的命令:scp,rsync
3.备份服务使用流程.服务端,客户端.
4.服务使用流程中的排错(总结至少5个故障与排查流程).
5.备份项目:所有服务器数据备份,在备份服务器检查,邮件发送结果.
2.备份服务概述
2.1 目标
目标:主要解决数据不丢,辅助实现高可用;
2.2 备份服务
备份服务:存放已有的备份,一般与定时任务,脚本搭配使用.
备份服务:rsyncd服务,不同主机之间数据传输.
备份服务器配置:硬盘空间大.
rsyncd特点:
1.rsync是个服务也是命令(客户端)
2.使用方便,具有多种模式.
3.传输数据的时候是增量传输,第1次传输还是全量.
2.3 增量与全量
全量: 无论多少数据全部推送走(scp).
增量: 只会把修改,新建的文件传输走(rsync).
# backup/10.0.0.67 备份服务器
# nfs01/10.0.0.68 存储服务器
[root@nfs01 ~]# mkdir /opt/test
[root@nfs01 ~]# mkdir /opt/test2
# scp远程传输
[root@backup ~]# scp /etc/hostname root@10.0.0.68:/opt/test
The authenticity of host '10.0.0.68 (10.0.0.68)' can't be established.
ECDSA key fingerprint is SHA256:axJqd8bfgjoW8H0pOHKDpzYBIeUXTbLp3fIcOiAoKEY.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.0.68' (ECDSA) to the list of known hosts.
Authorized users only. All activities may be monitored and reported.
root@10.0.0.68's password:
hostname 100% 7 3.6KB/s 00:00
[root@backup ~]#
[root@nfs01 ~]# ls /opt/test/
etc hostname
[root@backup ~]# scp -r /etc/ root@nfs01:/opt/test/
The authenticity of host 'nfs01 (172.16.1.68)' can't be established.
ECDSA key fingerprint is SHA256:axJqd8bfgjoW8H0pOHKDpzYBIeUXTbLp3fIcOiAoKEY.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'nfs01,172.16.1.68' (ECDSA) to the list of known hosts.
Authorized users only. All activities may be monitored and reported.
root@nfs01's password:
mtab 100% 0 0.0KB/s 00:00
fstab 100% 579 532.4KB/s 00:00
crypttab 100% 0 0.0KB/s 00:00
...
[root@nfs01 ~]# ls /opt/test/etc/
abrt csh.precmd grub.d ld.so.cache named polkit-1 sensors.d terminfo
adjtime dbus-1 gshadow ld.so.conf named.conf popt.d services tmpfiles.d
...
# 第二次传输同样内容时传输全量内容
[root@backup ~]# scp -r /etc/ root@nfs01:/opt/test/
The authenticity of host 'nfs01 (172.16.1.68)' can't be established.
ECDSA key fingerprint is SHA256:axJqd8bfgjoW8H0pOHKDpzYBIeUXTbLp3fIcOiAoKEY.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'nfs01,172.16.1.68' (ECDSA) to the list of known hosts.
Authorized users only. All activities may be monitored and reported.
root@nfs01's password:
mtab 100% 0 0.0KB/s 00:00
fstab 100% 579 532.4KB/s 00:00
crypttab
...
#rsync传输
[root@backup ~]# rsync -av /etc/ root@10.0.0.68:/opt/test2/
Authorized users only. All activities may be monitored and reported.
root@10.0.0.68 password:
sending incremental file list
./
.kyinfo
.productinfo
.pwd.lock
.updated
...
sent 23,151,028 bytes received 15,205 bytes 3,088,831.07 bytes/sec
total size is 23,085,163 speedup is 1.00
[root@backup ~]# touch /etc/1.txt
# 第二次传输同样内容时只传输1.txt
[root@backup ~]# rsync -av /etc/ root@10.0.0.68:/opt/test2/
Authorized users only. All activities may be monitored and reported.
root@10.0.0.68 password:
sending incremental file list
./
1.txt
sent 34,355 bytes received 328 bytes 6,306.00 bytes/sec
total size is 23,085,163 speedup is 665.60
[root@backup ~]#
[root@nfs01 ~]# ls /opt/test2
1.txt csh.login grub2.cfg latrace.d my.cnf.d pm sensors3.conf tcsd.conf
abrt csh.precmd grub.d ld.so.cache named polkit-1 sensors.d terminfo
adjtime dbus-1 gshadow ld.so.conf named.conf popt.d services tmpfiles.d
...
2.4 rsync命令中/etc与/etc/区别
Linux下面/etc与/etc/一般来说是没有区别的.但是在rsync命令中是有区别的
/etc 传输目录下面的内容,包含目录本身.
/etc/ 传输目录下面的内容,不包含目录本身.
3.Rsync企业应用场景
应用场景(业务场景) |
应用建议 |
rsync作为命令使用 |
临时拉取,推送数据.未来这个需求可以通过scp命令实现. |
定时备份:rsync服务+定时任务 |
定时备份,定期备份案例.(定时任务进行备份+通过rsync传输备份) |
实时同步:rsync服务+sersync/lsyncd实现实时同步 |
解决存储服务单点问题 (这个服务只有1个/1台,如果挂了影响严重) |
rsync服务与异地容灾 |
找一个异地的服务器存放备份 |
详解
# rsync命令模式
临时拉取,推送数据,多台服务器的内容备份到backup服务器中,此时和scp命令作用一样
# rsync服务+定时备份
1.backup服务器rsync服务端接收备份数据(来自nfs存储,web,db等)
2.backup服务器本地存放位置如/nfsbackup/ /webbackup/ /dbbackup/等
# rsync实时同步
1.sersync/nfs存储等文件是否变化
2.有变化发送数据到backup服务器
# 定时备份+rsync传输异地备份
backup服务器rsync服务端接收异地容灾数据(来自异地nfs存储,web,db)
4.推送与拉取
- 本质:
- 在于你当前在哪台节点(node)
- 你要的东西在哪里
rsync -a 源文件 目标
推送:rsync /etc/hostname root@10.0.0.68:/tmp
拉取:rsync root@nfs01:/etc/hosts /opt/
5.rsync使用模式
模式 |
应用场景 |
本地模式(了解) |
不推荐使用 |
远程模式 |
传输数据(临时使用可以使用scp替代) |
rsync守护进程模式(daemon) 也叫rsync服务端 rsyncd |
传输数据(不需要密码),用于定时备份,定时同步. |
远程模式与守护进程模式中:ip地址可以改为主机名或域名.
6.rsync不同的模式
服务器 | IP | DNS |
备份服务器 | 10.0.0.67 | backup |
存储服务器 | 10.0.0.68 | nfs01 |
6.1 rsync本地模式(了解)
rsync -a /etc/ /tmp/
rsync -a /etc /opt/
⚠ 在rsync对于目录 /etc/ /etc 是有区别的.
/etc /etc目录+目录的内容
/etc/ /etc/目录下面的内容
6.2 远程模式⭐⭐⭐⭐⭐
1对1进行远程传输数据
rsync -a |
源文件 | 目标 |
推送:rsync |
/etc/hostname | root@10.0.0.68:/tmp |
拉取:rsync |
root@nfs01:/etc/hosts | /opt/ |
远程模模式使用
#推送/etc/hostname 到10.0.0.68的/opt/test目录
[root@backup ~]# rsync -av /etc/hostname root@10.0.0.68:/opt/test/
#推送/etc 目录及目录内容 到68的 /opt/test下面
##推送第1次 全量
[root@backup ~]# rsync -av /etc/ root@10.0.0.68:/opt/test/
Authorized users only. All activities may be monitored and reported.
root@10.0.0.68 password:
sending incremental file list
./
.kyinfo
.productinfo
.pwd.lock
.updated
...
sent 23,151,028 bytes received 15,205 bytes 3,088,831.07 bytes/sec
total size is 23,085,163 speedup is 1.00
##推送第2次 发现没有推送
[root@backup ~]# rsync -av /etc/ root@10.0.0.68:/opt/test/
##创建文件再次推送
[root@backup ~]# touch /etc/1.txt
# 第二次传输同样内容时只传输1.txt
[root@backup ~]# rsync -av /etc/ root@10.0.0.68:/opt/test/
Authorized users only. All activities may be monitored and reported.
root@10.0.0.68 password:
sending incremental file list
./
1.txt
sent 34,355 bytes received 328 bytes 6,306.00 bytes/sec
total size is 23,085,163 speedup is 665.60
#通过scp推送 /etc 目录及目录内容 到31的 /opt下面 -r 递归传输
[root@backup ~] scp -r /etc/ root@10.0.0.68:/opt/
6.3 守护进程模式 ⭐⭐⭐⭐⭐
6.3.1 环境准备:(规划) rsyncd sshd daemon
角色 | 主机名 | ip |
rsync服务端 | backup | 10.0.0.67/172.16.1.67 |
rsync客户端 | nfs01 | 10.0.0.68/172.16.1.68 |
服务使用流程
1.部署
2.配置
3.启动、使用
4.优化
5.故障
6.自动化(备份,监控,日志,安全,自动部署,容器)
# rsync服务端
1.部署
2.修改配置rsync配置文件/etc/rsyncd.conf
3.准备环境(用户,目录,目录权限,服务端密码文件,共享目录)
4.启动与检查(端口,进程),测试(传输)
# rsync客户端
1.部署
2.测试(传输数据)
3.创建客户端密码文件并修改权限(仅存放密码)
4.书写脚本(进行备份+传输备份)+定时任务
6.3.2 rsync服务端(backup)操作
6.3.2.1 检查是否安装
[root@backup ~]# rpm -qa rsync
rsync-3.1.3-7.ky10.x86_64
[root@backup ~]#
[root@backup ~]# yum install -y rsync
上次元数据过期检查:2:56:14 前,执行于 2024年10月09日 星期三 14时55分54秒。
软件包 rsync-3.1.3-7.ky10.x86_64 已安装。 2/2
...
已升级:
rsync-3.1.3-9.ky10.x86_64
完毕!
[root@backup ~]# rpm -ql rsync
/etc/rsyncd.conf # 配置文件(服务端配置文件,守护进程模式)
/etc/sysconfig/rsyncd
/usr/bin/rsync # rsync命令
/usr/lib/systemd/system/rsyncd.service # systemctl控制rsyncd服务的配置文件
6.3.2.2 进行配置
配置详解
##rsyncd.conf start##
fake super =yes # 如果不开启,则C7传输报错(伪装成root权限)
uid = rsync # rsync运行 用户(虚拟)
gid = rsync
use chroot = no
max connections = 2000 # 最大连接数
timeout = 600 # 连接超市时间
pid file = /var/run/rsyncd.pid # 存放服务pid号
lock file = /var/run/rsync.lock # 进程、服务的锁文件,防止重复运行
log file = /var/log/rsyncd.log # rsync服务端日志
ignore errors # 忽略错误
read only = false # 可以进行读写
list = false # 关闭rsync服务端列表功能
#hosts allow = 10.0.0.0/24 # 白名单(哪些ip或网段可以访问)
#hosts deny = 0.0.0.0/32 # 黑名单 (哪些ip或网段拒绝访问)
auth users = rsync_backup # rsync服务端用户认证(用户名)
secrets file = /etc/rsync.password # rsync服务端验证密码(密码文件)
#####################################
[data] # 模块名字,用户客户端访问服务端时指定
comment = www by xk 14:18 2024-10-10 # 模块备注
path = /data # 模块对应的目录
#secrets file = /etc/rsync.password1 # rsync服务端验证密码(密码文件)
#[其他模块名字] # 模块名字,用户客户端访问服务端时指定
#comment = www by xk 14:18 2024-10-10 # 其他模块备注
#path = /data2 # 其他模块对应的目录
#secrets file = /etc/rsync.password2
# secrets file单独拿出写到模块下面表示每个模块设置一个密码,每个模块密码可以不一样。
进行配置(/etc/rsyncd.conf)
注意:参数(=)后面尽量别加注释,不然会报错
##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 xk 14:18 2024-1-13
path = /data
后续配置
#1.添加虚拟用户
[root@backup ~]# useradd -s /sbin/nologin -M rsync
[root@backup ~]# id rsync
用户id=1001(rsync) 组id=1001(rsync) 组=1001(rsync)
#2.创建密码文件(密码文件格式: 用户名:密码)
[root@backup ~]# echo 'rsync_backup:1' > /etc/rsync.password
[root@backup ~]#
[root@backup ~]# ll /etc/rsync.password
-rw-r--r-- 1 root root 15 10月 9 19:20 /etc/rsync.password
[root@backup ~]#
[root@backup ~]# chmod 600 /etc/rsync.password
[root@backup ~]#
[root@backup ~]# ll /etc/rsync.password
-rw------- 1 root root 15 10月 9 19:20 /etc/rsync.password
#3.共享目录与权限
[root@backup ~]# mkdir -p /data/
[root@backup ~]#
[root@backup ~]# ll -d /data
drwxr-xr-x 2 root root 6 10月 9 19:22 /data
[root@backup ~]# chown rsync.rsync /data/
[root@backup ~]#
[root@backup ~]# ll -d /data
drwxr-xr-x 2 rsync rsync 6 10月 9 19:22 /data
启动服务
# 启动服务
[root@backup ~]# systemctl enable --now rsyncd
Created symlink /etc/systemd/system/multi-user.target.wants/rsyncd.service → /usr/lib/systemd/system/rsyncd.service.
[root@backup ~]#
[root@backup ~]# systemctl restart rsyncd
# 检查服务
[root@backup ~]# ps -ef | grep rsync
root 57865 1 0 19:24 ? 00:00:00 /usr/bin/rsync --daemon --no-detach
root 57887 55788 0 19:25 pts/1 00:00:00 grep --color=auto rsync
[root@backup ~]#
# 检查端口
[root@backup ~]# ss -lntup | grep rsync
tcp LISTEN 0 5 0.0.0.0:873 0.0.0.0:* users:(("rsync",pid=57865,fd=5))
tcp LISTEN 0 5 [::]:873 [::]:* users:(("rsync",pid=57865,fd=6))
6.3.3 访问测试(客户端)
6.3.3.1 backup服务端本地测试
[root@backup ~]# rsync -av /etc/hostname rsync_backup@10.0.0.67::data
Password:
sending incremental file list
hostname
sent 104 bytes received 43 bytes 58.80 bytes/sec
total size is 7 speedup is 0.05
[root@backup ~]#
[root@backup ~]# ll /data/
总用量 4
-rw-r--r-- 1 rsync rsync 7 10月 9 11:19 hostname
[root@backup ~]#
6.3.3.2 nfs01客户端测试
[root@nfs01 ~]# touch /opt/2.txt
[root@nfs01 ~]#
[root@nfs01 ~]# rsync -avz /opt/2.txt rsync_backup@backup::data
sending incremental file list
2.txt
sent 88 bytes received 43 bytes 87.33 bytes/sec
total size is 0 speedup is 0.00
[root@nfs01 ~]#
6.3.3.3 免密码传输数据到服务端⭐⭐⭐⭐⭐
客户端密码文件只存储密码即可,(命令行指定客户端密码文件)
# 第一种密码明文 通过环境变量方式指定密码:RSYNC_PASSWORD
[root@nfs01 ~]# export RSYNC_PASSWORD=1
[root@nfs01 ~]# rsync -av /etc/hostname rsync_backup@10.0.0.67::data
sending incremental file list
hostname
sent 103 bytes received 49 bytes 304.00 bytes/sec
total size is 6 speedup is 0.04
[root@nfs01 ~]#
[root@nfs01 ~]# rsync -av /etc/hosts rsync_backup@10.0.0.67::data
sending incremental file list
hosts
sent 406 bytes received 43 bytes 898.00 bytes/sec
total size is 311 speedup is 0.69
[root@nfs01 ~]#
# 第二种密码写到文件里
[root@nfs01 ~]# echo '1' >/etc/rsync.client
[root@nfs01 ~]# chmod 600 /etc/rsync.client
[root@nfs01 ~]# ll /etc/rsync.client
-rw------- 1 root root 2 10月 9 19:56 /etc/rsync.client
[root@nfs01 ~]#
[root@nfs01 ~]# cat -A /etc/rsync.client
1$
[root@nfs01 ~]# touch /opt/1.txt
[root@nfs01 ~]#
[root@nfs01 ~]# rsync -av /opt/1.txt rsync_backup@backup::data --password-file=/etc/rsync.client
sending incremental file list
1.txt
sent 91 bytes received 43 bytes 268.00 bytes/sec
total size is 0 speedup is 0.00
[root@nfs01 ~]#
密码补充(客户端和服务端密码必须保持一致)
# 服务端密码配置:
secrets file = /etc/rsync.password # rsync服务端验证密码(密码文件)
# 客户端密码创建
[root@nfs01 ~]# echo '1' >/etc/rsync.client
[root@nfs01 ~]# chmod 600 /etc/rsync.client
[root@nfs01 ~]# ll /etc/rsync.client
-rw------- 1 root root 2 10月 9 19:56 /etc/rsync.client
[root@nfs01 ~]#
# 服务端密码创建
[root@backup ~]# echo 'rsync_backup:Xk123456' > /etc/rsync.password
[root@backup ~]# chmod 600 /etc/rsync.password
6.3.4 完整的rsyncd服务端小结
rsyncd服务与客户使用流程
# rsync服务端
1.配置文件
2.添加虚拟用户
3.secret文件,密码文件,文件权限
4.创建共享目录和修改权限
5.启动或重启,开机自启动.
6.测试
# rsync客户端
1.密码文件、权限
2.客户端命令测试
3.脚本与定时任务、测试
6.3.5 uid,gid 与 auth user
深刻理解uid,gid,,authr user,secret file
1.用户执行命令:rsync -avz /tmp/etc.tar.gz
rsync_backup@backup::data --password-file=/etc/rsync.client
2.服务端收到数据:判断rsync_backup用户,然后等待输入密码
3.把用户名和密码与配置文件里面对比 auth user 和secrets file
4.通过后,传输数据
5.数据到达服务器所有者被修改为uid和gid指定的(rsync)
6.数据写入data模块(/data/)目录下面.
7.rsync选项
rsync选项 |
含义 |
-a
|
-rlptgoD -r 递归复制 -l 复制软连接 -p 保持权限不变 -m 保持修改时间不变 -o 所有者不变 -g 用户组不变 -D --devices --specials 设备与特殊文件 |
-v |
显示过程 |
-z |
传输数据的时候进行压缩(公网),与限速选项冲突(极限情况下需要考虑加上-z选项) |
-P |
显示每rsync -av . root@10.0.0.31:/tmp/ --exclude=04 rsync -av . root@10.0.0.31:/mnt --exclude={04,05}个文件传输过 程 (进度条) 断点续传 --partial --progress |
--bwlimit |
500kb 50000kb 限速,注意不要与-z -P一起使用. iftop查看速度情况 iftop -i ens34 -nNP -B |
--exclude --exclude from |
排除 |
--delete |
保持客户端与服务端数据一致,删除服务端多余的数据.
(高度保持2者一致,用于实时同步场景,其他场景慎用.) |
# 限速并传输
rsync -aP --bwlimit=500kb /tmp/1g 10.0.0.31:/mnt/
# 传输并排除
rsync -av . root@10.0.0.31:/tmp/ --exclude=04
rsync -av . root@10.0.0.31:/mnt --exclude={04,05}
#通过文件内容进行排除
[root@backup /oldboy]# cat /tmp/paichu.txt
03
05
10
[root@backup /oldboy]# rsync -av . root@10.0.0.31:~ --
exclude-from=/tmp/paichu.txt
# 保持源与目标数据一致
rsync -avP --delete . root@10.0.0.31:/tmp/
8.定时备份案例
8.1 项目背景
- 项目来源:
- 老大要求
- 你主动发现问题,提出方案
- 项目情况:
- 🅰 完善已有项目,1-->100
- 🅱 从无到有项目,0-->1
- 项目:
- 可能是领导的一句话(同学把数据备份);
- 还可能是你发现的问题.(没有监控,备份不完全,代码上线流程不完善.每个人
- 都是root权限问题.) (从0到1从头搭建或从1到100服务完善)
- 遇到工作上发现的问题,可以准备下找出2-3个解决方案,发给老大.
- .....
- 把数据备份.
- 接下来要做的: 分析需求与老大再次确认,甚至后面在做项目的时候也要定期的汇报
8.2 需求分析
目标: 数据备份
分析: 到底备份什么?定时备份还是实时备份.
需要备份的内容 |
具体的位置 | 备份的方法 |
配置文件
|
/etc/ /var/spool/cron/
|
定时备份(每天) ❓思考:如何实现配置文件修改了才进行备份,如果没有修改则不备份. |
代码文件 |
待定 | web服务 |
用户数据 |
数据库(有备份工具),存储(实时同步) |
实时,定时.讲解到具体服务再说 |
运维脚本 |
/server/scripts/ | 定时备份. |
日志文件 |
/var/log/下面 | 通过日志收集平台做,实时. |
... |
备份配置文件,脚本,日志文件
8.3 项目实施步骤: ⭐⭐⭐⭐⭐
备份项目的步骤: |
流程 |
1.备份所有机器,定时备份,备份数据放在备份服务器. |
|
2.先准备rsync服务端,测试rsync客户端.专门备份模块backup 目录/backup/ |
专门备份模块backup 目录/backup/ |
3.rsync客户端书写备份脚本.
|
🅰 打包备份/etc/ /var/spool/cron/ 2个目录,年-月-日_周几 🅱 存放在/backup/172.16.1.xxx/ 🆎 备份发送到rsync服务端 🔤 删除本地旧的备份(比如保留最近7天或30天),写入定时 增加校验功能 |
4.rsync服务端书写检查脚本.
|
🅰 检查每天的备份结果,mail命令发送即可. 🅱 删除旧的备份180天之前的,保留每周一的备份(360天)..每个月第1号(保留720天) 🆎每年6月1日数据永久保留不删除. |
项目ip地址规划
角色 |
主机名 | ip地址公网 | ip内网 |
rsync服务端 |
backup | 10.0.0.67 | 172.16.1.67 |
rsync客户端 |
nfs01 | 10.0.0.68 | 172.16.1.68 |
拿到新的机器:
配置hosts解析
cat >>/etc/hosts<<EOF
内网ip 主机名
....
EOF
客户端脚本
bak_client.sh
#!/bin/bash
##############################################################
# File Name:bak_client.sh
# Version:V1.0
# Author:xk
# Organization:
# Desc:
##############################################################
#client
# vars
dir=/backup
ip=`hostname -I | awk '{print $1}'`
dst_ip="$1"
time=`date +%F_%w`
path=$dir/$ip
bak_file=$path/$time.tar.gz
log_file=/var/log/bak.log
secret="/etc/rsync.client"
check_res(){
ret="$?"
params="$*"
if [ $ret -eq 0 ];then
echo "$params 执行成功" >> $log_file
else
echo "$params 执行失败" >> $log_file
fi
}
# 目录是否存在
[ -d $path ] || mkdir -p $path
#密码
echo 'Xk123456' > $secret
chmod 600 $secret
# tar
tar zcf $bak_file /etc/
check_res tar
# md5sum
md5sum $bak_file > $path/bak.md5
check_res md5sum
# rsync
rsync -av /backup/ rsync_backup@$dst_ip::backup --password-file=/etc/rsync.client
check_res rsync
# 清理7天之前的文件
find /backup -type f -name *.tar.gz -mtime +7 | xargs rm -f
check_res rm bak +7
服务端脚本
bak_server.sh
#!/bin/bash
##############################################################
# File Name:bak_server.sh
# Version:V1.0
# Author:xk
# Organization:
# Desc:
##############################################################
#server
# vars
dir=/backup
log_file=/var/log/bak.log
# dst_dir=`grep -iE '\[backup\]' /etc/rsyncd.conf`
cfg="/etc/rsyncd.conf"
debian=`egrep -i 'ubuntu|debian' /etc/os-release | wc -l`
redhet=`egrep -i 'centos|kylin' /etc/os-release | wc -l`
check_res(){
ret="$?"
params="$*"
if [ $ret -eq 0 ];then
echo "$params 执行成功" >> $log_file
else
echo "$params 执行失败" >> $log_file
fi
}
# 备份目录是否存在
dir_user=`ls -l -d /backup/ | awk '{print $3}'`
dir_group=`ls -l -d /backup/ | awk '{print $4}'`
if [ -d $dir ];then
if [ "$dir_user" != "rsync" -o "$dir_group" != "rsync" ];then
chown -R rsync.rsync $dir
fi
else
mkdir -p /backup
chown -R rsync.rsync $dir
fi
# rsync 是否存在
dpkg -l | grep rsync
[ $? -ne 0 ] && apt install rsync -y
# 配置文件是否存在
if [ -f $cfg ];then
cp $cfg $cfg.bak
echo > $cfg
fi
cat >$cfg <<EOF
##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 xk 14:18 2024-1-13
#path = /data
[backup]
comment = www by xk 14:18 2024-1-13
path = /backup
EOF
# 用户是否存在
id rsync
[ $? -ne 0 ] && useradd -s /sbin/nologin -M rsync
# 密码是否存在
echo 'rsync_backup:Xk123456' > /etc/rsync.password
chmod 600 /etc/rsync.password
# 开机自启rsync
if [ $debian -gt 0 ];then
systemctl enable --now rsync
elif [ $redhet -gt 0 ];then
systemctl enable --now rsyncd
else
echo "未知系统"
fi
# 重启rsync
if [ $debian -gt 0 ];then
systemctl restart rsync
if [ $? -ne 0 ];then
systemctl start rsync
fi
elif [ $redhet -gt 0 ];then
systemctl restart rsyncd
if [ $? -ne 0 ];then
systemctl start rsyncd
fi
else
echo "未知系统"
fi
# 校验
find $dir -type f -name *.md5 | xargs md5sum -c > $dir/md5.txt
check_res md5sum --check
#备份检查脚本,清理旧的备份(超过180天,不包含每周一的备份),通过邮件方式发给领导
find $dir -type f -name *.tar.gz ! *_1.tar.gz -mtime +180 | rm -f
check_res rm bak
# 通过定时任务运行上面脚本
8.5 异地容灾
项目ip地址规划
角色 |
主机名 | ip地址公网 | ip内网 |
rsync服务端 |
backup | 39.106.44.157 | 172.28.157.228 |
rsync客户端 |
nfs01 | 10.0.0.68 | 172.16.1.68 |
rsync客户端 |
nfs02 | 10.0.0.88 | 172.16.1.88 |
rsync服务端设置安全组
全网备份项目流程
异地容灾备份案例(阿里云)
- 书写rsync服务端,客户端部署脚本(主要是服务端),根据rsync服务端部署流程书写,加入判断,函数.
- 书写rsync服务端检查脚本(读取rsync配置文件)
- selinux,firewalld
- 检查进程,检查端口873
- 检查用户是否存在 uid,gid
- 检查auth user用户和密码
- 检查密码文件权限
- 检查模块中共享目录的是否存在
- 检查模块中共享目录的权限