发布服务器搭建(rsync+inotify)

Linux

Linux下为了数据安全或者网站同步镜像,不得不考虑一些实时备份的问题。当做集群需要把代码分发到多台服务器的时候可以使用。实现思路,记住inotify 系统的变化通知机制和rsync工具实现远程同步remote sync。

1 、Inotify和rsync工具以及环境简介
1.1,Inotify工具
Inotify,它是一个内核用于通知用户空间程序文件系统变化的机制。inotify是一种文件系统的变化通知机制,如文件增加、删除等事件可以立刻让用户态得知。
1.2,rsync工具
它是类unix系统下的数据镜像备份工具,实现远程同步remote sync,它的特性如下:
(1),可以镜像保存整个目录树和文件系统、可以很容易做到保持原来文件的权限、时间、软硬链接等等。
(2),无须特殊权限即可安装,支持匿名传输,以方便进行网站镜象。
(3),第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
(4),可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。

2、发布服务器(Inotify和rsync)搭配步骤
源服务器:192.168.1.100
目标服务器:192.168.21.128
目的:把源服务器上/root目录实时同步到目标服务器的/root/webbak下

安装目标服务器
1.yum安装rsync
rpm -qa|grep rsync
rpm -e rsync
wget http://download.slogra.com/rsync-3.0.7-1.el5.rf.i386.rpm
rpm -ivh rsync-3.0.7-1.el5.rf.i386.rpm
yum install rsync

2.配置rsync
mkdir /etc/rsyncd
touch /etc/rsyncd/rsyncd.conf
touch /etc/rsyncd/rsyncd.secrets
touch /etc/rsyncd/rsyncd.motd
chmod 600 /etc/rsyncd/rsyncd.secrets

说明:
mkdir /etc/rsyncd
在/etc目录下创建一个rsyncd的目录,我们用来存放rsyncd.conf和rsyncd.secrets等文件
touch /etc/rsyncd/rsyncd.conf
创建rsyncd.conf,这是rsync服务器的配置文件
touch /etc/rsyncd/rsyncd.secrets
创建rsyncd.secrets,这是用户密码文件
touch /etc/rsyncd/rsyncd.motd
创建rsyncd.motd,这是rsync欢迎界面
chmod 600 /etc/rsyncd/rsyncd.secrets
为了密码的安全性,我们把权限设为600

vi /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 = yes 修改为disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = –daemon
log_on_failure += USERID
}

vi /etc/rsyncd/rsyncd.conf
pid file = /var/run/rsyncd.pid
port = 873
#指定运行端口,默认是873,你可以自己指定
address = 192.168.1.102
#指定服务器IP地址
#uid = nobody
#gid = nobody
uid = root
#服务器端传输文件时,要用户和用户组来执行
gid = root
use chroot = yes
#用chroot,在传输文件之前,服务器守护程序在将chroot到文件系统中的目录中,这样做的好处是可能保护系统被安装漏洞侵袭的可能,缺点是需要超级用户权限.另外对符号链接文件,将会排除在外.
read only = no
#只读选择,是否让客户端上传文件到服务器上
#limit access to private LANs
#hosts allow = *
#192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0
hosts allow = 192.168.1.101
#只允许这个主机访问
#hosts deny=*
max connections = 5
#最大连接数
motd file = /etc/rsyncd/rsyncd.motd
#自定义服务器信息,当用户登录时会看到这个信息
#This will give you a separate log file
log file = /var/log/rsync.log
#传输文件日志
#This will log every file transferred – up to 85,000+ per user, per sync
#transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
#发布项
[webbak]
#发布的路径
path = /root/webbak
#允许列出文件清单
list = yes
#忽略IO错误
ignore errors
#用户账号
auth users = root
#存放密码的地方
secrets file = /etc/rsyncd/rsyncd.secrets
#相当于是一种接口名字,等服务跑起来了客户端可以直接用这名字调用相关服务器的文件夹内容信息
comment = webbak
#无视这两个文件夹的内容,当然我这里没有启用
#exclude = beinan/ samba/
vi /etc/rsyncd/rsyncd.secrets
root:123456789

vi /etc/rsyncd/rsyncd.motd
+++++++++++++++++++++++++++
+ www.leixuesong.cn rsync +
+++++++++++++++++++++++++++

3.启动rsync
/usr/bin/rsync –daemon –config=/etc/rsyncd/rsyncd.conf
防火墙还要放过rsync的端口
我这里使用的rsync默认端口,也就是873
iptables -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 873 -j ACCEPT
service iptables save
service iptables reload
这里服务端的搭建完成了.

源服务器相关配置
1.安装rsync客户端 + inotify-tools
rpm -qa|grep rsync
这一步是避免使用系统自带的低版本rsync 2.x
如果有就执行
rpm -e rsync
yum安装rsync
yum -y install rsync
wget http://download.slogra.com/rsync-3.0.7-1.el5.rf.i386.rpm
rpm -ivh rsync-3.0.7-1.el5.rf.i386.rpm
mkdir /etc/rsyncd
vi /etc/rsyncd/rsyncd.secrets
chmod 600 /etc/rsyncd/rsyncd.secrets
这里的rsyncd.secrets只需要加上密码就可以了
123456789
执行主动推送同步命令测试:
rsync -vzrtopg –delete –progress –password-file=/etc/rsyncd/rsyncd.secrets /root root@192.168.1.102::webbak

2.搭建inotify 服务
下载安装
# wget http://nchc.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
# tar xzvf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.13
# ./configure –prefix=/usr/local/inotify
# make
# make install

3.与inotity结合的sh脚本rsync.sh
#!/bin/bash
src=/root
des=webbak
host=”192.168.1.102″
/usr/local/bin/inotifywait -mrq –timefmt ‘%d/%m/%y %H:%M’ –format ‘%T %w%f’ -e modify,delete,create,attrib $src | while read files
do
rsync -vzrtopg –delete –progress –password-file=/etc/rsyncd/rsyncd.secrets $src root@$host::$des
done
echo “${files} was rsynced” >>/tmp/rsync.log 2>&1

添加执行权限
chmod +x rsync.sh

执行rsync.sh脚本
nohup sh rsync.sh &

附:Linux rsync常见错误

来源:发布服务器搭建(rsync+inotify)

发表评论

电子邮件地址不会被公开。 必填项已用*标注