没钱的时候,用此方案做网站内容的负载均衡、异地备份,经济实惠又方便(仅针对网站文件做实时同步,如果数据库,则考虑mysql的多主架构)

一、机器配置及机房IP

A机,位于杭州,IP: 115.33.25.25 CentOS 6.4_x64

B机, 位于米为,IP: 192.8.172.133 CentOS 6.4 _x64

二、基础软件

因为要实现数据文件的实时同步,需要借助如下两个软件:

1. rsync  可以实现将本机的文件夹mirror到另外一台机器,支持多种模式,详细请man rsync

2. inotify-tool 可以实现监听Linux某个文件夹下的所有变动,包括添加、删除、访问、修改权限等等。

三、实现思路

利用inotify-tool,监听指定文件夹下的文件变化,获取变化的文件列表,利用rsync,将变动的文件实时推送到指定目标机器。

四、实际操作

了解了以上原理后,我们按照如下步骤来操作。

step1.在两台机器上分别安装rsync

yum install rsync -y #安装rsync

step2. 配置杭州节点服务器IP115.33.25.25上的:rsyncd.conf

mkdir /etc/rsyncd  #创建rsync的配置文件夹
touch /etc/rsyncd/rsyncd.conf  #创建rsync.conf文件
ln -s /etc/rsyncd/rsync.conf /etc/rsyncd.conf #软链接rsyncd.conf到etc目录vim /etc/rsyncd/rsyncd.conf #修改rsyncd.conf内容如下:uid = apache #使用apache用户对数据进行更新
gid = apache #使用apache用户组对数据进行更新
read only = false
transfer logging = true
max connections = 10
slp refresh = 300
hosts allow = 192.8.172.133 #杭州的机器配置:允许米国的机器IP访问本机,对于米国的配置,其IP要写成杭州的IP
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
log format = %h %o %f %l %b[web]  #其他机器与本机通讯时,将使用web作为module名称
path = /var/www/html  #要同步的文件夹名
comment = rsynctest
read only = false            #这里要设置为false,如果为true,则其他机器无法向本机推送变更
list = false
auth users = hanxianlong #使用daemon启动rsync时,对方机器可以使用该用户名与本机通讯
secrets file = /etc/rsyncd/pass_server.conf #其他机器与本机通讯时, 需要用到的用户名和密码信息,以如下格式保存:username:password
exclude from = /etc/rsyncd/exclude.txt #同步文件时,将会被忽略的文件或文件夹列表,每个一行

step 3. 杭州节点服务器建立rsync以daemon形式启动时需要的密码文件

创建pass_server.conf,内容如下:

vim /etc/rsyncd/pass_server.conf #编辑服务端的用户名和密码如下:
hanxianlong:abc123

chmod 600 /etc/rsyncd/pass_server.conf #修改文件权限为600,否则启动失败

step4. 杭州节点启动rsync服务

启动服务:

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

Step 4.1 米国的服务器实现数据到杭州的手工推送

rsync -avzP /var/www/ hanxianlong@115.33.25.25::web

但此时,需要你手工输入在pass_server.conf中配置的密码abc23 为了解决这个问题,我们在米国的机器上,建立一个pass.conf文件,在执行rsync命令时,使密码从该文件中读取:

vim /etc/rsyncd/pass.conf #编辑密码文件,内容为abc123
abc123

执行如下命令,不需要再输入密码:

rsync -avzP --password-file=/etc/rsyncd/pass.conf /var/www/ hanxianlong@115.33.25.25::web

准备工作已经完成了大半,在米国的机器上,对/var/www/目录下添加一个文件之后,执行上面的命令,到杭州的服务器上的/var/www文件夹下看看,是否已经被同步过来了?

step5 在米国节点安装inotify-tool,实现有文件变化时主动推送

wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gzcp inotify-tools-3.14.tar.gz /usr/local/src/cd /usr/local/srctar -xzvf inotify-tools-3.14.tar.gzcd inotify-tools-3.14./configure --prefix=/usr/local/inotify/ --libdir=/usr/lib64make && make install

以上安装inotify-tool完成,接下来要做的是实现inotity对指定文件夹的监听:

step 5.1 实现inotify对指定文件夹的监听,使得在有数据发生变化时同步到杭州节点

在任意目录下,创建inotify.sh文件,并修改其权限为a+x( chmod a+x inotify.sh)

#!/bin/sh
src=/var/www/
des=web
ip=115.33.25.25 #杭州节点IP/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format  '%T %w%f' -e modify,delete,create,attrib ${src} | while read  filedorsync -avz --delete --progress --password-file=/etc/rsyncd/pass.conf ${src} hanxianlong@${ip}::${des} &&echo "${src} was rsynced"
#                echo "---------------------------------------------------------------------------"done
~

step 5.2 启动监听

nohup inotify.sh &

Step 6. 测试是否实时将改动同步到杭州节点

cd /var/www

touch a.txt

到杭州节点IP,查看/var/www下,确认文件已经同步过去,如果出现问题,可以查看 nohup.log, 根据错误信息,对数据进行排查。

Step 7. Step1-4 在米国的机器上同样做一遍,注意将其中的IP修改为杭州的IP

Step 8. Step 5-6 在杭州的机器上同样做一遍,注意将其中的IP修改为米国的IP

Step9. 大功告成,两个机器可以实现对于文件的修改、删除的实时同步

可能遇到的问题:

rsync: failed to connect to X.X.X.X: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(107) [sender=2.6.8]
两台主机能相互ping通,报错信息 却说 没有路由到主机!
网上搜了搜,找到了问题的答案,如下:
故障原因:对方没开机、防火墙阻挡、通过的网络上有防火墙阻挡,都有可能。

  解决方法:关闭防火墙,或者把防火墙的tcp udp 的873端口打开,允许rsync通过。

  实施方案:

  1、防火墙的启动与停止

  # service iptables start / stop

  2、允许rsync通过防火墙

  为防重启将规则清除,我将规则直接加到规则配置文件里边了(/etc/sysconfig/iptables),如下:

  -A INPUT -p tcp -s X.X.X.X --dport 873 -j ACCEPT

  注意,这条规则要加在REJECT规则前。

  加好后,重启下 iptables(# service iptables restart)。

参考资料:

http://250688049.blog.51cto.com/643101/1019663

http://blog.csdn.net/songxixi/article/details/8787923

转载于:https://www.cnblogs.com/hanxianlong/p/4583818.html

Linux 下配置多机实时同步相关推荐

  1. 【Linux下Inotify + Rsync文件实时同步】

    Linux下Inotify + Rsync文件实时同步 一.使用前言* 随着公司业务的发展,单web服务器不能满足用户的访问,需要增加多台web服务器实现均衡高可用性访问.为了统一各web服务器之间的 ...

  2. RedHat Linux下利用sersync进行实时同步数据

    拓扑图如下: 可以有多个目标服务器,本机同步也可以(要同时开sersync服务和rsync守护进程) 需求: 1.源服务器上 要备份的是/data/bookfm/doc/book 目录包括子目录下的o ...

  3. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步

    1.什么是 Rsync? Rsync 是一个开源的快速备份工具,是Linux和UNIX操作系统默认安装的组件之一,可在不同主机间镜像同步整个目录,并支持增量备份文件传输,保持链接和权限,采用优化的同步 ...

  4. Linux下使用JRTPLIB进行实时流媒体编程

    收藏于 2013-04-22 迁移自本人的百度空间 -------------------------------- 转载自 http://blog.csdn.net/dongliqiang2006/ ...

  5. Linux下配置NTP时间服务器

    2019独角兽企业重金招聘Python工程师标准>>> Linux下配置NTP服务器 一.前言: Network Time Protocol(NTP)是用来使计算机时间同步化的一种协 ...

  6. linux 怎么配置apache,在Linux下配置Apache Web服务

    <在Linux下配置Apache Web服务>由会员分享,可在线阅读,更多相关<在Linux下配置Apache Web服务(10页珍藏版)>请在人人文库网上搜索. 1.在Lin ...

  7. Linux下配置DNS服务器之一--Master服务器

    Linux下配置DNS服务器之一--Master服务器 系统环境: RedHat EL55 Oracle 11g RAC 集群中引入了SCAN(Single Client Access Name)的概 ...

  8. Linux下配置DNS

    Linux下配置DNS 一.配置环境 1.Linux操作系统版本:RedHat AS 5 2.网络环境设置: IP:192.168.1.1    NetMark:255.255.255.0    Ge ...

  9. LINUX 下 配置MySQL数据库集群

    LINUX 下 配置MySQL数据库集群 MySQL数据库集群进行正确配置步骤(1) 此文章主要向大家讲述的是对MySQL数据库集群进行正确配置的实际操作步骤,以及对其概念的讲述,如果你对其相关的实际 ...

  10. linux grep 去重_GPS卫星同步时钟(北斗授时设备)LINUX下配置NTP方法 - NTP校时服务器...

    GPS卫星同步时钟(北斗授时设备)LINUX下配置NTP方法 GPS卫星同步时钟(北斗授时设备)LINUX下配置NTP方法 京准电子科技官微--ahjzsz 第一种方法: 系统使用命令行配置: 在 L ...

最新文章

  1. SpringBoot整合Shiro(认证+授权)
  2. struts文件上传时异常问题
  3. 配置根目录_npm配置文件package.json里面的字段你知道多少
  4. 安徽计算机学业水平测试内容,【2017年整理】安徽省学业水平测试信息技术(必修)知识点.doc...
  5. 红帽子RedHat Linux 9.0
  6. 关于JavaScript系列的自学,该怎么学比较好?
  7. Lua字符串及模式匹配
  8. Haxe东游记(上)part1.5:roadmap
  9. SQL去除数据库表中tab、空格、回车符等特殊字符的解决方法
  10. LNMP一键安装包+Thinkphp搭建基于pathinfo模式的路由(可以去除url中的.php)
  11. URAL - 1153 Supercomputer 大数开方
  12. 2011年01月18日
  13. 外贸型网站建设需要多少钱
  14. php投影,投影效果怎么做?PS制作逼真的投影效果
  15. Python-生成gif图片验证码
  16. Centos7配置ssh、rsh免密互信集群服务
  17. 基于eigen实现matlab hamming hann blakman 窗函数的实现
  18. ctfshow-萌新赛Crypto
  19. hdoj--1495--非常可乐(搜索+隐式图)
  20. Arduino(五)——呼吸灯

热门文章

  1. ajax无法访问,Ajax不能跨域访问的解决方案
  2. 2019ccpc河北省赛总结
  3. linux性能分析top iostat vmstat free,Linux性能分析工具(vmstat,iostat,sar)
  4. java 打印数据_Java 中的打印流
  5. 算法复杂度(2):常用数据结构的时间复杂度和空间复杂度 统计
  6. 微信小程序云开发教程-云函数操作数据库-排序查询、指令查询
  7. java web 部署_一步一步将java web项目部署到云服务器
  8. 基于SSM的学生宿舍管理系统
  9. 基于SSM的小区报修系统
  10. js获取后端传过来的数据