运维之道 | Linux rsync 文件同步、Inotify远程实时同步

Linux rsync 文件同步服务器

与传统的cp、scp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。

一、安装rsync

[root@localhost src]# wget https://download.samba.org/pub/rsync/src/rsync-3.1.3.tar.gz
[root@localhost src]# tar -xf rsync-3.1.3.tar.gz
[root@localhost src]# cd rsync-3.1.3/
[root@localhost rsync-3.1.3]# ./configure --prefix=/usr/local/rsync
[root@localhost rsync-3.1.3]# make && make install

二、配置rsync

rsync服务器端需要两个配置文件:rsyncd.confrsyncd.password

其中rsyncd.conf默认存放在/etc/目录下,同时它也是rsync服务器的主配置文件。该文件配置了rsync服务器的控制认证、访问、日志记录等等。而rsyncd.password主要用于存储rsync用户名和密码。

但是在rsync安装完毕后后是不会生成以上这两个配置文件的,需要我们手工进行创建。

rsync服务端配置

1、服务端rsyncd.conf配置文件内容如下:
uid = root
# `root使用的用户`
gid = root
# `root使用的用户组(用户所在的组)`
user chroot = no
# `如果为true,daemon会在客户端传输文件前“chroot to the path”。这是一种安全配置,因为我们大多数都在内网,所以不配也没关系`
max connections = 200
# `设置最大连接数,默认0,意思无限制,负值为关闭这个模块`
timeout = 600
# `默认为0,表示no timeout,建议300-600(5-10分钟)`
pid file = /var/run/rsyncd.pid
# `rsync daemon启动后将其进程pid写入此文件。如果这个文件存在,rsync不会覆盖该文件,而是会终止`
lock file = /var/run/rsyncd.lock
# `指定lock文件用来支持“max connections”参数,使得总连接数不会超过限制` 
log file = /var/run/rsyncd.log
# `不设或者设置错误,rsync会使用rsyslog输出相关日志信息`

[backup]
# `这里就是模块名称,需用中括号扩起来,起名称没有特殊要求,但最好是有意义的名称,便于以后维护` 
path = /root/backup/
# `这个模块中,daemon使用的文件系统或目录,目录的权限要注意和配置文件中的权限一致,否则会遇到读写的问题`
ignore errors
# `忽略I/O错误` 
read only = no
# `指定客户端是否可以上传文件,默认对所有模块为true` 
list = no
# `是否允许客户端可以查看可用模块列表,默认为可以`
hosts allow = 192.168.182.0/255.255.255.0
# `指定可以联系的客户端主机名或和ip地址或地址段,默认情况没有此参数,即都可以连接` 
auth users = test
# `指定不可以联系的客户端主机名或ip地址或地址段,默认情况没有此参数,即都可以连接`
secrets file = /etc/rsyncd.password
# `指定用户名和密码存放的文件,格式;用户名;密码,密码不超过8位` 

rsync默认是在nobody用户下运行的,但是我们为了以后同步时不为各种权限的事情烦恼,就让其在root用户下运行。

2、创建password文件,并授权
[root@localhost etc]# echo "test:test">>/etc/rsyncd.password

注意:该密码文件中的用户和密码可以进行自定义,同时该用户不一定要在服务器中的系统用户存在。
密码文件创建完毕后,要把其权限要设置为600,否则会在以后同步时提示验证出错。如下:

[root@localhost etc]# chmod 600 /etc/rsyncd.password
3、创建认证模块,并授权

一个rsync配置文件中可以包含多个认证模块,同时一个密码文件中也可以存放多个用户和其对应的密码。其中每一个认证模块可以对应不同的客户端。

以上两个文件创建完毕后,我们来创建其对应的目录并授权,如下:

[root@localhost etc]# mkdir /backup
[root@localhost etc]# chown root:root -R /backup/

以上就是rsync服务器端的配置。


rsync客户端配置

rsync客户端配置与服务器端相比差别还是比较大的。

在客户端安装完毕rsync服务后,是不需要启动rsync服务的。
我们只需要在客户端创建连接rsync服务器时,验证码用户所需要的密码文件即可

该密码文件中的密码要与rsync服务器上的密码文件中的密码对应,并且也要与rsync服务器rsyncd.conf配置文件中的认证模块中的用户匹配。

当然该密码文件不创建也是可以的,不创建的话。我们在执行rsync操作时,就需要输入rsync的对应用户的密码。如下:

[root@localhost etc]# echo "test">>/etc/rsyncd.password
[root@localhost etc]# chmod 600 /etc/rsyncd.password

注意:该密码文件中只能存放一个用户的密码,并且该文件与rsync服务器端的密码文件一样也需要把其权限设置为600。


三、rsync的启动与关闭

启动rsync服务

rsync-daemon认证方式,需要服务器和客户端都安装rsync服务,并且只需要rsync服务器端启动rsync,同时配置rsync配置文件,客户端启动不启动rsync服务。

在此我们只讲解rsync-daemon认证方式的启动。如果是源码方式安装的rsync,我们可以使用rsync –daemon来启动rsync。如下:

[root@localhost ~]# echo PATH=$PATH:/usr/local/bin/>>/etc/profile
[root@localhost ~]# source /etc/profile
[root@localhost ~]# rsync --daemon
[root@localhost ~]# ps aux |grep rsync
[root@localhost ~]# netstat -tunlp |grep 873

注意:上述命令行中,只有rsync --daemon才是启动rsync的命令。并且该命令启动时,会默认加载/etc/rsyncd.conf文件。

所以如果rsync的配置文件不在/etc目录下或者rsync配置文件名不为rsyncd.conf,那么我们在启动rsync服务时,就要手工加上该配置文件的完整路径。方法如下:

[root@localhost ~]# rsync --daemon --config=/etc/rsyncd.conf
关闭rsync服务

关闭rsync服务,如果是源码方式安装的,我们可以直接通过pkill rsync命令进行关闭。如下:

[root@localhost ~]# pkill rsync

四、rsync命令参数详解

rsync几个重要参数
  • -v, --verbose详细模式输出。
  • -a, --archive归档模式,表示以递归方式传输文件,并保持所有文件属性不变。
  • -z, --compress对备份的文件在传输时进行压缩处理。
  • –delete:删除那些DST中存在而在SRC中没有的文件。
rsync六种工作模式

这六种模式总体上可以用两个词进行区分:推送、拉取。
推送就是在客户端上执行rsync命令,目的是把客户端需要同步的文件推送到服务器上。
拉取也是在客户端上执行rsync命令,目的是把服务器上的文件拉取到本地。
注意:无论是推送和拉取,rsync命令都是在客户端执行,只是命令的格式不同而已。

  • rsync [OPTION]... SRC [SRC]... DEST
    同步本地文件,从一个目录同步到另外一个目录。
[root@localhost ~]# rsync -avz /data  /backup

表示把本地/data目录下的文件同步到本地/backup目录下。


  • rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
    使用一个远程shell程序(如rsh、ssh)来实现把本地的文件同步到远程机器上。此种方式属于推送方式。
[root@localhost ~]# rsync -avz /data test@192.168.199.247:/backup

表示把本地/data目录下的文件同步到服务器192.168.199.247的/backup目录下。


  • rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST (最常用)
    把本地的文件同步到远程服务器上,其中DEST表示的是rsync服务器的认证模块名。此种方式属于推送方式。
[root@localhost ~]# rsync -avz /data test@192.168.199.247::backup --password-file=/etc/rsyncd.password

表示把本地/data目录下的文件同步到服务器192.168.199.247的backup模块下path路径下。


  • rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
    列出远程机器的文件列表。这类似于ls命令,不过只要在命令中省略掉本地机信息即可。
[root@localhost ~]# rsync -v rsync://test@192.168.199.247/backup

表示在本机列出服务器192.168.199.247的/backup目录下的内容,


  • rsync [OPTION]... [USER@]HOST:SRC [DEST]
    把远程机器的文件同步到本地,此种方式属于拉取方式。
[root@localhost ~]# rsync -avz test@192.168.199.247:/backup /data

表示把192.168.199.247的/backup目录下文件同步到本地/data目录下。


  • rsync [OPTION]... [USER@]HOST::SRC [DEST] (常用)
    把远程机器的文件同步到本地,此种方式属于拉取方式。
[root@localhost ~]# rsync -avz test@192.168.199.247::backup --password-file=/etc/rsyncd.password /data

表示把192.168.199.247的backup模块path路径下的文件同步到本地/data目录下。


五、rsync同步实例

服务端
  • 在/root/backup目录(模板)下创建测试文件
[root@localhost backup]# pwd
/root/backup
[root@localhost backup]# ll
总用量 0
drwxr-xr-x. 2 root root 6 1230 18:33 1.txt
drwxr-xr-x. 2 root root 6 1230 18:33 2.txt
drwxr-xr-x. 2 root root 6 1230 18:33 3.txt
drwxr-xr-x. 2 root root 6 1230 18:33 4.txt
客户端
  • 客户端同步服务端文件
[root@localhost backup]# rsync -aP --delete test@192.168.182.129::backup /root/backup --password-file=/etc/rsyncd.password
receiving incremental file list
./
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=5/7)
1.txt/
2.txt/
3.txt/
4.txt/

六、Rsync+Inotify远程实时同步

192.168.182.129:同步端
192.168.182.130:被同步端,脚本存放处

1、配置rsync ssh免秘钥登录传输
[root@localhost ~]# ssh-keygen   ///创建密钥
回车...
[root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub 192.168.182.130

在提示输入文件密码时,直接按回车,采用空密码


192.168.182.130端

2、安装inotify文件监控

文件监控可以配合rsync实现文件自动同步,例如监听某个目录,当文件变化时,使用rsync命令将变化的文件同步。(可用于代码自动发布)

inotify-tools工具下载

[root@localhost ~]# cd inotify-tools-3.14
[root@localhost inotify-tools-3.14]# ./configure
[root@localhost inotify-tools-3.14]# make
[root@localhost inotify-tools-3.14]# make install
3、调整inotify内核参数
[root@localhost ~]# vim /etc/sysctl.conf

fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

使调整inotify内核参数命令立刻生效:sysctl -p

4、编写触发式脚本
#!/bin/sh
src=/root/backup
des=/root/backup
ip=192.168.182.129
inotifywait -mrq -e modify,create,attrib,move,delete ${src} | while read file
     do
                for i in $ip
                       do
                       rsync -aP --delete --password-file=/etc/rsyncd.password $src test@$ip::backup
                       done
     done                 
5、执行脚本测试
  • 192.168.182.130终端上执行脚本,并创建文件
[root@localhost ~]# ./inotify_rsync.sh
[root@localhost backup]# touch villian.txt
  • 192.168.182.129终端上可同步该文件
[root@localhost backup]# ll
总用量 0
-rw-r--r--. 1 root root 0 1230 22:39 villian.txt
6、添加开机自动后台自动运行
[root@localhost ~]# vi /etc/profile
/bin/bash /root/inotify_rsync.sh &

转载至:https://blog.csdn.net/rorntuck7/article/details/86666699
转载至:https://blog.51cto.com/13444271/2113632

发布了97 篇原创文章 · 获赞 10 · 访问量 3390

猜你喜欢

转载自blog.csdn.net/VillianTsang/article/details/103758962
今日推荐