首页 > 代码库 > linux之间通过rsync+inotify-tools实现自动实时备份
linux之间通过rsync+inotify-tools实现自动实时备份
两台rhel5.6web服务器,上面跑的都是Apache,目录都是/va/www/html,现在想把线上的web数据实时备份到另外一台web服务器,即这个“另外一台web服务器”作为实时备用机器,这里我把线上的web机称为源服务器,作为实时备用的服务器称为目标服务器
实验过程:
第一部分:配置目标服务器:
#service iptables stop
#setenforce 0
#yum install httpd
#service httpd start
#chkconfig --level 35 httpd on
[root@mubiao ~]# cat /etc/xinetd.d/rsync
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
# allows crc checksumming etc.
service rsync
{
disable = no ####将yes改为no,即打开rsync功能
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
#service xinetd restart
[root@mubiao ~]# cat /etc/rsyncd.conf ####创建配置文件
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
secrets file = /etc/rsyncd.pass
motd file = /etc/rsyncd.motd
[web]
path = /var/www/html/
comment = web apache
uid = root
gid = root
port = 873
use chroot = no
read only = no
list = no
max connections = 200
timeout = 600
auth users = yunwei_01
hosts allow = 192.168.65.151
hosts deny = 192.168.65.134
[root@mubiao ~]# cat /etc/rsyncd.pass ####创建用户认证文件,这里的用户名密码是在下面的文件里创建的,和系统的用户名密码没有关系
yunwei_01:123456
#chmod 600 /etc/rsyncd.conf ####设置文件权限
#chmod 600 /etc/rsyncd.pass
#service xinetd restart ####重启服务,使更改生效
第二部分:配置源服务器
#service iptables stop
#setenforce 0
#yum install httpd gcc gcc-c++ -y
#service httpd start
#chkconfig --level 35 httpd on
[root@yuan ~]# cat /etc/xinetd.d/rsync
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
# allows crc checksumming etc.
service rsync
{
disable = no ####将yes改为no,即打开rsync功能
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
#service xinetd restart
[root@yuan ~]# cat /etc/password.txt ####创建认证密码文件
123456
#chmod 600 /etc/password.txt #####设置文件权限,
#rsync -avH --port 873 --progress --delete /var/www/html/ yunwei_01@192.168.65.129::web --password-file=/etc/password.txt ####在源服务器上进行测试,发现可以实现把原服务器数据备份到目标服务器上面
#tar zxf inotify-tools-3.14.tar.gz ####安装inotify-tools
#cd inotify-tools-3.14
#./configure --prefix=/usr/local/inotify
#make &&make install
下面设置环境变量,并添加软链接
#echo "PATH=/usr/local/inotify/bin:$PATH" >> /etc/profile.d/inotify.sh
#source /etc/profile.d/inotify.sh
# echo "/usr/local/inotify/lib" > /etc/ld.so.conf.d/inotify.conf
# ln -s /usr/local/inotify/include /usr/include/inotify
对inotify调优
#sysctl -w fs.inotify.max_queued_events="99999999"
#sysctl -w fs.inotify.max_user_watches="99999999"
#sysctl -w fs.inotify.max_user_instances="65535"
在源服务器上面创建脚本,并在源服务器上面运行该脚本,实时出发rsync进行同步
[root@yuan ~]# cat /usr/local/inotify/rsync.sh
#!/bin/sh
srcdir=/var/www/html/
dstdir=web
rsyncuser=yunwei_01
rsyncpassdir=/etc/password.txt
dstip="192.168.65.129"
for ip in $dstip
do
rsync -avH --port=873 --progress --delete $srcdir $rsyncuser@$ip::$dstdir --password-file=$rsyncpassdir
done
/usr/local/inotify/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f%e‘ -e close_write,modify,delete,create,attrib,move $srcdir | while read file
do
for ip in $dstip
do
rsync -avH --port=873 --progress --delete $srcdir $rsyncuser@$ip::$dstdir --password-file=$rsyncpassdir
echo " ${file} was rsynced" >> /tmp/rsync.log 2>&1
done
done
#chmod +x /usr/local/inotify/rsync.sh
设置开机脚本自动执行
[root@yuan ~]# cat /etc/rc.d/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don‘t
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
sh /usr/local/inotify/rsync.sh &
重启源服务器
重启后,会发现,此时源和目标服务器实现了实时同步
到这里配置完成。
本文出自 “个人感受” 博客,谢绝转载!