rsync同步服务

TOC

什么是rsync?

rsync英文称为remote synchronizetion,rsync简称叫做远程同步,rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似于ssh带的scp命令和cp命令的集合,它优于scp命令和cp命令的功能,rsync支持全量和增量,rsync还可以在本地主机不通过目录之间同步。

rsync命令

命令格式:
远程拉取:rsync【选项】【用户名】@【地址:文件路径】【本地存放路径】
远程推送:rsync【选项】【本地推送文件】【用户名】@【地址:文件路径】
-a:归档模式传输, 等于-tropgDl -t -r -o -p -g -D -l
-v:详细模式输出, 打印速率, 文件数量等
-z:传输时进行压缩以提高效率
-r:递归传输目录及子目录,即目录下得所有目录都同样传输
-t:保持文件时间信息
-o:保持文件属主信息
-p:保持文件权限
-g:保持文件属组信息
-l:保留软连接
-P:显示同步的过程及传输时的进度等信息
-D:保持设备文件信息
-L:保留软连接指向的目标文件
-e:使用的信道协议,指定替代rsh的shell程序
–exclude=PATTERN:指定排除不需要传输的文件
–exclude-from=file:排除不需要的文件
–bwlimit=100:限速传输
–partial:断点续传
–delete:让目标目录和源目录数据保持一致
–password-file=xxx:使用密码文件
–port:指定端口传输
实例例子:
1.推送本地test.txt文件到192.168.31.101的/test目录下

rsync -avz test.txt root@192.168.31.101:/test

2.拉取192.168.31.101的/test目录下的test.txt到本地的/data目录

rsync -avz root@192.168.31.101:/test/test.txt /data/

rsync配置文件

cat /etc/rsyncd.conf
---------------------------------------------
uid = rsync                         #启动服务的用户id
gid = rsync                         #启动服务用户的组id
port = 873                          #服务默认监听端口
address = 0.0.0.0                   #服务地址绑定
fake super = yes                    #无须使用root用户启动
use chroot = no                     #安全机制
max connections = 200               #最大连接数
timeout = 600                       #超时时间
ignore errors                       #忽略错误
list = false                        #查看模块列表
log file = /var/log/rsyncd.log      #日志文件
pid file = /var/run/rsyncd.pid      #pid文件
[backup]                            #定义模块
comment = this is backup!      #模块的备注
path = /backup                 #服务器真实的路径
#程序在进行压缩时不要压缩 `.gz`、`.bz2`、`.tgz`、`.zip`、`.rar` 等文件格式
dont compress = *.gz *.bz2 *.tgz *.zip *.rar
read only = false                   #只读权限
auth users = rsync_backup           #定义虚拟用户
secrets file = /etc/.rsync.db    #定义存储虚拟用户的密码文件

守护进程传输模式

为什么要使用守护进程传输模式?
rsync在传输过程中使用的是系统用户和密码非常不安全,使用普通用户,权限问题又很麻烦,所以我们使用守护进程传输模式
命令格式:
远程拉取:rsync【选项】【虚拟用户】@【地址:模块】【本地存放路径】
远程推送:rsync【选项】【本地推送文件】【虚拟用户】@【地址:模块】
使用守护进程传输模式步骤:
服务端:
1.创建用户

useradd -M -s /sbin/nologin rsync

2.创建编辑密码文件
注意:密码中不能有空格

echo "rsync_backup:123456" > /etc/.rsync.db
chmod 600 /etc/.rsync.db

3.创建模块的备份目录

mkdir /backup

4.授权模块的备份目录

chown -R rsync.rsync /backup

5.编辑配置文件

vim /etc/rsyncd.conf
-------------------------------
auth users = rsync_backup         #定义虚拟用户
secrets file = /etc/.rsync.db  #定义虚拟用户的密码
[backup]                       #定义模块
comment = this is backup!      #模块的备注
path = /backup                 #服务器真实的路径

客户端:
拉取或者推送文件

#推送文件
rsync -avz test.txt rsync_backup@192.168.31.101::backup
#拉取文件
rsync -avz rsync_backup@192.168.31.101::backup ./

rsync客户端密码方法

1.自己手动输入密码

[root@test1 ~]# rsync -avz test.txt rsync_backup@192.168.31.101::backup
Password: 123456

2.指定密码文件的方式

#创建密码文件
echo "123456" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
#指定密码文件
rsync -avz test.txt rsync_backup@192.168.31.101::backup --password-file=/etc/rsync.passwd

3.添加环境变量

export RSYNC_PASSWORD=123456
rsync -avz test.txt rsync_backup@192.168.31.101::backup

rsync其他选项使用

如果你在同步的过程中不想同步模块中或者目录中的某个目录或者文件可以用–exclude或者–exclude-from选项,如果是多个的话,使用多个选项来依次罗列即可

排除某个目录

比如除了test1和test2目录其余全部同步

rsync -avz rsync_backup@192.168.31.101::backup ./backup --exclude='test1' --exclude='test2' --password-file=/etc/rsync.passwd

排除某个文件

除了test.txt文件其余全部同步

rsync -avz rsync_backup@192.168.31.101::backup ./backup --exclude-from='test.txt' --password-file=/etc/rsync.passwd