Day 41 Rsync备份
1.1 Rsync基本概述
rsync是一款开源的备份工具,可以在不同主机之间进行同步,
可实现全量备份与增量备份,因此非常适合用于架构集中式备份或异地备份等应用。
rsync官方地址:传送门
rsync监听端口:873
rsync运行模式:C/S 客户端/服务端 B/S 浏览器/服务端
rsync常见的两种备份方式
完全备份 增量备份
1.2 Rsync应用场景
上传(推) 下载(拉)
关于数据同步的两种方式
1.2.1 推: 所有主机推送本地数据至Rsync备份服务器,会导致数据同步缓慢(适合少量数据备份)
1.2.2 拉: rsync备份服务端拉取所有主机上的数据,会导致备份服务器开销大
1.2.3 大量服务器备份场景
1.2.4 异地备份实现思路
1.3 Rsync传输模式
Rsync大致使用三种主要的数据传输方式
1.3.1 本地方式
cp PC U盘
Local: rsync [OPTION...] SRC... [DEST]
[root@backup ~]# rsync /etc/passwd /tmp/
[root@backup ~]# ls /tmp/passwd
/tmp/passwd
1.3.2 远程方式scp
Access via remote shell: 远程传输
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] 下载(拉)
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST 上传(推)
下载pull
[root@nfs ~]# pwd
/root
[root@nfs ~]# echo "This Nfs" > file
[root@backup ~]# rsync -avz [email protected]:/root/file /opt/
[root@backup ~]# cat /opt/file
This Nfs
上传push(将backup的file2文件上传至NFS服务器的/mnt目录)
[root@backup ~]# pwd
/root
[root@backup ~]# echo "This Rsync" > file2
[root@backup ~]# rsync -avz /root/file2 [email protected]:/mnt
[root@nfs ~]# cat /mnt/file2
This Rsync
推送目录(推送/root/目录下面的所有文件和目录,不会推送/root/目录本身)
[root@backup ~]# rsync -avz /root/ [email protected]:/tmp
推送目录,推送目录本身以及目录下面的所有文件
[root@backup ~]# rsync -avz /root [email protected]:/tmp
远程方式存在的缺陷:
1.需要使用系统用户(不安全)
2.使用普通用户(权限存在问题)
3.需要走ssh协议
守护进程(服务,持续后台运行)
Access via rsync daemon: 守护进程方式传输
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] 下载
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST 上传
1.4 Rsync服务实践
角色 外网IP(NAT) 内网IP(LAN) 主机名
Rsync服务端 eth0:10.0.0.41 eth1:172.16.1.41 backup
Rsync客户端 eth0:10.0.0.31 eth1:172.16.1.31 nfs
1.4.1 安装
[root@backup ~]# yum install rsync -y
1.4.2 配置rsync
#查询配置文件存放的路径
[root@backup ~]# rpm -qc rsync
/etc/rsyncd.conf
配置rsync
[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.password 定义rsync服务用户连接认证密码文件路径
log file = /var/log/rsyncd.log
#####################################
#局部模块
[backup] 定义模块信息
comment = welcome to oldboyedu backup! 模块注释信息
path = /backup 定义接收备份数据目录
1.4.3 创建用户(运行rsync服务的用户身份)
#1.创建rsync账户,不允许登录不创建家目录
[root@backup ~]# useradd -M -s /sbin/nologin rsync
#2.创建备份目录(尽可能磁盘空间足够大),授权rsync用户为属主
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup/
1.4.4 创建虚拟用户密码文件(用于客户端连接时使用的用户)
#3.创建虚拟用户和密码,并赋予600权限
[root@backup ~]# echo "rsync_backup:1" >/etc/rsync.password
[root@backup ~]# chmod 600 /etc/rsync.password
1.4.5 启动rsync服务,并加入开机自启
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
启动后检查对应端口
[root@bogon ~]# netstat -lntp
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:873 0.0.0.0:* LISTEN 4758/rsync
1.4.6 Rsync客户端配置,配置密码并设置权限
Access via rsync daemon: 守护进程方式传输
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] 下载
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST 上传
1.将客户端的/etc/passwd 推送至 rsync服务端[backup]
rsync [OPTION...] SRC... [USER@]HOST::DEST
[root@nfs ~]# rsync -avz /etc/passwd [email protected]::backup
2.将rsync服务端模块[/backup]下载至本地
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
[root@nfs ~]# rsync -avz [email protected]::backup /opt
3.同步时不输入密码[第一种方式,sersync]
[root@nfs ~]# echo "1" >/etc/rsync.password
[root@nfs ~]# chmod 600 /etc/rsync.password
rsync -avz [email protected]::backup /opt --password-file=/etc/rsync.password
4.同步时不输入密码[第二种方式:写脚本时使用]
export RSYNC_PASSWORD=1
[root@nfs ~]# rsync -avz [email protected]::backup /opt
强制一致性 pc -> U盘保持一致(--delete)
[root@nfs ~]# rsync -avz /root [email protected]::backup --delete
限速
rsync -avzP --bwlimit=1 /opt/test.dosk [email protected]::backup
1.5 Rsync备份案例
统一所有的目录站点是/backup
1.5.1 备份什么
1.系统重要的配置文件
/etc/fstab /var/spool/cron/root
2.服务的配置文件
/etc/rsyncd.conf
3.日志
/var/log/secure /var/log/message
4.脚本
/server/scripts
1.5.2 怎么备份
/backup/nfs_172.16.1.31_2018_09_05
/backup/nfs_172.16.1.31_2018_09_06
/backup/nfs_172.16.1.31_2018_09_07
1.5.3 编写脚本
[root@nfs ~]# echo $(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F)
nfs_172.16.1.31_2018-09-05
[root@nfs ~]# mkdir /server/scripts -p
1.6 Rsync备份思考
1.我要备份什么 (xxxxx)
2.我要怎么备份 (tar)
3.我要将数据推送给谁 (备份服务器)