现在有个需求,A服务器的某个路径下的文件,想备份到B服务器下面。假设A的ip是 192.168.1.75,B的ip是 192.168.1.85。在ubuntu下面可以使用rsync软件配合inotify工具一起来实现这个功能。
1 rsync主机端配置
ubuntu16.03系统默认已经安装了rsync软件。需要配置rsync软件。A是数据源,在使用inotify-tools时需要将A配置成rsync从机。将B配置成rsync主机。在B的/etc路径下建立rsyncd.conf配置文件,文件内容如下:
# sample rsyncd.conf configuration file
# GLOBAL OPTIONS
#motd file=/etc/motd
log file=/var/log/rsyncd
# for pid file, do not use /var/run/rsync.pid if
# you are going to run rsync out of the init.d script.
# The init.d script does its own pid file handling,
# so omit the "pid file" line completely in that case.
pid file=/var/run/rsyncd.pid
syslog facility=daemon
#socket options=
# MODULE OPTIONS
[ftp]//ftp这个模块名要记住
comment = public archive
path = /data //这是同步路径
use chroot = no
# max connections=10
lock file = /var/lock/rsyncd
# the default for read only is yes...
read only = no //这个地方要配置成no,不然往/data路径下写文件会发生错误
list = yes
uid = root
gid = root
# exclude =
# exclude from =
# include =
# include from =
auth users =lzj //lzj是rsyncd.secrets里面设置的用户
secrets file = /etc/rsyncd.secrets
strict modes = yes
hosts allow =192.168.1.75 //允许A主机访问
# hosts deny =
ignore errors = yes
ignore nonreadable = yes
transfer logging = no
# 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
然后在/etc路径下建立密码文件rsyncd.secrets,内容为:
lzj:123
再修改/ect/default/rsync文件:
# defaults file for rsync daemon mode
# start rsync in daemon mode from init.d script?
# only allowed values are "true", "false", and "inetd"
# Use "inetd" if you want to start the rsyncd from inetd,
# all this does is prevent the init.d script from printing a message
# about not starting rsyncd (you still need to modify inetd's config yourself).
RSYNC_ENABLE=true
# which file should be used as the configuration file for rsync.
# This file is used instead of the default /etc/rsyncd.conf
# Warning: This option has no effect if the daemon is accessed
# using a remote shell. When using a different file for
# rsync you might want to symlink /etc/rsyncd.conf to
# that file.
RSYNC_CONFIG_FILE=/etc/rsyncd.conf
# what extra options to give rsync --daemon?
# that excludes the --daemon; that's always done in the init.d script
# Possibilities are:
# --address=123.45.67.89 (bind to a specific IP address)
# --port=8730 (bind to specified port; default 873)
RSYNC_OPTS=''
# run rsyncd at a nice level?
# the rsync daemon can impact performance due to much I/O and CPU usage,
# so you may want to run it at a nicer priority than the default priority.
# Allowed values are 0 - 19 inclusive; 10 is a reasonable value.
RSYNC_NICE=''
# run rsyncd with ionice?
# "ionice" does for IO load what "nice" does for CPU load.
# As rsync is often used for backups which aren't all that time-critical,
# reducing the rsync IO priority will benefit the rest of the system.
# See the manpage for ionice for allowed options.
# -c3 is recommended, this will run rsync IO at "idle" priority. Uncomment
# the next line to activate this.
# RSYNC_IONICE='-c3'
# Don't forget to create an appropriate config file,
# else the daemon will not start.
设置同步路径/data的权限:
chown -R root:root /data
其中的root:root分别是rsyncd.conf所设置的uid和gid。
现在B端配置完成,运行下列命令启动rsync服务:
/etc/init.d/rsync start
查看rsync服务是否启动:
ps -e|grep rsync
9677 ? 00:00:00 rsync
2 A端配置
在A端建立rsync秘钥文件/etc/rsync.pass,内容如下:
123
注意只要写密码就行了。
然后修改秘钥文件的权限:
chmod 600 /etc/rsync.pass
建立同步文件夹,并对文件夹授权:
mkdir /data
chown -R root:root /data
在A端安装inotify-tools:
sudo apt-get install inotify-tools
在A端建立shell脚本 /sync.sh,内容如下:
src=/data
dst=lzj@192.168.1.85::ftp
/usr/bin/inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files
do
rsync -vzrtopg --delete --progress --password-file=/etc/rsync.pass $src $dst
done
exit 0
授权并运行 /sync.sh:
chmod +x /sync.sh
./sync.sh
观察在A端的/data文件夹下新建文件或删除文件,B端的/data目录是否有文件变化。