Rsync服务搭建
1、什么是Rsync
Rsync
是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。rsync
是用“rsync算法”
提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是一个免费开源的软件。
2、Rsync的三种工作模式
Local: rsync [OPTION...] SRC... [DEST]
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
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
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
由以上语法可知,rsync
有三种工作方式:
本地文件系统上实现本地同步,命令行语法格式为上述“Local”段的格式。
本地主机使用远程shell和远程主机通信。命令行语法格式为上述“Access via remote shell”段的格式。
本地主机通过网络套接字连接远程主机上的rsync daemon
。命令行语法格式为上述“Access via rsync daemon”
段的格式。
前两者的本质是通过管道通信,即使是远程shell。而方式3则是让远程主机上运行rsync
服务,使其监听在一个端口上,等待客户端的连接,默认端口为:873。
3、Rsync应用场景
关于数据同步的两种方式
1、推:所有主机推送本地数据至rsync
备份服务器,会导致数据同步缓慢(适合少量数据备份)
2、拉:Rsync
备份服务端拉取所有主机上的数据,会导致备份服务器开销大
3、异地备份实现思路
4、大量服务器备份场景
4、Rsync优缺点:
Rsync
优点:
增量备份,支持socker
(即套接字),集中备份
远程shell通道模式还可以加密(ssh)传输,安全性上比较可靠Rsync
缺点:
大量小文件同步的时候,对比时间长,有的时候,rsync
进程可能会停止。
同步大文件,比如10G
以上的大文件也会有问题。当网络出现波动的时候,就可能会造成同步中断。
5、Rsync命令常用选项
rsync命令参数比较多,我这边列举了经常会用到的:
-v 详细模式输出,传输时的进度等信息
-z 传输时进行压缩以提高传输效率
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgdl
--bwlimit=10 限制传输速度
--exclude=PATH 表示指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(如*.txt)
--delete 让目标目录和源目录数据保持一致
-L 会把软链接指向的目标文件复制到对端目录中
-e 指定使用ssh还是其他方式来数据同步
--password-file 指定密码文件所在的路径,可以让rsync(daemon模式)不需要密码来传输文件
--partial 断点续传
--exclude-from=file 文件名所在的目录文件
注意:rsync同步的时候,如果要同步的是目录里面的内容,命令中目录的后面必须要加“/”
如果要同步的是目录本身及其内容,则命令中只需写目录名
6、Rsync安装以及配置
(1)先安装rsync
yum -y install rsync
(2)rsync的配置文件在centos6上是没有的,但是centos7上默认就有配置文件,假如现在是centos6上进行安装,首先编辑一个文件
vim /etc/rsyncd.conf
#rsync_config
uid = rsync #用户的uid
gid = rsync #用户的gid
use chroot = no #安全相关的
max connections = 200 #最大连接数
timeout = 300 #超时时间
pid file = /var/run/rsyncd.pid #指定pid文件,这个文件的作用涉及服务的启动、停止等操作
lock file = /var/run/rsync.lock #锁文件
log file = /var/log/rsyncd.log #指定日志文件
[backup] #模块名称
path = /backup #服务器提供访问的目录
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 #指定密码文件,注意:该密码文件的权限一定要是600
(3)配置文件之后,需要自己创建一个用户rsync
useradd rsync -s /sbin/nologin -M #无法访问并且没有家目录
(4)开启rsync服务
rsync –daemon #centos6的启动方法
systemctl start rsyncd #centos7的启动方法
systemctl enable rsyncd #开机自启动
(5)ps -ef|grep rsync|grep -v grep #查看对应的进程有木有开启
(6) 创建共享目录并授权rsync服务管理
mkdir /backup
chown rsync:rsync /backup/
(7) 在编辑rsync的密码文件
vim /etc/rsync.password
rsync_backup:oldboy 虚拟用户:密码
(8) 接下来就是给这个密码文件更改权限
chmod 600 /etc/rsync.password
(9)查看对应的端口有木有开启
netstat -lntp|grep 873
(10)加入开机自启动
echo “/usr/bin/rsync –daemon”/etc/rc.local
tail -1 /etc/rc.local
#以上是centos6的配置
#这个是centos7的配置,除了配置文件不一样,其他一致
uid = rsync --- 指定管理备份目录的用户
gid = rsync --- 指定管理备份目录的用户组
port = 873 --- 定义rsync备份服务的网络端口号
fake super = yes --- 将rsync虚拟用户伪装成为一个超级管理员用户
use chroot = no --- 和安全相关的配置
max connections = 200 --- 最大连接数 同时只能有200个客户端连接到备份服务器
timeout = 300 --- 超时时间(单位秒)
pid file = /var/run/rsyncd.pid --- 记录进程号码信息 1.让程序快速停止进程 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 --- 指定认证用户密码文件 用户名称:密码信息
[backup] --- 模块信息
comment = "backup dir by oldboy"
path = /backup --- 模块中配置参数 指定备份目录
7、Rsync客户端配置
(1)安装rsync软件包
yum -y install rsync
(2)配置密码文件,并且修改权限
vim /etc/rsync.password
oldboy
chmod 600 /etc/rsync.password
(3)创建目录
mkdir -p /backup
(4)同步数据到服务端
rsync -avz /backup/ rsync_backup@172.16.1.100::backup/ --password-file=/etc/rsync.passwd
除了密码文件来实现免密,还可以在客户端通过设置RSYNC_PASSWORD环境变量实现密码自动输入
[root@iflytek-5 ~]# export RSYNC_PASSWORD=oldboy
[root@iflytek-5 ~]# rsync -avz /backup/ rsync_backup@172.16.1.100::backup/
排除单个文件:
rsync -avz –exclude=1 /backup/ rsync_backup@172.16.1.100::oldboy/
排除多个文件
rsync -avz –exclude={1,2} /backup/ rsync_backup@172.16.1.100::oldboy/
注意:密码文件和秘钥文件改成600不只是为了安全考虑,很多程序或者命令里面也要求必须是600,假如不配置600的话,会造成以下问题:
[root@nfs-41 backup]# rsync -avz /backup/* rsync_backup@10.0.0.31::backup/ --password-file=/etc/rsync.password
sending incremental file list
1.txt
2.txt
rsync: chgrp ".1.txt.9BRZ8L" (in backup) failed: Operation not permitted (1)
rsync: chgrp ".2.txt.Hp5ygX" (in backup) failed: Operation not permitted (1)
sent 144 bytes received 224 bytes 147.20 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
#以上问题虽然不影响推送,但是一直有报错,也很难受,所以上网找了一下,加下下面两个参数即可
[root@nfs-41 backup]# rsync -avz --no-o --no-g /backup/* rsync_backup@10.0.0.31::backup/ --password-file=/etc/rsync.password
sending incremental file list
1.txt
2.txt
sent 142 bytes received 62 bytes 31.38 bytes/sec
total size is 0 speedup is 0.00