远程同步软件rsync(一)
rsync是一款开源的备份工具,可以在不同主机之间进行同步(windows和Linux之间Mac和LinuxLinux和Linux)可实现全量备份与增量备份,因此非常适合用于架构集中式备份或异地备份等应用。为什么要做备份数据非常的重要保证数据不丢失便于快速的恢复能不能不做备份可以,对于不是特别重要的数据可以不考虑备份怎么做scp网络之间的拷贝,全量拷贝的方式(ssh协议)rsync远程同步(增量)
文章目录
1. RSYNC概述
rsync是一款开源的备份工具,
可以在不同主机之间进行同步(windows和Linux之间 Mac和Linux Linux和Linux)
可实现全量备份与增量备份,因此非常适合用于架构集中式备份或异地备份等应用。
-
为什么要做备份
- 数据非常的重要
- 保证数据不丢失
- 便于快速的恢复
-
能不能不做备份
- 可以,对于不是特别重要的数据可以不考虑
-
备份怎么做
- scp 网络之间的拷贝,全量拷贝的方式 (ssh协议)
- rsync 远程同步(增量)
-
备份的方式
- 完全备份,每次都进行全部备份 (效率低下, 占用空间)
- 增量备份,仅备份客户端与服务端差异的部分 (提高备份效率,节省空间, 适合异地备份 )
2. RSYNC传输模式
2.1 本地传输
类似于使用cp命令
语法格式: 命令 选项 源文件 目标文件
举个例子: 将本地/root/1.txt传到/opt下
命令: rsync -avz /root/1.txt /opt/
2.2 远程传输
通过网络传输 a–>b
语法格式:
推送 : Push: rsync [OPTION…] SRC… [USER@]HOST:DEST
拉取 : Pull: rsync [OPTION…] [USER@]HOST:SRC… [DEST]
举个例子:
(1)推送方式: 将本地的/etc/passwd文件,推送到172.16.1.41服务器的tmp目录下,使用的是41的root用户身份
命令: rsync -avz /etc/passwd root@172.16.1.41:/tmp
(2)拉取方式: 本地nfs服务器下载172.16.1.41服务器/etc/services这个文件,至本地当前目录下,使用的是41的系统用户root身份
命令: rsync -avz root@172.16.1.41:/etc/services ./
2.3 守护进程
运行一个服务一直在后台,充当备份服务器。
2.3.1 RSYNC安装
yum install rsync -y
2.3.2 RSYNC配置
(1)修改配置文件
[root@backup ~]# cat /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]
comment = welcome to oldboyedu backup!
path = /backup
配置文件详解
[root@backup ~]# vim /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服务用户连接认证密码文件路径
[backup] # 定义模块信息
comment = commit # 模块注释信息
path = /backup # 定义接收备份数据目录
(2)创建rsync进程启动时需要使用的用户:
[root@backup ~]# useradd rsync -M -s /sbin/nologin
[root@backup ~]# id rsync
uid=1000(rsync) gid=1000(rsync) groups=1000(rsync)
(3)创建密码文件,在密码文件中写入对应的虚拟用户以及虚拟用户的密码,/etc/rsync.passwd—》rsync虚拟用户以及rsync虚拟用户的密码
[root@backup ~]# echo "rsync_backup:123456" > /etc/rsync.passwd
[root@backup ~]# chmod 600 /etc/rsync.passwd
(4)创建存储备份数据的目录,并进行授权
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup/
2.3.3 RSYNC启动
启动rsync服务并加入开机自启动,并检测rsync端口号873
[root@backup ~]# systemctl start rsyncd.service
[root@backup ~]# systemctl enable rsyncd
[root@backup ~]# netstat -lntp
3. 客户端测试
3.1 客户端测试
命令语法格式:
下载 Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
上传 Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
客户端推送: 把客户端中的/etc目录推送到服务端的backup模块下的/backup目录 ((注意加/ 和不加/的区别))
[root@nfs ~]# rsync -avz /etc/ rsync_backup@172.16.1.41::backup #推送/etc/下面的内容
[root@nfs ~]# rsync -avz /etc rsync_backup@172.16.1.41::backup #推送/etc这个目录
客户端拉取: 拉取服务端172.16.1.41的backup目录下面的所有内容至本地的 /opt目录
rsync -avz rsync_backup@172.16.1.41::backup /opt
注意事项:
rsync_backup:客户端通过该虚拟用户连接rsync服务
是一个虚拟用户,由服务端的配置文件中定义【auth users】
通常存放在指定的一个文件中,该文件也是有服务端配置文件定义【secrets file】
rsync:【模块对应的目录,必须授权为配置文件中定义的uid和gid的用户】
用于运行rsync服务时需要使用到的系统用户
用于将接收到的数据以自己的身份写入到对应的目录中
自我总结:
(1)这个rsync_backup这个用户是存在这个服务中的,没有在/etc/passwd中,就只是用来密码验证的。
(2)rsync 必须是手动创建的,这个用户是由是用来用来接收客户端推送过来的数据,然后写入/backup/目录的
3.2 无差异同步
实现客户端与服务端无差异同步:–delete
#推送方式实现无差异,以客户端为准,客户端有什么服务端就有什么
[root@nfs ~]# rsync -avz --delete /root rsync_backup@172.16.1.41::backup
#拉取方式实现无差异,以服务端为准,服务端有什么客户端就有什么
[root@nfs ~]# rsync -avz --delete rsync_backup@172.16.1.41::backup /opt/
3.3 传输限速
(1)生成一个大文件,进行传送测试:
[root@nfs ~]# dd if=/dev/zero of=./size.disk bs=1M count=500 生成大文件
(2)限制传输的速率为1MB :
[root@nfs ~]# rsync -avzP --bwlimit=1 ./size.disk rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
size.disk
118,358,016 22% 1.01MB/s 0:06:33
(3)取消每次传输时需要输入密码【客户端才会配置】
方式一:
[root@nfs ~]# echo "123456" > /etc/rsync.pass
[root@nfs ~]# chmod 600 /etc/rsync.pass 上该文件找123456
[root@nfs ~]# rsync -avzP --bwlimit=1 ./size.disk rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.pass
方式二:
[root@nfs ~]# export RSYNC_PASSWORD=123456
[root@nfs ~]# rsync -avzP ./size.disk rsync_backup@172.16.1.41::backup
4. RSYNC参数详情
rsync参数:-avz
-a #归档模式传输, 等于-tropgDl
-v #详细模式输出, 打印速率, 文件数量等
-z #传输时进行压缩以提高效率
-r #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t #保持文件时间信息
-o #保持文件属主信息
-p #保持文件权限
-g #保持文件属组信息
-l #保留软连接
-P #显示同步的过程及传输时的进度等信息
-D #保持设备文件信息
-L #保留软连接指向的目标文件
-e #使用的信道协议,指定替代rsh的shell程序 ssh
--exclude=PATTERN #指定排除不需要传输的文件模式
--exclude-from=file #文件名所在的目录文件
--bwlimit=100 #限速传输 ------常用
--partial #断点续传
--delete #让目标目录和源目录数据保持一致 ----常用
5. 自我总结
(1) 权限问题
uid = rsync、gid = rsync都改为www,这个uid和gid只是名字不同而已,只要是/etc/passwd中存在一个名字叫www用户即可,为了和后面的的nfs用户一直,把uid和gid都改为666.这样可以防止权限不足。在生产中也是统一一个用户。
(2)知识点梳理
rsync 远程同步
rsync能实现远程备份
rsync远程传输方式和守护进程方式区别?
临时
周期性任务
保证客户端与服务端数据一致?
--delete参数
限制推送传输的速率?
--bwlimit 限速
-P 显示速率
rsync守护进程配置?
安装
配置
启动
rsync进程运行的用户和rsync_backup虚拟用户区别?
rsync_backup:用于提供给客户端远程连接,这个虚拟用户在/etc/passwd中不存在,这个是服务自带的,用于验证的
rsync:是否往本地服务器写入客户端推送过来的数据,这个用户需要自己创建,再/etc/passwd中存在
[root@nfs ~]# telnet 172.16.1.41 873
Trying 172.16.1.41...
telnet: connect to address 172.16.1.41: Connection refused #端口不可达
[root@nfs ~]# telnet 172.16.1.41 873
Trying 172.16.1.41...
telnet: connect to address 172.16.1.41: No route to host #防火墙拦截
#当rsync服务端没有创建数据存放的目录时,则会出现如下提示
[root@nfs ~]# sh /server/scripts/client_push_data.sh
@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]
2019/01/07 08:57:33 [1272] rsync: chdir /backup failed
: No such file or directory (2)
#用户密码不对,或权限不是600
[root@nfs ~]# sh /server/scripts/client_push_data.sh
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]
更多推荐
所有评论(0)