Rsync文件备份同步

RSync 文件备份同步

什么是rsync?

官方文档

1
https://download.samba.org/pub/rsync/rsync.1

它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。

rsync 包括如下的一些特性:
1.可以镜像保存整个目录树和文件系统
2.容易做到保存原有的权限,owner,group,时间(修改时间,modify time),软硬链接
3.传输效率高,使用同步算法,只比较变化的
4.支持匿名传输,方便网站镜像

rsync的安装:

1
yum install rsync -y

配置文件:

rsync的主要有以下三个配置文件,文件默认有的不存在,请手动创建它
1.rsyncd.conf(主配置文件)
2.rsyncd.secrets(密码文件)
3.rsyncd.motd(rysnc服务器信息)

rsync 常用选项:
-v verbose(冗长模式;显示同步过程)
-a 归档模式传输并保持文件属性,包含以下选项
-r 递归
-l 保留软链接
-p 权限
-t 文件修改时间
-g 属组,保留特殊设备文件
-o 属主
-D 等于–devices –specials 表示支持b,c,s,p类型的文件(设备文件)
-R 保留相对路径
-H 保留硬链接
-X 保留扩展属性(特殊权限位,隐藏属性)
-A 保留acl权限

rsync命令的普通用法:

rsync -av /home/ /backup #本机上的同步,把/home目录下的内容同步到/backup目录下(包括隐藏文件)
rsync -av /home/ 192.168.224.10:/backup #把本地的/home目录内容,同步到远端10的/backup目录下

rsync -av 192.168.224.10:/backup/ /backup/ #把远端10的/backup目录下的内容同步到本地的/backup目录
(注意:路径写法的区别!原目录后面加不加/也影响你的同步目录;没加/,就是将目录本身同步过去;目录加/,就是将目录里的内容同步过去!)

最简单的目录同步方法:
如果远程主机的目录中有一个文件被删除了,可是使用命令将本机目录中内容进行同步!
rsync -aHAXv –delete /test/ /test2/

rsync本身不具备控制功能和日志记录功能,需要把rsync做成服务的形式,并加上一些控制功能或日志记录功能。
可以使用命令:# man rsyncd.conf 查看如何添加这些功能:

服务器端的配置:
1,第一步:

1
2
3
4
5
6
vim /etc/rsyncd.conf

motd file=/etc/rsyncd.welcome #定义指定的文件路径

[test] #参数组名称
path=/test #定义同步目录路径

vim /etc/rsyncd.welcome #手动建立自己定义的motd文件,并写上自定义的欢迎信息

1
****** ^_^ Welcome to use rsync!^_^ ******

2,第二步:
新增服务启动脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
yum install -y xinetd

vim /etc/xinetd.d/rsync

service rsync
{
disable = no #yes改为no 打开rsync服务功能
socket_type = stream
wait = no #yes改为no (其他不用管)
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}

第三步:

systemctl restart xinetd #重启服务

netstat -ntlup |grep 873 #服务端就会有873的端口在监听了
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 4080/xinetd

客户端的操作:

yum install -y rsync

rsync -v 192.168.224.10:: #查看10这个服务器同步路径名

1
2
3
4
****** ^_^ Welcome to use rsync!^_^ ******
******************************************* #这就是你rsyncd.welcome里写的欢迎内容

test #这个就是同步路径名

1
rsync -a 192.168.224.10::test /test1/

这样同步,是不需要密码的;注意notes为共享路劲名称,语法上在该名称前面有两个“:”!

没有密码有好处也有坏处,好处是不需要密码方便写脚本做远程同步。如果要密码写脚本就要用到expect自动应答。坏处就是不安全,但你可以使用iptables等来加强安全。

如果同步报permission denied这种错误,可能是服务端selinux没有关闭
iptables -F

关闭selinux的方法:
1,setenforce 0 –这是马上把selinux由强制模式改成警告模式
2, vim /etc/selinux/config
SELINUX=disabled –把这个改成disabled,然后需要重启电脑才能生效

rsync配置更加详细功能

在上面的基础上加上一些更加强大的功能

要求:

  1. 把日志记录到/var/log/rsyncd.log
    4种方式,xinetd:log_type(SYSLOG/FILE) rsyncd:log file和syslog facility

  2. 共享模块要求隐藏(也就是说客户端查看不到这个模块名(notes))
    list

  3. 同时只能1个客户端连接进行同步这个module(notes)
    2种方式,xinetd:instances rsyncd:max connections

  4. 只能允许192.168.224.11(ip你自定义)同步这个module
    2种方式,xinetd:only_from rsyncd:hosts allow

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12


    vim /etc/rsyncd.conf

    motd file=/etc/rsyncd.welcome

    [notes] #参数组名称
    path=/var/www/html #设置rsync同步文件路径
    list=false #隐藏共享模块名称(notes)
    max connections=1 #设置同一时间内最大的链接数
    log file=/var/log/rsyncd.log #设置指定的日志文件路径
    hosts allow=192.168.224.11 192.168.224.10 192.168.224.0/24 #设置允许的ip或网段

生产环境数据迁移实战

1
2
3
4
5
6
7
8
9
10
11
12
13
uid = root
gid = root
use chroot = yes
port 873
log file = /var/log/rsyncd.log
#允许的ip
hosts allow = 34.96.150.66

[fdfscp]

path = /data
read only = yes
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z

检查配置文件是否有格式错误,包括命令注释不能同行

迁移新服务器拉取

1
2
3
4
yum install -y rsync 

rsync -avz 47.91.247.66::fdfscp /data
把远程的fdfscp组定义的数据目录同步到本地的/data目录下。本地没有data目录,会自动创建。

实时同步

实现实时同步(也就是源目录中的内容发生变化,它就会触发同步,实现两边目录中内容完全相同)
inotify+rsync

软件名称:
inotify-tools
安装过程:

1
2
3
4
yum install -y epel-release
yum makecache fast

yum install -y inotify-tools

安装完后,就会产生下面两个命令
inotifywait

inotifywait –help
-m –monitor #监控
-r –recursive #目录和子目录都监控
-q –quiet #安静模式,尽可能少输出信息
-e –event #监控的事件,access,modify,attrib……

做测试:
测试本机/data目录里一有(增,删,改,属性改变),就会同步到/data2目录

使用下面的脚本来做

1
2
3
4
5
6
7
vim /tmp/1.sh

#!/bin/bash
inotifywait -mrq -e modify,delete,create,attrib,move /data |while read files
do
rsync -a --delete /data/ /data2/
done

输入以下命令,执行上面写的脚本!
nohup sh /tmp/1.sh &

再然后对/data进行各种操作,验证可以实时同步到/data2

实现双向的实时同步
也有相关的软件(比如unison)可以专门来做双向的实时同步
但我们就可以用inotify反向再做一次再写一个脚本也一样可以简单去实现


使用rsync的secrets file的方法做远程同步

例:
远程被同步端 本地同步端
192.168.224.11 192.168.224.10
我要实现把192.168.224.10上的/data/目录里的内容实时同步到192.168.224.11的/data2/目录

实现过程
第一大步:在远程被同步端192.168.224.11上操作
mkdir /data2/ #创建测试的同步目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vim /etc/rsyncd.conf
uid=root
gid=root
#这里指定使用root身份同步,否则默认使用nobody用户(这样你需要把/data2/目录改成757的权限,才有权限写)

[testsource]
path=/data2/
ignore errors
#服务级别给写权限
read only=no
#验证的用户取名为test
auth users=test
secrets file=/etc/rsyncd.secrets
#验证用户test的用户名和密码的存放文件,此文件需要同步端和被同步端都要有(这样我们就可以用这种方式来进行验证,而不需要远程的ssh密码验证了)

hosts allow=192.168.224.10
#进一步加强安全,只允许192.168.224.10同步

vim /etc/rsyncd.secrets 创建这个密码文件,用户名要与上面的auth users指定的一致,密码随意(我这里以321来测试)

1
test:321

chmod 600 /etc/rsyncd.secrets

#为了安全性,把权限改成600,只让root读写(很多其它软件的密码文件也会要求你改成600权限)

vim /etc/xinetd.d/rsync
disable = no #disable 后面值由yes改为no

systemctl restart xinetd #重启服务
chkconfig xinetd on #设置开机自动启动

第二大步:在本地同步端192.168.224.10上操作
先安装inotify软件,步骤参照上面过程,这里省略

mkdir /data/ #创建测试的同步目录

vim /etc/rsyncd.secrets #也要创建这个密码文件,里面只写密码就可以了。用户我们在后面的脚本里的命令里指定
321
chmod 600 /etc/rsyncd.secrets #也改成600的权限

vim /bin/rsync.sh #脚本及其内容

1
2
3
4
5
#!/bin/bash
inotifywait -mrq -e modify,delete,create,attrib,move /data |while read files
do
rsync -a --delete --password-file=/etc/rsyncd.secrets /data/ test@192.168.224.11::testsource
done

chmod 755 /bin/rsync.sh

nohup sh /bin/rsync.sh & #挂后台执行

vim /etc/rc.local #加到rc.local里让其开机自动执行
nohup sh /bin/rsync.sh &

第三步:测试
在192.168.224.10的/data目录中进行任何的操作,然后去192.168.224.11的/testsource目录中查看是否成功同步!

评论


:D 一言句子获取中...

加载中,最新评论有1分钟缓存...