一、rsync基础概念:
- rsync是实时数据备份的作用
1、rsync数据备份传输的方式
- 本地模式:类似cp命令,与其不同的是,rsync属于增量备份
- 远程方式模式:不区分服务端和客户端,实现两台主机时间到数据拷贝,可以直接进行数据的上传/下载进行备份/脚本打包
- 守护进程模式:这种模式采用虚拟用户的方式进行数据上传/下载相较于远程模式更规范和安全
2、完全备份/增量备份的优劣势
rsync默认(增量) | 完全备份 | 增量备份 |
---|---|---|
优点 | 数据完整 | 高效,节省空间 |
缺点 | 占内存,消耗CPU | 数据可能出现丢失 |
3、CS架构/BS架构
软件体系结构中,BS架构和CS架构都是常见的架构形式,分别代表浏览器/服务器架构和客户端/服务器架构
BS架构:一种基于web的应用程序架构,核心是将应用程序的逻辑部分放在服务端,将用户界面和交互部分放在web浏览器。这样在浏览器只需要一个web浏览器就可以完全应用程序的操作。这种架构方式具有开发、部署和维护成本低、跨平台性好
CS架构:一种基于应用程序的架构,应用程序被分为客户端和服务端两部分,客户端负责用户交互,服务端负责数据存储和业务逻辑处理。客户端与服务端之间通过网络进行通信,服务器将数据和结果返回给客户端,这种架构方式具有灵活性强、响应速度快等优点,适用于复杂业务场景
4、备份数据的方式:
- 上传:将数据在客户端上传到服务端
- 下载:将数据在客户端下载到服务端
5、监听端口
- 873
二、rsync传输方式
1、本地模式
rsync -avz 复制的内容 复制到哪里去
-a:归档模式,表示以递归方式传输文件,并保持所有文件属性
-v:详细模式输出
-z:对备份的文件在传输时进行压缩处理
# 案例1: 将1.txt 复制到/opt下
[root@web01 ~]# touch 1.txt
[root@web01 ~]# ll
total 0
-rw-r--r-- 1 root root 0 Dec 4 09:43 1.txt
[root@web01 ~]# rsync -avz 1.txt /opt/
sending incremental file list
sent 44 bytes received 12 bytes 112.00 bytes/sec
total size is 0 speedup is 0.00
[root@web01 ~]# echo 111 > 1.txt
[root@web01 ~]# rsync -avz 1.txt /opt/
sending incremental file list 1.txt
2、远程访问模式
rsync -azv root@主机:路径
rsync -azv 1.txt [email protected]:/root/ # 上传模式push
rsync -azv [email protected]:/etc/passwd /opt/ # 下载模式pull
rsync:命令
-azv:参数
root:对端服务器的用户名称
@:分隔符
主机:IP地址 域名 主机名称
: :主机和路径的分隔符
/root:文件路径
案例1:上传模式【将10.0.0.7上的1.txt上传到10.0.0.41的/root目录下】
[root@web01 ~]# rsync -avz 1.txt [email protected]:/root/
输入41的root密码
案例2.下载模式
将41上的41.txt下载到当前目录
[root@web01 ~]# rsync -avz [email protected]:/root/41.txt .
域名:
[root@backup ~]# rsync -avz 41.txt [email protected]:/tmp/
主机名称: hosts文件 本地DNS解析
[root@web01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.41 www.baidu.com backup
[root@web01 ~]# rsync -avz /etc/hosts root@backup:/root/
注意事项: 拷贝目录的注意事项
目录不加/ 表示目录本身,将oldboy目录及下面的所有文件拷贝到41
[root@web01 ~]# rsync -avz oldboy [email protected]:/root/
目录加/ 表示目录下所有的文件 只拷贝oldboy目录下面的所有文件到41
[root@web01 ~]# rsync -avz oldboy/ [email protected]:/root/
3、守护进程模式
rsync -avz file 匿名活用户@服务端IP::模块名称
rsync -avz 匿名活用户@服务端IP::模块名称/file
三、rsync服务配置
1、服务准备:
主机角色 | 外网IP(WAN) | 内网IP(LAN) | 主机名称 |
---|---|---|---|
rsync服务端 | 10.0.0.41 | 172.16.1.41 | backup |
rsync客户端 | 10.0.0.7 | 172.16.1.7 | web01 |
2、实操:
1、安装服务
[root@backup ~]# yum -y install rsync
查看是否存在软件包:rpm -qa 查看是否存在相关软件包配置文件地址:rpm -qc
2、配置服务
[root@backup ~]# cat /etc/rsyncd.conf
uid = rsync # 运行进程的用户
gid = rsync # 运行进程的用户组
port = 873 # 监听端口
fake super = yes # 无需让rsync以root身份运行,允许接收文件的完整属性
use chroot = no # 禁锢推送的数据至某个目录,不允许跳出该目录
max connections = 200 # 最大连接数
timeout = 600 # 超时时间
ignore errors # 忽略错误信息
read only = false # 对备份数据可读写
list = false # 不允许查看模块信息
auth users = rsync_backup # 定义虚拟用户,作为连接认证用户
secrets file = /etc/rsync.passwd # 定义rsync服务用户连接认证密码文件路径
log file = /var/log/rsyncd.log
#####################################
[backup] # 定义模块信息
comment = welcome to oldboyedu backup! # 模块注释信息
path = /backup #定义接收备份数据目录
3.根据配置文件创建必要的数据
1)创建用户
[root@backup ~]# useradd -M -s /sbin/nologin rsync
2)创建密码文件,并修改权限为600
[root@backup ~]# cat /etc/rsync.passwd
rsync_backup:123456
[root@backup ~]# chmod 600 /etc/rsync.passwd
[root@backup ~]# ll /etc/rsync.passwd
-rw------- 1 root root 20 Dec 4 11:03 /etc/rsync.passwd
3)创建存放数据的目录
[root@backup ~]# mkdir /backup
[root@backup ~]# ll -d /backup
drwxr-xr-x 2 root root 6 Dec 4 11:06 /backup
修改属主属组权限为rsync服务的启动用户rsync
[root@backup ~]# chown rsync.rsync /backup/
[root@backup ~]# ll -d /backup/
drwxr-xr-x 2 rsync rsync 6 Dec 4 11:06 /backup/
4.启动服务加入开机自动运行
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
检查服务是否运行:
[root@backup ~]# netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1303/sshd
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 4267/rsync
5.测试
客户端推送:
[root@web01 ~]# rsync -avz /etc/hosts [email protected]::backup
模块后面也可以加路径:
[root@web01 ~]# rsync -avz /etc/hosts [email protected]::backup/oldboy/
将服务器上的11.txt下载到当前目录
[root@web01 ~]# rsync -avz [email protected]::backup/oldboy/11.txt .
四、rsync参数选项
指定密码文件实现免交互
第一种方法: 使用密码文件方式
[root@web01 ~]# cat /etc/rsync.pass
123456
修改文件权限
[root@web01 ~]# chmod 600 /etc/rsync.pass
使用密码密码文件
[root@web01 ~]# rsync -avz /etc/hosts [email protected]::data --password-file=/etc/rsync.pass
第二种方法: 使用rsync服务的内置变量
RSYNC_PASSWORD 内置变量默认为空,在执行rsync推送命令时候会先读取此变量,如果有则调用,如果没有定义,则提示让用户输入密码
1.定义变量
[root@web01 ~]# export RSYNC_PASSWORD=123456
2.直接推送默认会调用上面的变量
[root@web01 ~]# rsync -avz /etc/hosts [email protected]::data
五、企业案例:
1、需求:
脚本+定时任务
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个月的备份数据,其余的全部删除
find /backup/ -ctime +180 -name "nfs*" -exec rm -rf {} \;
注意:所有服务器的备份目录必须都为/backup
邮箱设置:
#1.服务端配置邮件功能
[root@rsync~]# yum install mailx -y
[root@rsync~]# vim /etc/mail.rc
set from=写自己的163邮箱
set smtp=smtps://smtp.163.com:465
set smtp-auth-user=写自己的163邮箱
set smtp-auth-password=JMEHJRULSYTSRLJH #授权密码管理的密码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
#2.测试发送邮件
[root@rsync ~]# echo "验证成功" | mail -s "验证结果" 163邮箱
2、实操:
# 【客户端:】
# 创建文件夹
mkdir /backup
# 创建包含自身ip和时间的一个目录
mkdir -p /backup/nfs_`ifconfig eth0|awk 'NR==2{print $2}'`_`date +%F`
# 对需要的目录或者文件进行压缩
tar -zcvf /backup/nfs_`ifconfig eth0|awk 'NR==2{print $2}'`_`date +%F`/etc.tar.gz $(find /etc/ -type f)
# 进入对应文件夹,避免'/'报错提示
cd /backup/nfs_`ifconfig eth0|awk 'NR==2{print $2}'`_`date +%F`
# md5校验,避免数据传输之后数据错乱
md5sum etc.tar.gz > md5xfs.log
# 上传
rsync -azv /backup/ [email protected]::backup --password-file=/etc/rsync.pass
# 客户端服务器本地保留最近7天的数据,避免浪费磁盘空间
find /backup/ -ctime +7 -name 'xfs.*'|xargs -rm
######################################################################################################################
#【服务端】
cd /backup/nfs_`ifconfig eth0|awk 'NR==2{print $2}'`_`date +%F` # 进入对应文件夹(根据具体情况而定+)
md5sum -c md5xfs.log # 进行MD5校验
if [ $? -eq 0 ];then # 判断上一级最终结果是否为0,这里是shell
echo "验证成功" | mail -s "验证结果" [email protected]
else
echo "验证失败" | mail -s "验证结果" [email protected]
fi
find /backup/ -ctime +180 -name "nfs.*" -exec rm -rf {} \;
标签:rsync,backup,etc,详解,概述,web01,root,客户端
From: https://www.cnblogs.com/9Dusk/p/18368172