rsync备份服务

Posted 朋末西林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rsync备份服务相关的知识,希望对你有一定的参考价值。

简介

Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具


全量

将一个目录完整备份到另一个目录或服务器上,每次全部备份覆盖上一次的备份。效率低

增量

将一个目录备份到另一个目录或服务器时先通过算法匹对是否有相同数据,再将新增数据备份到另一个目录或服务器上。效率高


作用

进行数据备份、日志的统一保存


使用方法

rsync命令属于1v4命令,即可替代cp、scp、rm、ls命令


比较

1、本地备份数据 cp/rsync

[root@oldboysz-01 ~]# cp /etc/hosts /tmp

[root@oldboysz-01 ~]# ll /tmp/hosts

-rw-r--r-- 1 root root 371 Dec 2 14:25 /tmp/hosts

[root@oldboysz-01 ~]# rsync /etc/hosts /tmp/hosts_rsync

[root@oldboysz-01 ~]# ll /tmp/hosts_rsync

-rw-r--r-- 1 root root 371 Dec 2 14:30 /tmp/hosts_rsync

2、远程备份数据 scp/rsync -rp

指定目标用户

[root@nfs01 backup]# scp -rp /etc/hosts root@172.16.1.41:/backup

root@172.16.1.41s password:

hosts 100% 371 1.0KB/s 00:00

默认目标用户

[root@nfs01 backup]# scp -rp /etc/hosts 172.16.1.41:/backup

root@172.16.1.41s password:

hosts 100% 371 294.9KB/s 00:00


-r --- 递归复制传输数据

-p --- 保持文件属性信息不变


[root@nfs01 backup]# rsync -rp /etc/hosts 172.16.1.41:/backup/hosts_rsync

root@172.16.1.41s password:


rsync远程备份目录:

[root@nfs01 ~]# rsync -rp /oldboy 172.16.1.41:/backup --- 备份的目录后面没有 /

root@172.16.1.41s 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.41s 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 :会将目录本身以及下面的内容进行备份传输

3、替代删除命令(使用rsync参数--delete将某个空目录进行备份实现删除目标目录中数据)

存储服务器上操作

[root@nfs01 backup]# rsync -rp --delete /null/ 172.16.1.41:/backup

root@172.16.1.41s password:

备份服务器上操作

[root@backup backup]# ll

total 0


--delete 实现无差异同步数据

4、替代查看文件命令 ls/rsync

[root@backup backup]# ls /etc/hosts

/etc/hosts

[root@backup backup]# rsync /etc/hosts

-rw-r--r-- 371 2021/11/13 19:56:04 hosts


rsync语法格式

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. 可以实现自动传输备份数据

需要熟悉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守护进程部署方式

rsync守护进程服务端配置:

第一个历程:下载安装软件

rpm -qa|grep rsy 检查软件是否安装

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备份服务的网络端口号(默认873)

#fake super = yes --- 将rsync虚拟用户伪装成为一个超级管理员用户

use chroot = no --- 和安全相关的配置

max connections = 200 --- 最大连接数 同时只能有200个客户端连接到备份服务器

timeout = 300 --- 超时时间(单位:秒)

pid file = /var/run/rsyncd.pid --- 记录进程号码信息(1.让程序快速停止进程[kill `cat /var/run/rsyncd.pid `] 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 --- 指定认证用户password文件 用户名称:password信息

[backup] --- 模块信息

comment = "backup dir by oldboy"

path = /backup --- 模块中配置参数(指定备份目录)



第三个历程:创建rsync服务的虚拟用户

useradd rsync -M -s /sbin/nologin


第四个历程:创建备份服务认证password文件并修改权限

echo "rsync_backup:sjbroot">/etc/rsync.password

chmod 600 /etc/rsync.password --- 修改权限为仅属主用户可读写600


第五个历程:创建备份目录并修改属主属组信息

mkdir /backup

chown rsync.rsync /backup/


第六个历程:启动备份服务

systemctl start rsyncd

systemctl enable rsyncd

systemctl status rsyncd


rsync守护进程客户端配置:

第一个历程:创建一个password文件

echo "sjbroot">/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 无差异同步参数(慎用)

-z 压缩数据


守护进程来创建备份目录

rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup/10.0.0.7/ -- password-file=/etc/rsync.password

PS:客户端无法在服务端创建多级目录


守护进程的列表功能配置

[root@nfs01 /]# rsync rsync_backup@172.16.1.41::

backup "backup dir by oldboy"

dba "backup dir by oldboy"

dev "backup dir by oldboy"


守护进程的访问控制配置

守护进程白名单和黑名单功能

三种情况:

1. 只有白名单,黑名单注释:只有白名单上的网段或IP可传输,其余阻止

2. 只有黑名单,白名单注释:只有黑名单上的网段或IP阻止传输,其余允许

3. 白名单黑名单都有 :传输时匹配黑白名单网段或IP进行允许或阻止,其余网段允许

4. 又在白名单又在黑名单 :一个网段或IP均在黑白名单上时,白名单优先于黑名单

PS:建议只使用一种名单


全网备份项目实战

环境准备

备份服务器rsync、存储服务器nfs、web服务器web01


项目需求

1)所有服务器的备份目录必须都为/backup

web01 nfs01 backup


2)要备份的系统配置文件包括但不限于:

a.定时任务服务的配置文件(/var/spool/cron/root)(适合web和nfs服务器)。

b.开机自启动的配置文件(/etc/rc.local)(适合web和nfs服务器)。

c.日常脚本的目录(/server/scripts)。

d.防火墙iptables的配置文件(/etc/sysconfig/iptables)。

web01 nfs01


3)Web服务器站点目录假定为(/var/html/www)。

4)Web服务器A访问日志路径假定为(/app/logs)

web01


5)Web服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)

web01 nfs01


6)备份服务器上,保留每周一的所有数据副本,其它要保留6个月的数据副本。

六个月以内 周一 ~ 周日

六个月以前 周一 ~ 周日 周一保留 周二 ~ 周日 删除

backup

部署好rsync守护进程服务


7)备份服务器上要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存。

web01 nfs01


8)需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中(发邮件技巧见VIP群资料)。

backup


备份客户端要完成的工作

1. mkdir -p /backup/10.0.0.31


2. cd /

tar -zchf /backup/10.0.0.31/system_backup_$(date +%F_week%w).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables


3. find /backup -type f -mtime +7|xargs rm


4. find /backup/ -type f -mtime -1 ! -name "finger*"|xargs md5sum >/backup/10.0.0.31/finger.txt


5. rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password


web客户端要完成的工作

1. mkdir -p /backup/10.0.0.7


2. cd /

tar -zchf /backup/10.0.0.31/system_backup_$(date +%F_week%w).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables


3. tar -zchf /backup/10.0.0.31/www_backup_$(date +%F_week%w).tar.gz ./var/html/www


4. tar -zchf /backup/10.0.0.31/logs_backup_$(date +%F_week%w).tar.gz ./app/logs


5. find /backup -type f -mtime +7|xargs rm


6. find /backup/ -type f -mtime -1 ! -name "finger*"|xargs md5sum >/backup/10.0.0.7/finger.txt


7. rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password


补充:

01. tar命令用法

-h, --dereference follow symlinks; archive and dump the files they point to

将链接文件所指向的原文件进行保存备份


备份服务端要完成的工作

mkdir -p /backup


find /backup/ -type f -mtime +180 ! -name "*week1.tar.gz"|xargs rm 2>/dev/null


find /backup/ -type f -name "finger.txt"|xargs md5sum -c &>/tmp/check.txt


mail -s "邮件测试" 1480451772@qq.com </tmp/check.txt


补充说明:

01. 保留周一数据的方法

第一种:在数据名称信息上加上周的信息

find /backup/ -type f -mtime +180 ! -name "*week1.tar.gz"

第二种:在服务端进行检查,将每周一传输的数据进行单独保存

02. 如何验证数据完整性

利用md5算法进行验证数据完整性

#md5sum -c 指纹文件命令执行原理

# 第一个历程: 打开一个指纹文件,将信息记录到缓存中

# 第二个历程: 根据指纹文件的路径信息,生成md5数值信息

# 第三个历程: 将新生成md5数值和原有指纹文件中的数值进行比较

# 第四个历程: 如果相同显示结果为ok,如果不同显示failed

03. 如何实现发送邮件

a. 配置163企业邮箱

b.

vim /etc/mail.rc

set from=*********@163.com smtp=smtp.163.com

set smtp-auth-user=*********@163.com smtp-auth-password=PCPPORIZWQIQJAYS smtp-auth=login

邮箱用户名称 邮箱授权password(不是登录password)

systemctl restart postfix.service

c. 发送邮件测试

echo "邮件发送测试"|mail -s "邮件测试" 1480451772@qq.com

说明:echo后面接上要发送的邮件信息,mail -s后面接上邮件标题,最后表示要将邮件发送给谁

mail -s "邮件测试" 330882721@qq.com </etc/hosts


编写全网备份脚本

客户端脚本:

nfs01服务器备份脚本:

#!/bin/bash

Backup_dir="/backup"

IP_info=$(hostname -I|awk {print $1})


#create backup dir

mkdir -p $Backup_dir/$IP_info


#tar backup data

cd /

tar -zchf $Backup_dir/$IP_info/system_backup_$(date +%F_week%w -d -1day).tar.gz ./var/spool/cron/root

./etc/rc.local ./server/scripts ./etc/sysconfig/iptables


#del 7 day data

find $Backup_dir -type f -mtime +7|xargs rm 2>/dev/null


#create finger file

find $Backup_dir/ -type f -mtime -1 ! -name "finger*"|xargs md5sum >$Backup_dir/$IP_info/fin

ger.txt


#backup push data info

rsync -az $Backup_dir/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password


web01服务器备份脚本:

#!/bin/bash

Backup_dir="/backup"

IP_info=$(hostname -I|awk {print $1})


#create backup dir

mkdir -p $Backup_dir/$IP_info


#tar backup data

cd /

tar -zchf $Backup_dir/$IP_info/system_backup_$(date +%F_week%w -d -1day).tar.gz ./var/spool/cron/root

./etc/rc.local ./server/scripts ./etc/sysconfig/iptables

tar -zchf /backup/$IP_info/www_backup_$(date +%F_week%w -d -1day).tar.gz ./var/html/www

tar -zchf /backup/$IP_info/logs_backup_$(date +%F_week%w -d -1day).tar.gz ./app/logs


#del 7 day data

find $Backup_dir -type f -mtime +7|xargs rm 2>/dev/null


#create finger file

find $Backup_dir/ -type f -mtime -1 ! -name "finger*"|xargs md5sum >$Backup_dir/$IP_info/fin

ger.txt


#backup push data info

rsync -az $Backup_dir/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password



服务端脚本:

#!/bin/bash


#del 180 day ago data

find /backup/ -type f -mtime +180 ! -name "*week1.tar.gz"|xargs rm 2>/dev/null


#check backup data

find /backup/ -type f -name "finger.txt"|xargs md5sum -c &>/tmp/check.txt


#send check mail

mail -s "验证信息 $(date +%F)" 1480451772@qq.com </tmp/check.txt


PS:测试检验脚本方法: sh -x 脚本信息


实现自动完成全网数据备份(定时任务)

客户端定时任务:

crontab -e

#backup data

0 0 * * * /bin/sh /server/scripts/backup.sh &>/dev/null


服务端定时任务:

crontab -e

#check backup data

0 5 * * * /bin/sh /server/scripts/backup_server.sh &>/dev/null


以上是关于rsync备份服务的主要内容,如果未能解决你的问题,请参考以下文章

RSYNC备份服务

如何使用 rsync 将 Windows 上的文件备份到 Linux 服务器上

Rsync备份服务

rsync备份服务器搭建部署

rsync备份

rsync服务的搭建