Ubuntu通过rsync和inotify实现双机热备

本文介绍了如何利用Rsync和Inotify在两台服务器之间实现文件的实时备份和热备。首先在备份机上安装和配置rsync,包括修改配置文件、创建密码文件、启动服务。然后在主服务器上进行相同的操作,并测试连接和数据备份。接着设置定时备份任务,并利用Inotify实现文件变动时的即时备份。最后,文章列举了一些rsync命令的常用参数和可能遇到的错误及解决方案。
摘要由CSDN通过智能技术生成

Rsync + Inotify双机热备

一、备份机操作

备份机:主服务器或主机文件将需要备份的文件同步到此服务器上,即从主服务器上同步过来进行备份。

1.1安装rsync

sudo apt-get install rsync

1.2修改/etc/dault/rsync文件

sudo vim /etc/default/rsync

修改如下部分:
RSYNC_ENABLE=true(默认为false)
RSYNC_CONFIG_FILE=‘/etc/rsync/rsyncd.conf’(指定rsync配置文件路径,默认为/etc/rsyncd.conf,也可以使用默认)
在这里插入图片描述

1.3方便管理rsync配置文件,新建文件夹rsync

sudo mkdir -p /etc/rsync/

1.4建立密码文件rsync.secrets

密码文件是双机同步时认证的关键,两机密码需要相同。

cat > /etc/rsync/rsyncd.secrets << EOF
> #/etc/rsync/rsyncd.secrets
> www-data:123456
> EOF

创建完用户名为www-data,密码为123456的文件后,需要给该文件设置权限(必须设置)

chmod 600 /etc/rsync/rsyncd.secrets

1.5拷贝文件rsyncd.conf,并自定义修改内容

cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/rsync/

usr下的rsyncd.conf是自带的模板文件,自己使用需要修改

vim /etc/rsync/rsyncd.conf
# 日志文件路径
log file=/var/log/rsyncd
# pid文件
pid file=/var/run/rsyncd.pid
# 模块名称(重要)
[www-data]
comment = public archive
# 备份文件的存储路径,需要确保存在(重要)
path = /var/www/pub
use chroot = yes
# 最大连接数10个
# max connections=10
# lock文件
lock file = /var/lock/rsyncd
# 不仅读也要写权限
read only = no
list = yes
# uid与pid非必要情况可设置问www-data
uid = root
pid = root
# 用户名称
auth users = www-data
# 指定同步校验用户时的密码文件
fake super = yes
# 密码文件
secrets file = /etc/rsync/rsyncd.secrets
strict modes = yes
# 指定主服务器ip
hosts allow = 192.168.27.130
# 是否忽略错误
ignore errors = no
# 是否忽略非可读的
ignore nonreadable = yes
# 日志转移
transfer logging = yes
# 日志输出格式
log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
# 最大响应时间
timeout = 600
refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

修改完成,保存并退出。
记住:备份文件的保存路径一定要存在!!!不然会报chroot failed 的错误。

1.6启动服务

/etc/init.d/rsync restart

在这里插入图片描述

/etc/init.d/rsync status

在这里插入图片描述
正常情况下服务都会启动顺利,但是!
在这里插入图片描述
也可能会出现上图的错误,rsync.conf在已经配置路径的情况下依旧默认是在/etc/文件夹下,执行命令:

mv /etc/rsync/rsyncd.conf /etc/

重新启动服务成功。

二、主服务器配置

主服务器:指重要文件的原件在该服务器上。

2.1安装rsync

sudo apt-get install rsync

2.2修改/etc/dault/rsync文件

sudo vim /etc/default/rsync

修改如下部分:
RSYNC_ENABLE=true(默认为false)
在这里插入图片描述

2.3方便管理rsync配置文件,新建文件夹rsync

sudo mkdir -p /etc/rsync/

2.4建立密码文件rsync.secrets

密码文件是双机同步时认证的关键,两机密码需要相同(这里只需要密码就行)

cat > /etc/rsync/rsyncd.secrets << EOF
> #/etc/rsync/rsyncd.secrets
> 123456
> EOF

创建完密码为123456的文件后,需要给该文件设置权限(必须设置)

chmod 600 /etc/rsync/rsyncd.secrets

2.5验证主从服务器的连接状态

在主服务器上运行:

rsync -vzrtopg --progress www-data@192.168.27.131::www-data --password-file=/etc/rsync/rsyncd.secrets

解释一下各个参数的含义:
www-data : 在备份服务器上设置的用户名
192.168.27.131 : 备份服务器ip
www-data : 备份服务器中rsyncd.conf中模块名称
在这里插入图片描述

2.6测试数据备份效果

依旧在主服务器上执行:

rsync -avzPt --delete /etc/rsync/temp/ www-data@192.168.27.131::www-data --password-file=/etc/rsync/rsyncd.secrets

解释一下各个参数的含义:
/etc/rsync/temp : 需要备份的文件的存储路径
www-data : 在备份服务器上设置的用户名
192.168.27.31 : 备份服务器ip
www-data : 备份服务器中rsyncd.conf中模块名称
总结来说:通过rsync将主服务器/etc/rsync/temp/路径下的所有文件备份到用户名为www-data,ip地址为192.168.27.131的服务器,里面的rsyncd.conf文件夹中的www-data模块下的path(也就是/var/www/pub)指向路径里面。
如果temp后面不加 / 就会将temp文件夹整个保存到/var/www/pub下。

三、定时备份

3.1选择命令编辑方式

crontab -e

在这里插入图片描述
选择3,vim.tiny编辑方式

3.2输入定时命令

0 5 * * * rsync -avzPt --delete /etc/rsync/temp/ www-data@192.168.27.131::www-data --password-file=/etc/rsync/rsyncd.secrets

解释一下各个参数的含义:
0 :指分钟
5 :指小时
即在5时00分执行该备份命令。

四、即时备份

4.1安装inotify

apt-get install inotify-tools

安装完成后,inotifywait默认路径为/usr/bin/inotifywait

4.2创建脚本

cat > /etc/rsync/rsync.init.sh <<EOF
> #!/bin/bash
> /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib /etc/rsync/temp/ | while read files
> do
> rsync -avzPt --delete --password-file=/etc/rsync/rsyncd.secrets /etc/rsync/temp/ www-data@192.168.27.131::www-data
> echo "{files} was rsynced" >> /temp/rsync.log 2>&1
> done
> EOF

解释一下各个参数的含义:
#!/bin/bash : 脚本文件必备
/usr/bin/inotifywait : inotifywait默认路径
modify,delete,create,attrib : 修改,删除,新建,更改格式(对文件操作)
/etc/rsync/temp/ : 监听的文件路径
while read files : 文件被读取时
echo “{files} was rsynced” >> /temp/rsync.log 2>&1 : 日志信息保存

4.3修改脚本权限

chmod 755 /etc/rsync/rsync.init.sh

4.4设置脚本开机自启

编辑 /etc/rc.local文件,在 exit0 的前面一行,加入如下语句

/bin/bash /etc/rsync/rsync.init.sh > /dev/null 2>&1 &

特别申明:/etc/rc.local 文件在ubuntu18系统里,默认是没有的!!!因为我就没有

这个时候就需要自己手动设置了,方法如下:
1.创建软连接

ln -sf /lib/systemd/system/rc-local.service /etc/systemd/system/rc-local.service

添加一句命令行,将命令追加到rc-local.service中(>>是追加,>是覆盖)

cat >>/etc/systemd/system/rc-local.service<<EOF
> [Install]
> WantedBy=multi-user.target
> Alias=rc-local.service
> EOF

3.创建rc.local文件并赋权

touch /etc/rc.local && chmod 755 /etc/rc.local

4.导入必要的语句

cat >>/etc/rc.local<<EOF
> #!/bin/bash
> /bin/bash /etc/rsync/rsync.init.sh > /dev/null 2>&1 &
> exit 0
> EOF

5.重新加载服务

systemctl daemon-reload

6.之后操作/etc/rsync/temp/路径下创建文件测试一下就行了,如果失败那一定是你的问题,因为我的问题已经被我趟完了。

五、备注和错误处理

5.1rsync命令说明

-v:显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息。
-P:显示文件传输的进度信息。(实际上"-P"=“–partial --progress”,其中的"–progress"才是显示进度信息的)。
-n --dry-run :仅测试传输,而不实际传输。常和"-vvvv"配合使用来查看rsync是如何工作的。
-a --archive :归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。
-r --recursive:递归到目录中去。
-t --times:保持mtime属性。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新检查出mtime不同从而导致增量传输无效。
-o --owner:保持owner属性(属主)。
-g --group:保持group属性(属组)。
-p --perms:保持perms属性(权限,不包括特殊权限)。
-D :是"–device --specials"选项的组合,即也拷贝设备文件和特殊文件。
-l --links:如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象。
-z :传输时进行压缩提高效率。
-R --relative:使用相对路径。意味着将命令行中指定的全路径而非路径最尾部的文件名发送 给服务端,包括它们的属性。用法见下文示例。
–size-only :默认算法是检查文件大小和mtime不同的文件,使用此选项将只检查文件大小。
-u --update :仅在源mtime比目标已存在文件的mtime新时才拷贝。注意,该选项是接收端判 断的,不会影响删除行为。
-d --dirs :以不递归的方式拷贝目录本身。默认递归时,如果源为"dir1/file1",则不会拷贝 dir1目录,使用该选项将拷贝dir1但不拷贝file1。
–max-size :限制rsync传输的最大文件大小。可以使用单位后缀,还可以是一个小数值(例如: “–max-size=1.5m”)
–min-size :限制rsync传输的最小文件大小。这可以用于禁止传输小文件或那些垃圾文件。
–exclude :指定排除规则来排除不需要传输的文件。
–delete :以SRC为主,对DEST进行同步。多则删之,少则补之。注意"–delete"是在接收端 执行的,所以它是在 : exclude/include规则生效之后才执行的。
-b --backup :对目标上已存在的文件做一个备份,备份的文件名后默认使用"~“做后缀。
–backup-dir:指定备份文件的保存路径。不指定时默认和待备份文件保存在同一目录下。
-e :指定所要使用的远程shell程序,默认为ssh。
–port :连接daemon时使用的端口号,默认为873端口。
–password-file:daemon模式时的密码文件,可以从中读取密码实现非交互式。注意,这不是 远程shell认证的密码,而是rsync模块认证的密码。
-W --whole-file:rsync将不再使用增量传输,而是全量传输。在网络带宽高于磁盘带宽时,该 选项比增量传输更高效。
–existing :要求只更新目标端已存在的文件,目标端还不存在的文件不传输。注意,使用相对路径时如果上层目录不存在也不会传输。
–ignore-existing:要求只更新目标端不存在的文件。
–remove-source-files:要求删除源端已经成功传输的文件。

虽然选项非常多,但最常用的选项组合是"avz",即压缩和显示部分信息,并以归档模式传输。

5.2日志格式解析

log format =
%h:远程主机名
%a:远程IP地址
%l:文件长度字符数
%p:该次rsync会话的进程id
%o:操作类型:“send"或"recv”、”del.”
%f:文件名
%P:模块路径
%m:模块名
%t:当前时间
%u:认证的用户名(匿名时是null)
%b:实际传输的字节数
%c:当发送文件时,该字段记录该文件的校验码

5.3常见错误(rsync的错非常抽象,小心编写)

问题一:
@ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]

原因:服务器端的目录不存在或无权限,创建目录并修正权限可解决问题。

问题二:
@ERROR: auth failed on module tee
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]

原因:服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败,提供正确的用户名密码解决此问题。

问题三:
@ERROR: Unknown module ‘tee_nonexists’
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]

原因:服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题

问题四:(在client上遇到)
rsync -auzv --progress --password-file=/etc/rsync.pas root@192.168.1.128::backup /home/
rsync: could not open password file “/etc/rsync.pas”: No such file or directory (2)
Password:
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]

遇到这个问题:client端没有设置/etc/rsync.pass这个文件,而在使用rsync命令的时候,加了这个参数–
password-file=/etc/rsync.pass

问题五:
rsync -auzv --progress --password-file=/etc/rsync.pas root@192.168.1.128::backup /home/
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]

遇到这个问题:client端已经设置/etc/rsync.pas这个文件,里面也设置了密码111111,和服务器一致,但是
服务器段设置有错误,服务器端应该设置/etc/rsync.pas ,里面内容root:111111 ,这里登陆名不可缺少

问题六:
rsync -auzv --progress --password-file=/etc/rsync.pas root@192.168.1.128::backup /home/
@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]

遇到这个问题:是因为服务器端的/home/backup 其中backup这个目录并没有设置,所以提示:chdir failed

问题七:
rsync: write failed on “/home/backup2010/wensong”: No space left on device (28)
rsync error: error in file IO (code 11) at receiver.c(302) [receiver=3.0.7]
rsync: connection unexpectedly closed (2721 bytes received so far) [generator]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [generator=3.0.7]

遇到这个问题:磁盘空间不够,所以无法操作,可以通过df /home/backup2010 来查看可用空间和已用空间

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Rsync是一种常用的文件同步工具,而Inotify是Linux内核提供的一种文件系统监控机制,可以对文件系统的变化进行实时监控并触发相应的事件。结合这两个工具,可以实现双机,即当一台主机上的文件发生变化时,自动将变化同步到机上,从而保证机上的文件与主机上的文件一致。 具体实现步骤如下: 1. 在主机和机上都安装rsyncinotify-tools。 2. 在主机上创建一个inotify监控程序,用于监控指定目录下的文件变化。可以使用以下命令: ``` inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e modify,create,delete,move /path/to/directory | while read datetime dir file; do rsync -avz --delete /path/to/directory user@backup_server:/path/to/backup done ``` 这个命令会监听指定目录下的文件变化(包括修改、创建、删除、移动等),并将变化同步到机上。其中,-r表示递归同步子目录,-q表示不输出详细信息,--timefmt和--format用于指定输出格式,-e用于指定要监控的事件类型。 3. 在机上设置rsync服务,用于接收主机发送过来的文件。可以使用以下命令: ``` sudo rsync --daemon --config=/etc/rsyncd.conf ``` 其中,--daemon表示以守护进程方式运行,--config用于指定配置文件。 4. 在主机上创建一个rsync配置文件,用于指定要同步的目录和机上的目录。可以使用以下内容: ``` uid = root gid = root use chroot = no max connections = 4 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsync.log [backup] path = /path/to/backup comment = Backup directory read only = no list = yes ``` 其中,[backup]表示机上的目录名,path表示机上的路径,comment表示注释,read only表示是否只读,list表示是否列出目录内容。 5. 在机上创建一个rsync配置文件,用于指定要同步的目录和主机上的目录。可以使用以下内容: ``` uid = root gid = root use chroot = no max connections = 4 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsync.log [main] path = /path/to/directory comment = Main directory read only = no list = yes ``` 其中,[main]表示主机上的目录名,path表示主机上的路径,comment表示注释,read only表示是否只读,list表示是否列出目录内容。 6. 在主机上执行以下命令,启动rsync服务: ``` sudo rsync --daemon --config=/etc/rsyncd.conf ``` 7. 在主机上修改文件,测试是否能够自动同步到机上。 通过以上步骤,就可以实现双机了。当主机上的文件发生变化时,inotify监控程序会自动将变化同步到机上,从而保证机上的文件与主机上的文件一致。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专注摸鱼的汪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值