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 = 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. 大功告成,两个机器可以实现对于文件的修改、删除的实时同步
可能遇到的问题:
解决方法:关闭防火墙,或者把防火墙的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 下配置多机实时同步相关推荐
- 【Linux下Inotify + Rsync文件实时同步】
Linux下Inotify + Rsync文件实时同步 一.使用前言* 随着公司业务的发展,单web服务器不能满足用户的访问,需要增加多台web服务器实现均衡高可用性访问.为了统一各web服务器之间的 ...
- RedHat Linux下利用sersync进行实时同步数据
拓扑图如下: 可以有多个目标服务器,本机同步也可以(要同时开sersync服务和rsync守护进程) 需求: 1.源服务器上 要备份的是/data/bookfm/doc/book 目录包括子目录下的o ...
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
1.什么是 Rsync? Rsync 是一个开源的快速备份工具,是Linux和UNIX操作系统默认安装的组件之一,可在不同主机间镜像同步整个目录,并支持增量备份文件传输,保持链接和权限,采用优化的同步 ...
- Linux下使用JRTPLIB进行实时流媒体编程
收藏于 2013-04-22 迁移自本人的百度空间 -------------------------------- 转载自 http://blog.csdn.net/dongliqiang2006/ ...
- Linux下配置NTP时间服务器
2019独角兽企业重金招聘Python工程师标准>>> Linux下配置NTP服务器 一.前言: Network Time Protocol(NTP)是用来使计算机时间同步化的一种协 ...
- linux 怎么配置apache,在Linux下配置Apache Web服务
<在Linux下配置Apache Web服务>由会员分享,可在线阅读,更多相关<在Linux下配置Apache Web服务(10页珍藏版)>请在人人文库网上搜索. 1.在Lin ...
- Linux下配置DNS服务器之一--Master服务器
Linux下配置DNS服务器之一--Master服务器 系统环境: RedHat EL55 Oracle 11g RAC 集群中引入了SCAN(Single Client Access Name)的概 ...
- Linux下配置DNS
Linux下配置DNS 一.配置环境 1.Linux操作系统版本:RedHat AS 5 2.网络环境设置: IP:192.168.1.1 NetMark:255.255.255.0 Ge ...
- LINUX 下 配置MySQL数据库集群
LINUX 下 配置MySQL数据库集群 MySQL数据库集群进行正确配置步骤(1) 此文章主要向大家讲述的是对MySQL数据库集群进行正确配置的实际操作步骤,以及对其概念的讲述,如果你对其相关的实际 ...
- linux grep 去重_GPS卫星同步时钟(北斗授时设备)LINUX下配置NTP方法 - NTP校时服务器...
GPS卫星同步时钟(北斗授时设备)LINUX下配置NTP方法 GPS卫星同步时钟(北斗授时设备)LINUX下配置NTP方法 京准电子科技官微--ahjzsz 第一种方法: 系统使用命令行配置: 在 L ...
最新文章
- SpringBoot整合Shiro(认证+授权)
- struts文件上传时异常问题
- 配置根目录_npm配置文件package.json里面的字段你知道多少
- 安徽计算机学业水平测试内容,【2017年整理】安徽省学业水平测试信息技术(必修)知识点.doc...
- 红帽子RedHat Linux 9.0
- 关于JavaScript系列的自学,该怎么学比较好?
- Lua字符串及模式匹配
- Haxe东游记(上)part1.5:roadmap
- SQL去除数据库表中tab、空格、回车符等特殊字符的解决方法
- LNMP一键安装包+Thinkphp搭建基于pathinfo模式的路由(可以去除url中的.php)
- URAL - 1153 Supercomputer 大数开方
- 2011年01月18日
- 外贸型网站建设需要多少钱
- php投影,投影效果怎么做?PS制作逼真的投影效果
- Python-生成gif图片验证码
- Centos7配置ssh、rsh免密互信集群服务
- 基于eigen实现matlab hamming hann blakman 窗函数的实现
- ctfshow-萌新赛Crypto
- hdoj--1495--非常可乐(搜索+隐式图)
- Arduino(五)——呼吸灯
热门文章
- ajax无法访问,Ajax不能跨域访问的解决方案
- 2019ccpc河北省赛总结
- linux性能分析top iostat vmstat free,Linux性能分析工具(vmstat,iostat,sar)
- java 打印数据_Java 中的打印流
- 算法复杂度(2):常用数据结构的时间复杂度和空间复杂度 统计
- 微信小程序云开发教程-云函数操作数据库-排序查询、指令查询
- java web 部署_一步一步将java web项目部署到云服务器
- 基于SSM的学生宿舍管理系统
- 基于SSM的小区报修系统
- js获取后端传过来的数据