步骤一:rsync安装配置
安装和使用rsync
2.1 rsync的安装
每个镜像服务器(需要同步的服务器)都需要安装rsync守护进程。
一般发行版都带有rsync,因此我这里直接使用yum安装。当然在很多发行版上默认已经安装了rsync。
代码如下 | 复制代码 |
[root@web1 ~]# yum install rsync [root@web1 ~]# rpm -ql rsync |
rsync是由超级守护进程xinetd来启动的。因此需要启动xinetd服务。
2.2 配置rsync服务器
rsync服务器主要有三个配置文件:rsyncd.conf,rsyncd.secrets和rsyncd.motd,而rsync安装后并没有自动创建相关配置文件,因此我们还需手动创建:
代码如下 | 复制代码 |
[root@web1 ~]# mkdir /etc/rsyncd ##创建配置目录 [root@web1 ~]# touch /etc/rsyncd/rsyncd.conf ##创建主配置文件 [root@web1 ~]# touch /etc/rsyncd/rsyncd.secrets ##创建用户密码文件 [root@web1 ~]# chmod 600 /etc/rsyncd/rsyncd.secrets ##修改用户密码文件 [root@web1 ~]# touch /etc/rsyncd/rsyncd.motd ##创建定义服务器信息的文件 |
编辑主配置文件:
代码如下 | 复制代码 |
[root@web1 ~]# vi /etc/rsyncd/rsyncd.conf # Minimal configuration file for rsync daemon # This line is required by the /etc/init.d/rsyncd script use chroot = yes ##是否限制在指定目录,为了安装,一般需要启用 #limit access to private LANs max connections = 5 #This will give you a separate log file #This will log every file transferred - up to 85,000+ per user, per sync log format = %t %a %m %f %b ##定义一个同步目录 [webhome] exclude = data/ ##排除目录 |
编辑/etc/rsyncd/rsyncd.secrets文件:
代码如下 | 复制代码 |
[root@web1 ~]# vi /etc/rsyncd/rsyncd.secrets apache:password123 |
##注意,这个账号是系统账号,但没有使用系统账号的密码,而是自定义密码
重启使rsync生效:
代码如下 | 复制代码 |
[root@web1 ~]# /usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf |
设置为开机启动:
代码如下 | 复制代码 |
[root@web1 ~]# echo "/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf" >> /etc/rc.d/rc.local |
2.3 使用rsync客户端实现数据同步
客户端安装同上,额外只需配置一个密码文件,具体如下:
代码如下 | 复制代码 |
[root@web2 ~]# mkdir /etc/rsyncd ##创建配置目录 [root@web2 ~]# echo “passowd123”> /etc/rsyncd/rsyncd.password ##创建密码文件,密码为服务器端rsyncd.secrets文件中的密码。 [root@web2 ~]# chmod 600 /etc/rsyncd/rsyncd.password |
同步:
代码如下 | 复制代码 |
[root@web2 ~]# rsync -avzP --delete --password-file=/etc/rsyncd/rsyncd.password apache@web1::webhome /var/www/html/ receiving incremental file list sent 100 bytes received 264 bytes 728.00 bytes/sec |
说明:
--delete:本地与服务器完全一样,如果本地存在不一样的,则删除,慎用
--password-file:指定密码文件,如果不指定,则需手动输入
-a :参数,相当于-rlptgoD,-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;
-z :传输时压缩;
-P :传输进度;
-v :传输时的进度等信息
apache@web1::webhome 用双冒号引用主配置文件中的定义资源,也可以使用单引号跟绝对路径
以后同步时,只会同步新增内容。
最后将上述命令加入计划任务定时同步即可。
可能存在的问题:
防火墙端口开发问题:iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
权限问题,需要写权限
步骤二:sersync+inotify实现同步
在使用sersync之前,我们必须安装配置好rsync服务器。这里我们需要注意的是,纯粹的使用rsync做单向同步时,rsync的守护进程是运行在文件推送的服务器上,而接收的服务器是运行rsync客户端。使用sersync做文件实时同步刚好相反,用于接收文件的服务器运行rsync守护进程。
一、安装sersync:
下载地址:https://code.google.com/p/sersync/downloads/list
但须注意,由于我们天朝伟大的防火墙,这个地址可能是打不开的,可能需要翻墙后才能打开。
可选下载包有免编译二进制包和编译安装源码。(www.111cn.Net)我这里以二进制为例,下载后包含一个配置文件和一个可执行文件。
代码如下 | 复制代码 |
[root@web1 GNU-Linux-x86]# ll 总用量 1772 -rwxr-xr-x 1 root root 2214 10月 26 2011 confxml.xml -rwxr-xr-x 1 root root 1810128 10月 26 2011 sersync2 为了方便使用,我们将其拷贝到如下目录: [root@web1 GNU-Linux-x86]# mkdir /usr/local/sersync [root@web1 GNU-Linux-x86]# mv * /usr/local/sersync 二、基本配置: 2.1 创建密码文件: [root@web1 sersync]# pwd /usr/local/sersync [root@web1 sersync]# echo "password@123" > rsync.passwd [root@web1 sersync]# vi confxml.xml <?xml version="1.0" encoding="ISO-8859-1"?> <!--监控事件的过程中过滤特定文件,和特定文件夹的文件 --> <exclude expression="(.*).jpg"></exclude> <exclude expression="(.*).gif"></exclude> <exclude expression="(.*).png"></exclude> <exclude expression="(.*).css"></exclude> <exclude expression="(.*).js"></exclude> <exclude expression="^tmp/*"></exclude> <!--设置要监控的事件 --> <sersync> <!--设定监控目录--> <!--指定远端rsync的地址和模块名--> <remote ip="192.168.204.129" name="webhome"/> <rsync> <!--是否启用验证,并指定密码存放文件 --> <!--是否启用执行完整rsync,并指定执行周期 --> <exclude expression="(.*).html"></exclude> <exclude expression="(.*).jpg"></exclude> <exclude expression="(.*).gif"></exclude> <exclude expression="(.*).png"></exclude> <exclude expression="(.*).css"></exclude> <exclude expression="(.*).js"></exclude> <exclude expression="^tmp/*"></exclude> </crontabfilter> <plugin name="command"> |
三、启用同步功能:
再次强调,所有sersync客户端都需要安装rsync,并启动为服务。在上述配置文件中须将所有需要同步的客户端IP(即rsync服务器端)加入。
使用如下命令进行初始化同步,并监视指定目录变化情况:
代码如下 | 复制代码 |
[root@web2 sersync2]# ./sersync2 -r set the system param execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events parse the command param option: -r rsync all the local files to the remote servers before the sersync work daemon thread num: 10 parse xml config file host ip : localhost host port: 8008 use rsync password-file : user is apache passwordfile is /etc/rsyncd/rsyncd.password config xml parse success please set /etc/rsyncd.conf max connections=0 Manually sersync working thread 12 = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads) Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads) please according your cpu ,use -n param to adjust the cpu rate ------------------------------------------ rsync the directory recursivly to the remote servers once working please wait... execute command: cd /var/www/html && rsync -artuz -R --delete ./ --port=873 apache@192.168.204.129::webhome --password-file=/etc/rsyncd/rsyncd.password >/dev/null 2>&1 run the sersync: watch path is: /var/www/html |
可以用如下参数指定线程数,使其并发执行:
代码如下 | 复制代码 |
./sersync -n num |
其他参数:
参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
c参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序
加入开机启动:
代码如下 | 复制代码 |
[root@web2 sersync2]# echo "/usr/local/sersync2/sersync2 -d -o /usr/local/sersync2/confxml.xml" >>/etc/rc.d/rc.local |