Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具
rsync软件使用方法:
rsync命令 1v4mysql
[root@nfs01 backup]# cp /etc/hosts /tmp [root@nfs01 backup]# ll /tmp/hosts -rw-r--r-- 1 root root 371 May 6 16:11 /tmp/hosts [root@nfs01 backup]# rsync /etc/hosts /tmp/host_rsync [root@nfs01 backup]# ll /tmp/host_rsync -rw-r--r-- 1 root root 371 May 6 16:12 /tmp/host_rsync
scp -rp /etc/hosts root@172.16.1.41:/backup root@172.16.1.41's password: hosts 100% 371 42.8KB/s 00:00
-r --- 递归复制传输数据
-p --- 保持文件属性信息不变linux
[root@nfs01 ~]# rsync -rp /etc/hosts 172.16.1.41:/backup/hosts_rsync root@172.16.1.41's password:
rsync远程备份目录:nginx
[root@nfs01 ~]# rsync -rp /oldboy 172.16.1.41:/backup --- 备份的目录后面没有 / root@172.16.1.41's password: [root@backup ~]# ll /backup total 0 drwxr-xr-x 2 root root 48 May 6 16:22 oldboy [root@backup ~]# tree /backup/ /backup/ └── oldboy ├── 01.txt ├── 02.txt └── 03.txt 1 directory, 3 files [root@nfs01 ~]# rsync -rp /oldboy/ 172.16.1.41:/backup --- 备份的目录后面有 / root@172.16.1.41's password: [root@backup ~]# ll /backup total 0 -rw-r--r-- 1 root root 0 May 6 16:24 01.txt -rw-r--r-- 1 root root 0 May 6 16:24 02.txt -rw-r--r-- 1 root root 0 May 6 16:24 03.txt
总结: 在使用rsync备份目录时:
备份目录后面有 / -- /oldboy/ : 只将目录下面的内容进行备份传输
备份目录后面没有/ -- /oldboy : 会将目录自己以及下面的内容进行传输备份web
rm命令 [root@nfs01 ~]# rsync -rp --delete /null/ 172.16.1.41:/backup root@172.16.1.41's password: --delete 实现无差别同步数据
有一个存储数据信息的目录, 目录中数据存储了50G数据, 如何将目录中的数据快速删除 rm /目录/* -rf
替代查看文件命令 ls 面试
[root@backup ~]# ls /etc/hosts /etc/hosts [root@backup ~]# rsync /etc/hosts -rw-r--r-- 371 2019/05/06 11:55:22 hosts
redis
sql
全量备份:shell
vim
安全
rsync命令语法格式
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
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
大量服务器备份场景
#pull拉取数据命令 Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] #pull拉取数据示例 [root@backup ~]# rsync -avz root@172.16.1.41:/etc/hostname ./ #拉取远程文件 [root@backup ~]# rsync -avz root@172.16.1.41:/root/ /backup/ #拉取远程目录下的全部文件 [root@backup ~]# rsync -avz root@172.16.1.41:/root /backup/ #拉取远程目录以及目录下的全部文件 Pull #拉取, 下载 rsync #备份命令 [options] #选项 [USER@] #目标主机的系统用户 HOST #目主机IP地址或域名 SRC... #目标主机源文件 [DEST] #下载至本地哪一个位置 #push推送数据命令 Push: rsync [OPTION...] SRC... [USER@]HOST:DEST #push推送数据示例 rsync -avz /backup/2018-10-01 root@172.16.1.41:/tmp/ Push #推送, 上传 rsync #备份命令 [options] #选项 SRC... #本地源文件 [USER@] #目标主机的系统用户 HOST #目主机IP地址或域名 [DEST] #目标对应位置
#pull拉取数据命令 Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] #1.拉取rsync备份服务的"backup模块"至本地/mnt目录 [root@nfs01 ~]# rsync -avz rsync_backup@172.16.1.41::backup/ /mnt/ --password-file=/etc/rsync.password rsync #命令 [OPTION...] #选项 [USER@] #远程主机用户(虚拟用户) HOST:: #远程主机地址 SRC... #远程主机模块(不是目录) [DEST] #将远程主机数据备份至本地什么位置 #push推送数据命令 Push: rsync [OPTION...] SRC... [USER@]HOST::DEST #2.将本地/mnt目录推送至rsync备份服务器的"backup模块" [root@nfs01 ~]# rsync -avz /mnt/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password rsync #命令 [OPTION...] #选项 SRC... #远程主机模块(不是目录) [USER@] #远程主机用户(虚拟用户) HOST:: #远程主机地址 [DEST] #将远程主机模块备份至本地什么位置
客户端---服务端
rsync守护进程服务端配置:
第一个历程: 下载安装软件
rpm -qa|grep rsync yum install -y rsync
第二个历程: 编写配置文件
man rsyncd.conf vim /etc/rsyncd.conf created by HQ at 2017 rsyncd.conf start uid = rsync --- 指定管理备份目录的用户
gid = rsync --- 指定管理备份目录的用户组
port = 873 --- 定义rsync备份服务的网络端口号
fake super = yes --- 将rsync虚拟用户假装成为一个超级管理员用户
use chroot = no --- 和安全相关的配置
max connections = 200 --- 最大链接数 同时只能有200个客户端链接到备份服务器
timeout = 300 --- 超时时间(单位秒)
pid file = /var/run/rsyncd.pid --- 记录进程号码信息 1.让程序快速中止进程 2. 判断一个服务是否正在运行
lock file = /var/run/rsync.lock --- 锁文件
log file = /var/log/rsyncd.log --- rsync服务的日志文件 用于排错分析问题
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 oldboy"
path = /backup --- 模块中配置参数 指定备份目录
第三个历程: 建立rsync服务的虚拟用户
[root@nfs01 ~]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup/
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 enable rsyncd systemctl status rsyncd
须要熟悉rsync守护进程名称语法:
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 [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
rsync守护进程客户端配置:
第一个历程: 建立一个秘密文件
echo "oldboy123" >/etc/rsync.password chmod 600 /etc/rsync.password
第二个历程: 进行免交互传输数据测试
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file
=/etc/rsync.password
rsync命令参数详细说明
-v, --verbose 显示详细的传输信息 -a, --archive 命令的归档参数 包含: rtopgDl -r, --recursive 递归参数 -t, --times 保持文件属性信息时间信息不变(修改时间) -o, --owner 保持文件属主信息不变 -g, --group 保持文件属组信息不变 PS: 如何让-o和-g参数生效,须要将配置文件uid和gid改成root,须要将 fake super参数进行注释 -p, --perms 保持文件权限信息不变 -D, 保持设备文件信息不变 -l, --links 保持连接文件属性不变 -L, 保持连接文件数据信息不变 -P, 显示数据传输的进度信息 --exclude=PATTERN 排除指定数据不被传输 --exclude-from=file 排除指定数据不被传输(批量排除) --bwlimit=RATE 显示传输的速率 100Mb/8=12.5MB 企业案例: 马路(带宽-半) 人人网地方 --delete 无差别同步参数(慎用) 我有的你也有,我没有的你也不能有
a. 守护进程多模块功能配置
sa sa_data.txt dev dev_data.txt dba dba_data.txt [backup] comment = "backup dir by oldboy" path = /backup [dba] comment = "backup dir by oldboy" path = /dba [dev] comment = "backup dir by oldboy" path = /devdata
b. 守护进程的排除功能实践
准备环境:
[root@nfs01 /]# mkdir -p /oldboy [root@nfs01 /]# mkdir -p /oldboy/{a..c} [root@nfs01 /]# touch /oldboy/{a..c}/{1..3}.txt [root@nfs01 /]# tree /oldboy /oldboy ├── 01.txt ├── 02.txt ├── a │?? ├── 1.txt │?? ├── 2.txt │?? └── 3.txt ├── b │?? ├── 1.txt │?? ├── 2.txt │?? └── 3.txt └── c ├── 1.txt ├── 2.txt └── 3.txt
实例01: 将/oldboy目录下面 a目录数据所有备份 b目录不要备份1.txt文件 c整个目录不要作备份
--exclude=PATTERN
绝对路径方式:
[root@nfs01 /]# rsync -avz /oldboy --exclude=/oldboy/b/1.txt --exclude=/oldboy/c/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password sending incremental file list oldboy/ oldboy/01.txt oldboy/02.txt oldboy/a/ oldboy/a/1.txt oldboy/a/2.txt oldboy/a/3.txt oldboy/b/ oldboy/b/2.txt oldboy/b/3.txt
相对路径方式:
[root@nfs01 /]# rsync -avz /oldboy --exclude=b/1.txt --exclude=c/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password sending incremental file list oldboy/ oldboy/01.txt oldboy/02.txt oldboy/a/ oldboy/a/1.txt oldboy/a/2.txt oldboy/a/3.txt oldboy/b/ oldboy/b/2.txt oldboy/b/3.txt sent 502 bytes received 177 bytes 1,358.00 bytes/sec total size is 0 speedup is 0.00
实例02: 将/oldboy目录下面 a目录数据所有备份 b目录不要备份1.txt文件 c整个目录1.txt 3.txt文件不要备份
--exclude-from=file --- 批量排除
第一个历程: 编辑好一个排除文件
[root@nfs01 /]# cat /oldboy/exclude.txt b/1.txt c/1.txt c/3.txt exclude.txt
第二个历程: 实现批量排除功能
[root@nfs01 /]# rsync -avz /oldboy --exclude-from=/oldboy/exclude.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password sending incremental file list oldboy/ oldboy/01.txt oldboy/02.txt oldboy/a/ oldboy/a/1.txt oldboy/a/2.txt oldboy/a/3.txt oldboy/b/ oldboy/b/2.txt oldboy/b/3.txt oldboy/c/ oldboy/c/2.txt
c. 守护进程来建立备份目录
[root@nfs01 /]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup/10.0.0.31/ --password-file=/etc/rsync.password sending incremental file list created directory 10.0.0.31 hosts sent 226 bytes received 75 bytes 602.00 bytes/sec total size is 371 speedup is 1.23
PS: 客户端没法在服务端建立多级目录
d. 守护进程的访问控制配置
守护进程白名单和黑名单功能
PS: 建议只使用一种名单
e. 守护进程的列表功能配置
[root@nfs01 /]# rsync rsync_backup@172.16.1.41:: backup "backup dir by oldboy" dba "backup dir by oldboy" dev "backup dir by oldboy"
使用3台服务器主机名分别为web0一、backup 、nfs
主机信息见下表:
角色 | 外网IP(WAN) | 内网IP(LAN) | 主机名 | |
---|---|---|---|---|
WEB | eth0:10.0.0.7 | eth1:172.16.1.7 | web01 | |
NFS | eth0:10.0.0.31 | eth1:172.16.1.31 | nfs01 | |
Rsync | eth0:10.0.0.41 | eth1:172.16.1.41 | backup |
客户端需求
1.客户端提早准备存放的备份的目录,目录规则以下:/backup/nfs_172.16.1.31_2018-09-02
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端天天凌晨1点定时执行该脚本
5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
服务端需求
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端须要天天校验客户端推送过来的数据是否完整
3.服务端须要天天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其他的所有删除
注意:全部服务器的备份目录必须都为/backup
建议备份的数据内容以下:
# 1.开机自启动配置文件 设备挂载配置文件 本地内网配置文件 (系统配置文件)
/etc/rc.local /etc/fstab /etc/hosts
# 2.cron定时任务 firewalld防火墙 脚本目录 (重要目录)
/var/spool/cron/ /etc/firewalld /server/scripts
# 3.系统日志文件
/var/log/ /系统安全日志、sudo日志、内核日志、rsyslog日志
# 4.应用程序服务配置文件 nginx、PHP、mysql、redis.....
客户端备份实现思路,天天凌晨01点定时执行一次脚本(打包->标记->推送->保留最近7天的文件)
[root@nfs scripts]# vim /server/scripts/client_rsync_backup.sh #!/usr/bin/bash # 1.定义变量 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin Host=$(hostname) Addr=$(ifconfig eth1|awk 'NR==2{print $2}') Date=$(date +%F) Dest=${Host}_${Addr}_${Date} Path=/backup # 2.建立备份目录 [ -d $Path/$Dest ] || mkdir -p $Path/$Dest # 3.备份对应的文件 cd / && \ [ -f $Path/$Dest/system.tar.gz ] || tar czf $Path/$Dest/system.tar.gz etc/fstab etc/rsyncd.conf && \ [ -f $Path/$Dest/log.tar.gz ] || tar czf $Path/$Dest/log.tar.gz var/log/messages var/log/secure && \ # 4.携带md5验证信息 [ -f $Path/$Dest/flag ] || md5sum $Path/$Dest/*.tar.gz >$Path/$Dest/flag_$Date # 5.推送本地数据至备份服务器 export RSYNC_PASSWORD=123456 rsync -avz $Path/ rsync_backup@172.16.1.41::backup # 6.本地保留最近7天的数据 find $Path/ -type d -mtime +7 | xargs rm -rf
2.客户端编写定时任务,让备份天天凌晨1点执行 00 01 * * * /bin/bash /server/scripts/client_rsync_backup.sh &>/dev/null 3.服务端校验客户端推送数据的完整性, (校验->存储校验结果->将保存的结果经过邮件发送给管理员->保留最近180天的数据) # 1.服务端配置邮件功能 [root@backup /]# yum install mailx -y [root@backup /]# vim /etc/mail.rc # 文件最后添加 set from=2543843664@qq.com # 邮件来源(发件人) set smtp=smtps://smtp.qq.com:465 # smtp服务器地址 set smtp-auth-user=2543843664@qq.com # 发件人邮箱账号 set smtp-auth-password=xcvzpqgrjtmuecaa # smtp客户端受权密码,登陆邮箱设置,并不是邮箱密码! set smtp-auth=login # 须要登陆认证 set ssl-verify=ignore # 忽略证书警告 set nss-config-dir=/etc/pki/nssdb/ # 证书所在目录 # 2.服务端校验、以及邮件通知脚本 [root@backup ~]# mkdir /server/scripts -p [root@backup ~]# vim /server/scripts/check_backup.sh #!/usr/bin/bash # 1.定义全局的变量 export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin # 2.定义局部变量 Path=/backup Date=$(date +%F) # 3.查看flag文件,并对该文件进行校验, 而后将校验的结果保存至result_时间 find $Path/ -type f -name "flag_$Date"|xargs md5sum -c >$Path/result_${Date} # 4.将校验的结果发送邮件给管理员 mailx -s "Rsync Backup $Date" 2543843664@qq.com <$Path/result_${Date} # 5.删除超过7天的校验结果文件, 删除超过180天的备份数据文件 find $Path/ -type f -name "result*" -mtime +7|xargs rm -f find $Path/ -type d -mtime +180|xargs rm -rf 4.服务端编写定时任务脚本 00 05 * * * /bin/bash /server/scripts/check_backup.sh &>/dev/null 扩展多台客户端 5.对其余客户端重复1. 2. 步便可
rsync服务部署安装过程 linux系统安装部署服务流程: a 下载安装软件 yum b 编写配置文件 c 搭建服务环境 备份的目录/目录权限 d 启动服务程序 开机自动启动 e 测试服务功能