您的位置:首页 > 运维架构 > 网站架构

rsync+sersync2多个web网站同步

2015-09-16 08:39 519 查看
     人不怕痛苦,就怕丢点刚强,也不怕磨难只怕失去希望。最求生活的圆满是人生良好愿望,然而生活中总有很多不如意的事情。只有把每次经历的风雨,都当成人生的一个必选课题,那么没征服一个难题,你便增加一份生活的勇气,把众多的难题累加起来,成功将属于你。

     有一个小男孩,他很小就失去了母亲,他的父亲是一个伐木工人,贫寒的家境是他没有机会介绍高等教育。在很长的时间里,他唯一的老师就是继母送给他的一本《圣经》。他成年后的生活也充满不幸的阴影,他心爱的姑凉早早夭亡,后来他虽然结了婚,但他的妻子却成为了他“身上的一根刺”,他的婚姻非常不幸福。他去经商,一败涂地,要花20年的时间才能把债务还清;他去从政,第一次竞选就以惨败而告终,接下来第二次、第三次结果也好不到哪去。可以说命运给他的是一连串的苦难。单他顽强地从苦难中学习着生活的真知。早年的不幸让他拥有了仁爱;从商从政的失败让他学会了如何面对挫折;生活中的麻烦使他变得胸怀博大。这些了不起的品质让他在饱经挫折、备尝失败之后,终于去得了成功。他成为美国历史上一位伟大的总统。他的失败成就了他的胜利,他就是——林肯。

                        


    在很多高迸发或者中大型企业网站中,特别是门户网站之类的,大多数部署群集、负载均衡。在此种架构的环境中,有多台服务器提供同一个业务;有分开的。若是多个服务器对外提供同一个业务,网站服务器数据都需要同步。

   同步的方式有:

1》所有服务器公用一个存储

2》所有服务器各自独立,中间用第三方软件来实时同步

    这里个人用的是第二种方法

     我们这里是使用自动同步的方式,所以使用的是rsync+sersync:

两种同步方式:

单向同步:
rsync一般是server到client
sersync一般是client到server,sersync可以做到实时的监控
sersync+rsync一般是多台服务器之间的
 双向同步:
unison
sersync监控系统文件变化
然后 rsync
实时同步
如果系统文件没有变化,不会同步
执行同步进程的时候,应该先执行客户端的rsync
再执行sersync 

服务器角色信息:

服务器

角色

IP

程序

Web1

(源)服务器

192.168.150.130

sersync

Web2

(目标)服务器,详细配置

192.168.150.131

Rsync

如图所示:在我们的工作中有很多的web业务服务器,有的多台服务器就提供了相同业务(负载均衡、高可用等)。所以这些服务器的web目录(数据)需要实时同步。我们有如下几种方法:

nfs实现web数据共享

rsync +inotify实现web数据同步

rsync+sersync更快更节约资源实现web数据同步

unison+inotify实现web数据双向同步

 

我们发布web服务器内容版本的时候;只需要将内容文件用ftp传到到web1上。只要在web1(源)上配置好sersync就行了。它会自动检查更新过的内容。自动同步到we2服务器(目标)。有一点,rsync用的系统用户;但密码是定义在密码配置文件里的。来吧配置开始~~~

Web2上的配置:

vim /etc/selinux/config

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#     enforcing - SELinux security policy is enforced.

#     permissive - SELinux prints warnings instead of enforcing.

#     disabled - No SELinux policy is loaded.

SELINUX=disabled

#SELINUX=enforcing

# SELINUXTYPE= can take one of these two values:

#     targeted - Targeted processes are protected,

#     mls - Multi Level Security protection.

#SELINUXTYPE=targeted            

:wq

[root@server4 bb]# setenforce  0

还有iptables防火墙也要开放。

 

安装rsync:

yum -y install rsync

并配置rsync:

mkdir /etc/rsyncd

touch /etc/rsyncd/rsyncd.conf

touch /etc/rsyncd/rsyncd.secrets

chmod 600 /etc/rsyncd/rsyncd.secrets

touch /etc/rsyncd/rsyncd.motd

vim /etc/rsyncd/rsyncd.conf

 

# Minimal configuration file for rsync daemon

# See rsync(1) and rsyncd.conf(5) man pages for help

# This line is required by the /etc/init.d/rsyncd script

pid file = /var/run/rsyncd.pid

port = 873

address = 192.168.150.131

uid = nobody

gid = nobody

uid = root

gid = root

use chroot = yes

read only = no

#limit access to private LANs

hosts allow=192.168.150.0/255.255.255.0

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

[webhome]

path = /szl/web

list=yes

ignore errors

auth users = www

secrets file = /etc/rsyncd/rsyncd.secrets

comment = web home

#exclude =   data/

定义密码用户文件:

vim  /etc/rsyncd/rsyncd.secrets

     www:123szl123

chmod 600 /etc/rsyncd/rsyncd.secrets

启动rsync服务程序:

/usr/bin/rsync --daemon  --config=/etc/rsyncd/rsyncd.conf

failed to create pid file /var/run/rsyncd.pid: File exists

解决方案:rm -rf /var/run/rsyncd.pid;再重新启动Rsync服务

开机启动:

echo "/usr/bin/rsync --daemon  --config=/etc/rsyncd/rsyncd.conf" >> /etc/rc.d/rc.local

创建模板目录:

mkdir /szl/web -p

 

 

Web1的配置:

Seliux和iptables这里就不多说了。

 

安装rsync配置测试一下到目标的连通性:

yum  -y install rsync 这里只需要配置一个密码文件就行了。

 

mkdir /etc/rsyncd

echo  "123szl123" > /etc/rsyncd/rsyncd.password

 

 

mkdir /szl/web –p

rsync -azv --password-file=/etc/rsyncd/rsyncd.password www@192.168.150.131::webhome /szl/web

把目标服务器/szl/web下的文件下载到本地:



测试成功!

 

安装sersync

tar zxf sersync2.5.4_64bit_binary_stable_final.tar.gz

cd GNU-Linux-x86/

mkdir /usr/local/sersync

mv * /usr/local/sersync/

 

 

配置sersync的配置文件:

cd /usr/local/sersync/

echo "123szl123" > rsync.passwd

ls /etc/rsyncd/rsyncd.password

chmod 600 rsync.passwd

 

vim /usr/local/sersync/confxml.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<head version="2.5">

    <host hostip="192.168.150.130" port="8008"></host>

    <debug start="false"/>

    <fileSystem xfs="false"/>

    <filter start="false">

        <exclude expression="(.*)\.svn"></exclude>

        <exclude expression="(.*)\.gz"></exclude>

        <exclude expression="^info/*"></exclude>

        <exclude expression="^static/*"></exclude>

    </filter>

    <inotify>

        <delete start="true"/>

        <createFolder start="true"/>

        <createFile start="false"/>

        <closeWrite start="true"/>

        <moveFrom start="true"/>

        <moveTo start="true"/>

        <attrib start="false"/>

        <modify start="false"/>

    </inotify>

 

    <sersync>

        <localpath watch="/szl/web">

            <remote ip="192.168.150.131" name="webhome"/>

            <!--<remote ip="192.168.8.39" name="tongbu"/>-->

            <!--<remote ip="192.168.8.40" name="tongbu"/>-->

        </localpath>

        <rsync>

            <commonParams params="-artuz"/>

            <auth start="true" users="www" passwordfile="/usr/local/sersync/rsync.passwd"/>

            <userDefinedPort start="false" port="873"/><!-- port=874 -->

            <timeout start="false" time="100"/><!-- timeout=100 -->

            <ssh start="false"/>

        </rsync>

        <failLog path="/usr/local/sersync/log/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->

        <crontab start="false" schedule="600"><!--600mins-->

            <crontabfilter start="false">

                <exclude expression="*.php"></exclude>

                <exclude expression="info/*"></exclude>

            </crontabfilter>

        </crontab>

        <plugin start="false" name="command"/>

    </sersync>

 

 

 

启动sersync程序:(要做环境变量)

sersync2 -r -d -o /usr/local/sersync/confxml.xml

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: