02上 架构——备份服务器Rsync
1.什么是备份
备份就是将重要的数据或文件复制一份保存到另一个地方,实现不同主机之间的数据同步。
2.什么情况下需要备份
一般数据比较重要的情况下,数据如果丢失很容易找不回来了的,建议备份。
3.能不能不做备份
对于重要的数据一定要备份
对于不重要的数据可以不备份或备份一部分
4.备份的工具
本地备份工具:cp
远程备份工具:scp、Rsync
scp :全量备份
Rsync:增量备份
二、scp备份
1、概念及参数
Linux scp 命令用于 Linux 之间复制文件和目录。
scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。
scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。
2 scp的格式
2.1、推数据
将本机的文件上传到其他服务器
scp [参数] [本机文件的路径] [用户]@[ip]:[远程主机的路径]
2.2、拉数据
将其他服务器上的文件下载到本机
scp [参数(非必选)] [用户]@[ip]:[远程主机的路径] [本机文件的路径]
3、scp中参数
-p : 保留原文件的修改时间,访问时间和访问权限。
-r: 递归复制整个目录。
-l: limit 限定用户所能使用的带宽,以Kbit/s为单位。
3 案例
案例1:将DB01服务器上etc目录中所有的普通文件打包,备份到rsync服务器的/tmp目录中
[root@db01 ~]#tar -cvPf /root/etc.tar.gz $(find /etc/ -type f)
[root@db01 ~]# scp /root/etc.tar.gz root@172.16.1.41:/tmp/
案例2:要求rsync服务器主动备份db服务器的etc.tar.gz
[root@rsync tmp]# scp root@172.16.1.51:/root/etc.tar.gz /tmp/
案例3:要求备份etc.tar.gz文件,且时间尽可能不改变
[root@db01 ~]# scp -p etc.tar.gz root@172.16.1.41:/tmp/
案例4:要求将db01的/root目录上传到rsync的/opt目录中
[root@db01 ~]# scp -r /root/ root@172.16.1.41:/opt/
三、rsync服务介绍:rsync是远程增量文件备份工具
1.简介
rsync英文称为remote synchronizetion,
从软件的名称就可以看出来,
rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能
rsync官方地址:rsync
rsync监听端口:873
rsync运行模式:C/S client/server
rsync简称叫做远程同步,可以实现不同主机之间的数据同步,还支持全量和增量
2.rsync特性
支持拷贝特殊文件,如连接文件、设备等。
可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 –p。
可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)。
可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)。
可以通过socket(进程方式)传输文件和数据(服务端和客户端)。
支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像。
3、Rsync应用场景
cron + rsync : 跟定时任务进行绑定。
rsync + innotify : 以守护进程的方式同步文件
1)全量备份:将数据完整的复制一份保留下了
2)增量备份:备份上一此备份后新增的数据
4.rsync的传输方式
push 推 | 客户端将数据从本地推送至服务端 |
---|---|
pull 拉 | 客户端将数据从服务端拉取到本地 |
5.Rsync的传输模式
本地传输模式
远程传输模式
以守护进程的方式
1、本地传输模式
1.1、格式
rsync [参数] [原来的路径] [现在的路径]
1.2、参数
-t # 保持文件时间信息
-r # 递归传输目录及子目录
1.3 案例
案例1:将/tmp/etc.tar.gz上传到/mnt目录下
rsync /tmp/etc.tar.gz /mnt/
案例2:将/root目录传输到/mnt目录
rsync -r /root/ /mnt/
2、远程传输模式
常用的参数组合:-avzP
2.1、推数据
rsync [参数] [本地文件路径] [用户]@[ip]:[远程路径]
案例:将3.txt传输到db01服务器上的/opt目录
2.2、拉数据
rsync [参数] [用户]@[ip]:[远程路径] [本地文件路径]
案例:拉取db01服务器上的3.txt 拉到/root目录下
3、以守护进程的方式
3.1、为什么需要以守护进程的方式传输
保证数据安全:rsync传输时,使用的是系统用户和系统用户的密码,非常的不安全
使用普通用又会出现权限问题
数据归档
3.2、步骤
部署服务端:rsync
1、编写rsync的守护进程的配置文件
1.1、编写配置文件
vi /etc/rsyncd.conf
原来的内容全删,新增下面内容:
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup] # 备份的模块(backup是模块的名称)(可以是其他名字)
comment = welcome to oldboyedu backup!
path = /backup # 备份的路径
1.2、创建rsync的启动用户
useradd rsync -r -M -s /sbin/nologin
-M 不要自动建立用户的登入目录
1.3、创建密码文件
touch /etc/rsync.passwd
1.4、创建用户和密码关联数据
echo 'rsync_backup:123456' > /etc/rsync.passwd
1.5、授权密码文件
chmod 600 /etc/rsync.passwd
2、创建备份的目录
2.1、创建目录
mkdir /backup
2.2、将目录的用户修改成rsync
chown rsync.rsync /backup/
3、启动rsync服务
systemctl start rsyncd
部署客户端:db01
1、安装rsync
yum install rsync -y
2、开始传输
2.1、输入密码传输
rsync -avzP /opt/3.txt rsync_backup@172.16.1.41::backup
2.2、使用密码文件
echo "123456" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
rsync -avzP /opt/3.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd
2.3、使用变量的方式进行传输
export RSYNC_PASSWORD=123456
rsync -avzP /opt/3.txt rsync_backup@172.16.1.41::backup
rsync常见报错:
知识储备:
对 /sbin/nologin 的理解:
系统账号的shell使用 /sbin/nologin ,此时无法登陆系统,即使给了密码也不行。
所谓“无法登陆”指的仅是这个用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源。
举例来说,各个系统账号中,打印作业有lp这个账号管理,www服务器有apache这个账号管理,他们都可以进行系统程序的工作,但就是无法登陆主机而已。
2:Rsync结合inotify
怎样实现rsync根据目录的变化去实时同步数据。
inotify就是实时监控目录中文件的变化。
1、安装inotify(客户端)
yum -y install inotify-tools
2、inotify常用参数
3、测试inotify监控目录
inotifywait -mr --format "%Xe %w %f" -e modify,close_write,create,delete [监控的目录]
4、实时同步/opt目录
inotifywait -mr --format "%Xe %w %f" -e modify,close_write,create,delete /opt/ |
while read line ;do rsync -avzP /opt/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd ; done
5、使用shell脚本实时同步/opt目录
家目录下编写脚本:
vi inotify.sh
输入以下内容
DIR=/opt/
USERNAME=rsync_backup
IP="172.16.1.41"
MODULE=backup
inotifywait -mr --format "%Xe %w %f" -e modify,close_write,create,delete ${DIR} |
while read line ;do rsync -avzP ${DIR} ${USERNAME}@${IP}::${MODULE} --password-file=/etc/rsync.passwd &>/dev/null; done
增加可执行权限:
chmod +x inotify.sh
运行脚本:
./inotify.sh
知识储备: