数据库运维
记录DBA学习成长历程

第14章:rsync备份服务器

文章目录

1.rsync程序介绍

Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。恢复,对比配置信息的作用。
通过 “quick check”算法,仅同步大小或者最后修改时间,权限,属主等属性发生变化的文件或目录。

2.如何实现的增量传输数据

1) 利用rsync程序算法(判断数据属性信息是否一致), 判断不同主机上的数据是否一致
[root@backup01 ~]# ll /etc/hosts
-rw-r--r-- 1 root root 311 May 20 16:14 /etc/hosts
[root@backup01 ~]# echo 1 >> /etc/hosts
[root@backup01 ~]# ll /etc/hosts
-rw-r--r-- 1 root root 313 May 20 16:14 /etc/hosts
2) 利用rsync程序算法(判断文件md5数值是否一致), 判断不同主机上的数据是否一致
[root@backup01 ~]# md5sum /etc/hosts
ae60b343c62ed776edfec06806b957f0 /etc/hosts
[root@backup01 ~]# echo 1 >> /etc/hosts
[root@backup01 ~]# md5sum /etc/hosts
197c12661c194afc649dee77f530ccd4 /etc/hosts

3.rsync的四个程序功能

—3.1 rsync == cp

[root@backup ~]# cp -a /etc/hosts /tmp/cp_hosts
[root@backup ~]# ll /tmp/cp_hosts
-rw-r--r-- 1 root root 375 Feb 21 17:17 /tmp/cp_hosts
[root@backup ~]# rsync -a /etc/hosts /tmp/rsync_hosts
[root@backup ~]# ll /tmp/rsync_hosts
-rw-r--r-- 1 root root 375 Feb 21 17:17 /tmp/rsync_hosts

[root@backup ~]# md5sum /tmp/cp_hosts 
128f8c89e281b88e82ccf7ba49ad3963 /tmp/cp_hosts 
[root@backup ~]# md5sum /tmp/rsync_hosts 
128f8c89e281b88e82ccf7ba49ad3963 /tmp/rsync_hosts

—3.2 rsync == scp(远程备份)

scp -rp /etc/sysconfig/ 172.16.1.31:/tmp/
scp -rp /etc/sysconfig/ oldboy@172.16.1.31:/tmp/
rsync -rp /oldboy_dir/ 172.16.1.31:/tmp/

利用rsync传输目录时:
传输的目录后面如果存在/(/oldboy_dir/) 表示将目录下面的数据内容进行全部传输
传输的目录后面如果不存在/(/oldboy_dir) 表示将目录本身和目录下面的数据内容进行全部传输

—3.3 rsync == rm

[root@backup ~]# mkdir /null
[root@backup ~]# ll /null/
total 0
[root@backup ~]# rsync -rp --delete /null/ 172.16.1.31:/tmp/
root@172.16.1.31's password:
--delete : 无差异同步--我有什么,你也有什么;我没有什么,你也不能有
实现不同主机之间数据高度一致

—3.4 rsync == ls

[root@nfs01 tmp]# ls /tmp/
oldboy.txt
[root@nfs01 tmp]# rsync /tmp/
drwxr-xr-x 24 2019/02/21 17:42:52 .
-rw-r--r-- 0 2019/02/21 17:41:46 oldboy.txt

4. rsync命令的工作模式

—4.1 本地备份数据 cp

Local: rsync [OPTION...] SRC... [DEST]
src: 要备份的数据信息
DEST: 将数据存储在什么位置

—4.2 远程备份数据 scp

Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] -- 下载
[USER@] -- 指定以什么用户身份传输数据
HOST -- 指定远程主机IP地址或者主机名称
SRC -- 远程主机上要进行下载的数据信息
DEST -- 将远程主机信息保存到本地主机的什么路径中

Push: rsync [OPTION...] SRC... [USER@]HOST:DEST -- 上传
SRC -- 本地主机上要进行上传的数据信息
DEST -- 将本地主机信息保存到远程主机的什么路径中

—4.3 守护进程方式远程备份数据:(推荐)

——4.3.1 作用

01. 可以控制传输的连接数量(同一时刻)
02. 可以实现免交互方式进行传输数据
03. 具有单独的传输认证进制

——4.3.2 模式

Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] -- 下载
[USER@] -- 指定一个认证用户信息
HOST -- 指定远程主机IP地址或者主机名称
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

5. rsync服务守护进程方式部署流程

—5.1 rsync服务端(rsync服务进程)

——5.1.1 第一个历程: 安装部署软件

[root@backup ~]# rpm -qa rsync
rsync-3.1.2-4.el7.x86_64

——5.1.2 第二个历程: 编写配置文件

PS: 只要是一个守护进程服务, 都会存在配置文件
vim /etc/rsyncd.conf

#rsync_config
#created by HQ at 2017
##rsyncd.conf start## -- 注释信息

uid = rsync -- 管理备份目录(属主信息是rsync)
gid = rsync -- 管理备份目录(属组信息是rsync)
port = 873 -- 守护进程服务端口信息
fake super = yes -- 伪装为超级用户
use chroot = no -- 安全的配置
max connections = 200 -- 同时可以有多少客户端连接rsync服务器
timeout = 300 -- 超时时间,显示空闲连接存活时间
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 -- 
hosts allow = 172.16.1.0/24 --- 设置允许哪些主机或网段可以向备份服务器存储数据(白名单)
hosts deny = 0.0.0.0/32 --- 设置禁止哪些主机或网段可以向备份服务器存储数据(黑名单)
auth users = rsync_backup --- 认证用户
secrets file = /etc/rsync.password --- 认证用户密码文件(信息:rsync_backup:oldboy123)
[backup] --- 模块信息
comment = "backup dir by oldboy" --- 模块注释说明信息
path = /backup --- 定义一个备份目录
===========================================
[root@backup01 ~]# systemctl start rsyncd
[root@backup01 ~]# ps -ef|grep rsync
root 1596 1 0 16:04 ? 00:00:00 /usr/bin/rsync --daemon --no-detach
root 1598 1539 0 16:04 pts/0 00:00:00 grep --color=auto rsync
[root@backup01 ~]# ll /var/run/rsyncd.pid
-rw-r--r-- 1 root root 5 May 26 16:04 /var/run/rsyncd.pid
[root@backup01 ~]# cat /var/run/rsyncd.pid
1596
[root@backup01 ~]# kill `cat /var/run/rsyncd.pid`

——5.1.3 第三个历程: 创建一个rsync虚拟用户

[root@backup01 ~]#useradd -s /sbin/nologin -M rsync

——5.1.4 第四个历程: 创建备份目录更改属主属组

[root@backup01 ~]#mkdir /backup
[root@backup01 ~]#chown rsync.rsync /backup 

——5.1.5 第五个历程: 创建认证密码文件

[root@backup01 ~]#echo "rsync_backup:oldboy123" >/etc/rsync.password
chmod 600 /etc/rsync.password

——5.1.6 第六个历程: 启动rsync服务

[root@backup01 ~]#systemctl start rsyncd
[root@backup01 ~]#systemctl enable rsyncd

—5.2 rsync客户端传输测试

[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
hosts
rsync: mkstemp ".hosts.XuzZ6k" (in backup) failed: Permission denied (13)权限拒绝

sent 227 bytes received 121 bytes 21.09 bytes/sec
total size is 371 speedup is 1.07
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]

—5.3 rsync守护进程模式传输数据原理

(centos7 rsync - 3.1.2)
a 在客户端执行守护进程备份数据命令
b 完成数据传输认证过程(用户名 密码信息)
c 完成用户映射过程:将客户端用户--->服务端的rsync用户
d 完成传输文件属主属组信息的修改--->修改为rsync

6. 如何实现免交互传输数据

完成rsync的nfs客户端配置过程
第一个历程: 创建密码文件 修改密码文件权限为600
[root@nfs01 ~]# echo oldboy123 >/etc/rsync.password
[root@nfs01 ~]# chmod 600 /etc/rsync.password

第二个历程: 进行传输测试
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

7.rsync命令参数说明

-v, --verbose --- 显示传输数据过程信息
-z, --compress --- 将传输数据进行压缩
-a, --archive --- 归档参数 -rtopgDl
-r, --recursive --- 递归传输数据
-t, --times --- 保持文件修改时间不变
-o, --owner --- 保持文件属主信息不变(在配置文件中uid设置为root用户)
-g, --group --- 保持文件属组信息不变(在配置文件中gid设置为root用户)
-p, --perms --- 保持文件权限不变
-D --- 保持设备文件信息不变
-l, --links --- 只传输链接文件,不会传输源文件中的内容 (bug)
-L, --- 不仅传输链接文件,也会传输源文件中的内容 
-P, --progress --- 显示数据传输的进度信息

[root@nfs01 ~]# dd if=/dev/zero of=/tmp/1000M bs=10M count=100
100+0 records in
100+0 records out
1048576000 bytes (1.0 GB) copied, 4.2542 s, 246 MB/s
[root@nfs01 ~]# ll /tmp/1000M -h
-rw-r--r-- 1 root root 1000M Jun 7 20:42 /tmp/1000M
[root@nfs01 ~]# rsync -aPvz /tmp/1000M rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
1000M
1,048,576,000 100% 146.52MB/s 0:00:06 (xfr#1, to-chk=0/1)

sent 1,019,830 bytes received 43 bytes 119,985.06 bytes/sec
total size is 1,048,576,000 speedup is 1,028.14

8. 实现备份数据排除功能(过滤)

--exclude=PATTERN 注意: 排除数据信息要写上相对路径
--exclude-from=file 利用exclude-from参数排除数据信息时, 建议后面接绝对路径信息

准备环境:
[root@nfs01 tmp]# mkdir /oldboy/{01..03} -p
[root@nfs01 tmp]# touch /oldboy/{01..03}/{a..c}.txt
[root@nfs01 ~]# tree /oldboy/
/oldboy/
├── 01
│   ├── a.txt
│   ├── b.txt
│   └── c.txt
├── 02
│   ├── a.txt
│   ├── b.txt
│   └── c.txt
└── 03
├── a.txt
├── b.txt
└── c.txt

进行排除操作: 排除01目录都不传输 排除02目录c.txt文件不要传输
[root@nfs01 tmp]# rsync -avz /oldboy/ --exclude=01/ --exclude=02/c.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
./
02/
02/a.txt
02/b.txt
03/
03/a.txt
03/b.txt
03/c.txt
sent 375 bytes received 134 bytes 1,018.00 bytes/sec
total size is 0 speedup is 0.00

PS: 利用exclude-from参数排除数据信息时, 建议后面接绝对路径信息
[root@nfs01 ~]# vim /oldboy/exlude_file 
01/
02/c.txt

[root@nfs01 oldboy]# rsync -avz /oldboy/ --exclude-from=/oldboy/exlude_file rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
./
02/
02/a.txt
02/b.txt
03/
03/a.txt
03/b.txt
03/c.txt

sent 375 bytes received 134 bytes 1,018.00 bytes/sec
total size is 0 speedup is 0.00

9. 实现无差异同步

--delete : 使客户端目录下的数据信息和备份服务端数据信息保持高度一致,
[root@nfs01 oldboy]# rsync -avz /oldboy/ --delete rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
deleting 01/c.txt
deleting 01/b.txt
deleting 01/a.txt
deleting 01/
./

sent 235 bytes received 72 bytes 614.00 bytes/sec
total size is 25 speedup is 0.08

10.实现存储数据访问控制

理解rsync服务访问控制原理
白名单优先于黑名单
hosts allow = 172.16.1.0/24 白名单
hosts deny = 0.0.0.0/32 黑名单

第1种情况: 只有白名单 没有黑名单,默认阻止白名单以外的
hosts allow = 172.16.1.0/24 白名单
#hosts deny = 0.0.0.0/32 黑名单
第2种情况: 只有黑名单 没有白名单,默认阻止黑名单
#hosts allow = 172.16.1.0/24 白名单
hosts deny = 0.0.0.0/32 黑名单
第3种情况: 有黑名单也有白名单,默认阻止黑名单
hosts allow = 172.16.1.0/24 白名单
hosts deny = 0.0.0.0/32 黑名单

11. 模块列表功能

list = false 在客户端上可以显示服务端的所有模块信息
PS: 建议将此功能关闭

12.备份目录层级创建功能

[root@nfs01 oldboy]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup/01/ --password-file=/etc/rsync.password
sending incremental file list
created directory 01
hosts

sent 227 bytes received 68 bytes 590.00 bytes/sec
total size is 371 speedup is 1.26

PS: 无法创建多级目录
[root@nfs01 oldboy]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup/01/02/03/04/ --password-file=/etc/rsync.password
sending incremental file list
rsync: mkdir "01/02/03/04" (in backup) failed: No such file or directory (2)
rsync error: error in file IO (code 11) at main.c(657) [Receiver=3.1.2]

PS: 已有目录可创建多级目录
[root@nfs01 oldboy]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup/01/02/ --password-file=/etc/rsync.password
sending incremental file list
created directory 01/02
hosts

sent 227 bytes received 71 bytes 596.00 bytes/sec
total size is 371 speedup is 1.24

13 多模块应用

—13.1 配置文件参数局部和全局配置

uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 300
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 = 172.16.1.0/24,10.0.0.0/24
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by oldboy"
path = /backup/
hosts allow = 172.16.1.0/24
[backup_dba]
comment = "backup dir by oldboy"
path = /backup_dba

—13.2 测试各模块备份情况

# 测试backup模块备份数据 (符合配置文件模块局部配置需求)
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
hosts

sent 227 bytes received 43 bytes 540.00 bytes/sec
total size is 371 speedup is 1.37
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@10.0.0.41::backup --password-file=/etc/rsync.password
@ERROR: Unknown module 'backup'
rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]

# 测试backup_dba模块
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@10.0.0.41::backup_dba --password-file=/etc/rsync.password
sending incremental file list

sent 48 bytes received 20 bytes 45.33 bytes/sec
total size is 371 speedup is 5.46
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup_dba --password-file=/etc/rsync.password
sending incremental file list

sent 48 bytes received 20 bytes 136.00 bytes/sec
total size is 371 speedup is 5.46

—13.3 多模块备份结论

配置文件中
a 只有全局配置信息时, 所有模块都遵循全局配置
b 只有局部配置信息时, 局部配置只影响指定模块
c 全局配置和局部配置都有, 局部配置优先于全局配置

14 企业应用

网站内部人员数据备份场景:定时任务+rsync
网站外部人员数据备份场景:实时同步+rsync
赞(2)
MySQL学习笔记 » 第14章:rsync备份服务器