Linux 下配置多机实时同步
没钱的时候,用此方案做网站内容的负载均衡、异地备份,经济实惠又方便(仅针对网站文件做实时同步,如果数据库,则考虑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 =
slp refresh =
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.gz
cp inotify-tools-3.14.tar.gz /usr/local/src/
cd /usr/local/src
tar -xzvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr/local/inotify/ --libdir=/usr/lib64
make && 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 file
do
rsync -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. 大功告成,两个机器可以实现对于文件的修改、删除的实时同步
可能遇到的问题:
解决方法:关闭防火墙,或者把防火墙的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
Linux 下配置多机实时同步的更多相关文章
- RedHat Linux下利用sersync进行实时同步数据
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://linux5588.blog.51cto.com/65280/772054 拓扑图 ...
- 【转】CentOS5.6下配置rsync内网同步数据到外网
[转]CentOS5.6下配置rsync内网同步数据到外网 本文转自:http://www.linuxidc.com/Linux/2012-06/64070.htm 一.需求 卫士那边有一个需求,就是 ...
- 配置rsync+inotify实时同步
与上一篇同步做 配置rsync+inotify实时同步 1:调整inotify内核参数 在linux内核中,默认的inotify机制提供三个调控参数:max_queue_events.max_user ...
- linux下配置tomcat集群的负载均衡
linux下配置tomcat集群的负载均衡 一.首先了解下与集群相关的几个概念集群:集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台.在客户端看来,一个集群就象是一个服 ...
- Linux下配置Lamp
linux下配置lamp步骤: 一.快速安装Apache+PHP5+MySql 先更新: # yum update 然后安装LAMP环境:(163的yum源上只有php5.1.6 mysql 5.0. ...
- Linux下多任务间通信和同步-信号
Linux下多任务间通信和同步-信号 嵌入式开发交流群280352802,欢迎加入! 1.概述 信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式.信号可以直接进行用户空间进程和内核进程之间的 ...
- Linux下获得本机IP(非127.0.0.1)
在Linux下用InetAddress.getLocalHost()方法获取本机IP地址,得到的结果总是:127.0.1.1.原来这个是etc/hosts文件中的配置,并非网卡的IP地址. 可用代码如 ...
- Linux下配置一个VNC服务器
在Linux下配置一个VNC服务器,并设置2个用户,要求其中一个用户登录时不需要输入密码. 然后在客户端使用ssh+vncview的方式访问. 1确认vnc安装 2配置vncserver 3测试vnc ...
- linux下配置mysql默认编码utf8
linux下配置mysql默认编码utf8 下面是需要在对应地方加入的配置 [client] default-character-set=utf8 [mysqld] character-set-ser ...
随机推荐
- git学习笔记02-创建一个仓库提交一个文件-原来就是这么简单
打开安装好的git bash,设置你的git信息 (这个随便写就行) 初始化一个Git仓库,分三步.(创建文件夹也可以手动创建,也可以命令行创建) 第一步,进到一个目录 cd e: 第二步,创建一 ...
- JSP的隐式对象
JSP支持九个自动定义的变量,江湖人称隐含对象.这九个隐含对象的简介见下表: 参考资料:http://www.runoob.com/jsp/jsp-syntax.html
- JavaScript的严格模式
js除了在普通的常规模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).严格模式支持IE9+ Chrome FireFox 等主流浏览器. ...
- bootstrap学习笔记<十>(按钮组,导航)
1)按钮组.样式:class="btn-group" <div class="btn-group"> <button class=" ...
- 原生js实现的效果
原生js实现tooltip提示框的效果 在js的世界里面,每一个小的特效都那么微不足道,却又那么的令人向往与好奇.前端工程师的任务特别高大上,因为他们的一个小小的设计就会激发别人的求知欲.比如说我 ...
- hdu 4521 小明系列问题——小明序列(线段树 or DP)
题目链接:hdu 4521 本是 dp 的变形,却能用线段树,感觉好强大. 由于 n 有 10^5,用普通的 dp,算法时间复杂度为 O(n2),肯定会超时.所以用线段树进行优化.线段树维护的是区间内 ...
- Java Date与SimpleDateFormat
最近在弄一些涉及到时间处理的项目.本来自己写了一个时间转换函数,虽然能用但是过于麻烦而且不够规范,于是学习了下java自带的时间处理的类. public class Timechg { public ...
- jquery: 一些常见的获取
jq1.6+ 勾选checked $(#id).attr("checked", true); 判断checkbox是否选择 $(#id).prop("checked&qu ...
- Global Alignment(全局比对)--从算法(Needleman-Wunsch)到python实现
很早就知道有全局比对和局部比对这两种比对方法,都是用到的动态规划的思想,知道一些罚分矩阵的概念,但一直都没有机会搞透彻,一些算法的细节也不太清楚,也没有亲手编程实现. 现在由于项目需求,需要手动写一个 ...
- ios开发者证书 签发者无效
2月14日以后,由于苹果更新安全证书:会导致本机制作的所有开发者证书无效: 钥匙串里的开发者证书无法使用 解决方式: 重新下载苹果公司的安全证书,并安装 1: 先在钥匙串里搜索到老的证书,如果有,请先 ...