lsyncd+rsync实现实时自动同步
一、概述
一般rsync软件是通过crond这支后台进行(计划任务)来实现自动同步数据,如今已有更好的开源软件来代替使用crond了,那就是 lsyncd( Live Syncing (Mirror) Daemon), 它的工作原理:监视本地(rsync client)的目录,当源数据有文件或目录更新时,更新本地文件或目录到远端机器(rsync server),保持实时文件同步,但是它更新数据时需要远端rsync server运行rsync demon
配置环境如下
(1)需要配置rsyncd.conf文件的一端,称为rsync server
(2)不需要配置rsyncd.conf文件的一端,称为rsync client
(3)本次环境如下
rsync服务器:192.168.0.53(安装rsync)
rsync客户端:192.168.0.54(安装rsyncd +lsyncd )
lsyncd的功能:
(1)开源软件lsyncd采用inotify原理监听某一目录,如果目录内发生增、删、改、利用rsync协议自动同步到多个服务器
(2)inotify,从kernel 2.6.13开始正式并入内核,RHEL5支持
(3)可以本地多点目录的监控并实现到远程目录的同步
(4) 在rsync client上通过lsyncd监控并推送数据给rsync server的rsync daemon,rsync server接收lsyncd推送过来的数据,并写入本地磁盘
(5)官方介绍:http://code.google.com/p/lsyncd
注意:而对于那种实时都在变化的数据(例如:数据库),那么这种数据的同步, DRBD技术是一个更好的选择
二、软件的下载与安装
1、 服务器端(rsync)
(1)下载并安装rsync
[root@example1 ~]# wget http://www.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz
[root@example1 ~]# tar zxvf rsync-3.0.7.tar.gz
[root@example1 ~]# ./configure --prefix=/usr/local/rsync --with-rsyncd-conf=/usr/local/rsync/etc/rsyncd.conf --disable-ipv6 && make && make install
(3)创建用于同步数据的目录(rsync服务器端)
作用:该目录用于存放lsyncd推送过来的数据
[root@example1 ~]# mkdir /tmp/share/
[root@example1 ~]# chown -R root:root /tmp/share;
2、 客户端 (lsyncd+rsync)
(1)下载并安装rsync,无需配置rsyncd.conf
[root@example2 ~]# wget http://www.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz
[root@example2 ~]# tar zxvf rsync-3.0.7.tar.gz
[root@example2 ~]# ./configure --prefix=/usr/local/rsync --disable-ipv6 && make && make install
一般rsync软件是通过crond这支后台进行(计划任务)来实现自动同步数据,如今已有更好的开源软件来代替使用crond了,那就是 lsyncd( Live Syncing (Mirror) Daemon), 它的工作原理:监视本地(rsync client)的目录,当源数据有文件或目录更新时,更新本地文件或目录到远端机器(rsync server),保持实时文件同步,但是它更新数据时需要远端rsync server运行rsync demon
配置环境如下
(1)需要配置rsyncd.conf文件的一端,称为rsync server
(2)不需要配置rsyncd.conf文件的一端,称为rsync client
(3)本次环境如下
rsync服务器:192.168.0.53(安装rsync)
rsync客户端:192.168.0.54(安装rsyncd +lsyncd )
lsyncd的功能:
(1)开源软件lsyncd采用inotify原理监听某一目录,如果目录内发生增、删、改、利用rsync协议自动同步到多个服务器
(2)inotify,从kernel 2.6.13开始正式并入内核,RHEL5支持
(3)可以本地多点目录的监控并实现到远程目录的同步
(4) 在rsync client上通过lsyncd监控并推送数据给rsync server的rsync daemon,rsync server接收lsyncd推送过来的数据,并写入本地磁盘
(5)官方介绍:http://code.google.com/p/lsyncd
注意:而对于那种实时都在变化的数据(例如:数据库),那么这种数据的同步, DRBD技术是一个更好的选择
二、软件的下载与安装
1、 服务器端(rsync)
(1)下载并安装rsync
[root@example1 ~]# wget http://www.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz
[root@example1 ~]# tar zxvf rsync-3.0.7.tar.gz
[root@example1 ~]# ./configure --prefix=/usr/local/rsync --with-rsyncd-conf=/usr/local/rsync/etc/rsyncd.conf --disable-ipv6 && make && make install
(3)创建用于同步数据的目录(rsync服务器端)
作用:该目录用于存放lsyncd推送过来的数据
[root@example1 ~]# mkdir /tmp/share/
[root@example1 ~]# chown -R root:root /tmp/share;
2、 客户端 (lsyncd+rsync)
(1)下载并安装rsync,无需配置rsyncd.conf
[root@example2 ~]# wget http://www.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz
[root@example2 ~]# tar zxvf rsync-3.0.7.tar.gz
[root@example2 ~]# ./configure --prefix=/usr/local/rsync --disable-ipv6 && make && make install
(2)下载并安装lsyncd
[root@example2 ~]# wget http://lsyncd.googlecode.com/files/lsyncd-1.26.tar.gz
[root@example2 ~]# tar zxvf lsyncd-1.26.tar.gz
[root@example2 ~]# ./configure --prefix=/usr/local/lsyncd --enable-xml-config && make && make install
[root@example2 ~]# wget http://lsyncd.googlecode.com/files/lsyncd-1.26.tar.gz
[root@example2 ~]# tar zxvf lsyncd-1.26.tar.gz
[root@example2 ~]# ./configure --prefix=/usr/local/lsyncd --enable-xml-config && make && make install
(3)创建用于同步数据的目录(rsync客户端)
作用:该目录用于存放将要同步给rsync server的数据
[root@example2 ~]# mkdir /tmp/share
[root@example2 ~]# chown -R root:root /tmp/share;
作用:该目录用于存放将要同步给rsync server的数据
[root@example2 ~]# mkdir /tmp/share
[root@example2 ~]# chown -R root:root /tmp/share;
三、配置rsync服务器端与rsync客户端
1、配置rsync服务器端
1)配置rsync
[root@example1 ~]# mkdir /usr/local/rsync/etc
[root@example1 ~]# vi /usr/local/rsync/etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 4
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
[share]
path = /tmp/share #保存将要被同步的数据的目录
comment = My Share Documents
hosts allow = 192.168.0.54 #允许访问的主机IP
hosts deny = 0.0.0.0/32
list = yes
ignore errors = yes
read only = false #是否只读
[root@example1 ~]# mkdir /usr/local/rsync/etc
[root@example1 ~]# vi /usr/local/rsync/etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 4
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
[share]
path = /tmp/share #保存将要被同步的数据的目录
comment = My Share Documents
hosts allow = 192.168.0.54 #允许访问的主机IP
hosts deny = 0.0.0.0/32
list = yes
ignore errors = yes
read only = false #是否只读
2)配置lsyncd
[root@ example1 ~]# mkdir /usr/local/lsyncd/etc
[root@example1 lsyncd-1.26]# cp lsyncd.conf.xml /usr/local/lsyncd/etc/
[root@example1 lsyncd-1.26]# ln -sf /usr/local/lsyncd/etc/lsyncd.conf.xml /etc/lsyncd.conf.xml
[root@ example1 ~]# vi /usr/local/lsyncd/etc/lsyncd.conf.xml
<lsyncd version="1">
<settings>
<logfile filename="/var/log/lsyncd.log"/>
<binary filename="/usr/local/rsync/bin/rsync"/>
<pidfile filename="/var/run/lsyncd.pid"/>
<callopts>
<option text="-avz"/>
<option text="--delete"/>
<option text="--force"/>
<exclude-file/>
<source/>
<destination/>
</callopts>
</settings>
<directory>
<source path="/tmp/share/"/>
#注意区别:"/tmp/share/" 与 "/tmp/share"
<target path="192.168.0.53::share"/>
</directory>
</lsyncd>
[root@ example1 ~]# mkdir /usr/local/lsyncd/etc
[root@example1 lsyncd-1.26]# cp lsyncd.conf.xml /usr/local/lsyncd/etc/
[root@example1 lsyncd-1.26]# ln -sf /usr/local/lsyncd/etc/lsyncd.conf.xml /etc/lsyncd.conf.xml
[root@ example1 ~]# vi /usr/local/lsyncd/etc/lsyncd.conf.xml
<lsyncd version="1">
<settings>
<logfile filename="/var/log/lsyncd.log"/>
<binary filename="/usr/local/rsync/bin/rsync"/>
<pidfile filename="/var/run/lsyncd.pid"/>
<callopts>
<option text="-avz"/>
<option text="--delete"/>
<option text="--force"/>
<exclude-file/>
<source/>
<destination/>
</callopts>
</settings>
<directory>
<source path="/tmp/share/"/>
#注意区别:"/tmp/share/" 与 "/tmp/share"
<target path="192.168.0.53::share"/>
</directory>
</lsyncd>
2、配置rsync客户端
[root@example2 ~]# mkdir /usr/local/rsync/etc
[root@example2 ~]# touch /usr/local/rsync/etc/rsyncd.conf
三、启动相关服务并测试
1、rsync服务器端
[root@ example1 ~]# /usr/local/rsync/bin/rsync --daemon
[root@example2 ~]# mkdir /usr/local/rsync/etc
[root@example2 ~]# touch /usr/local/rsync/etc/rsyncd.conf
三、启动相关服务并测试
1、rsync服务器端
[root@ example1 ~]# /usr/local/rsync/bin/rsync --daemon
2、rsync客户端
[root@ example2 ~]# /usr/local/rsync/bin/rsync --daemon
[root@ example2 ~]# /usr/local/lsyncd/bin/lsyncd --conf /usr/local/lsyncd/etc/lsyncd.conf
[root@ example2 ~]# /usr/local/rsync/bin/rsync --daemon
[root@ example2 ~]# /usr/local/lsyncd/bin/lsyncd --conf /usr/local/lsyncd/etc/lsyncd.conf
3、测试
先在rsync client的/tmp/share/目录进行增加、删除文件,然后再查看rsync server上的/tmp/share目录情况
先在rsync client的/tmp/share/目录进行增加、删除文件,然后再查看rsync server上的/tmp/share目录情况
附上rsync基础部署:
手动的:
首先要建立好两台服务器之间的公钥和密钥,那样就不需要每次都输入密码,也可以实现自动了。
可以先使用rpm -qa |grep rsync 查看rsync是否已经安装 本试验的测试环境(2台,一个服务端,一个客户端)
rsync服务端的ip:17.12.173.131
rsync客户端的ip:20.8.180.153 20.8.180.155
-----------------------------------------------
以下先配置服务器端:
1. 安装rsync包
# rpm -q rsync
rsync-2.6.3-1
2. rsync只使用一个配置文件就是/etc/rsyncd.conf 这个文件一般是没有的,那就自己建一个好了
# vi /etc/rsyncd.conf
uid = nobody
gid = nobody
max connections = 200
timeout = 600
use chroot = no
read only = yes
pid file=/var/run/rsyncd.pid
host_allow = 20.8.180.153 20.8.180.155 //客户端的IP地址写在这里
#syslog facility = local7
#log file=/var/log/rsyncd.log
#rsync con**
#The 'standard' things
[rsync_gmmold] //定义同步的路径(客户端用这个关键字链接)
path = /home //需要同步的路径
comment = gmmold //这个暂不知道
3.启动服务
#/usr/bin/rsync --daemon 最后在server端将rsync以守护进程形式启动, rsync启动的端口为 873端口
4.加入开机启动
echo "/usr/bin/rsync --daemon" >> /etc/rc.local
5.检查rsync时候启动
# ps -ef | grep rsync
6.停止服务
#kill `cat /var/run/rsyncd.pid`
二、客户端:
1、同步推送客户端某个目录中(例:/home/zhanguan/abc)的文件到服务器端的/opt/htdocs目录:
/usr/bin/rsync -vzrtopg --delete /home/zhanguan/abc/ -e ssh www@10.0.0.10:/opt/htdocs/
/usr/bin/rsync -zrtopg -e ssh root@www.test.us:/opt/tomcat6/test/FM /mnt/backup/test/ 2>&1 > /dev/null &
/usr/bin/rsync -zrtopg -e ssh root@www.test.us:/opt/tomcat6/test/backup /mnt/backup/test/ 2>&1 >/dev/null &
注意:--delete会删除目的盘中源文件没有的所有文件
源文件 目的文件
/abc/ 同步abc目录下的所有文件而不包括abc本身
/abc 同步abc目录及该目录的所有文件
转载于:https://blog.51cto.com/dadloveu/697087