目录

. 远程文件同步的应用场景
. rsync+crontab
. rsync+inotify

1. 远程文件同步的应用场景

在负载均衡集群的应用场景中,往往在多台web server的前端有一个提供负载均衡的Load Balance Server

. 客户端的通过访问一个统一的域名到这个Load Balance上,例如:www.test.com,Load Balance Server会根据负载调度算法将请求合理地分配到集群的子节点中
. 客户端上传的文件同样也会被Load Balance Server"随机"的分配到集群中的一台节点服务器中

这就造成了一个问题,如何来保证集群各个子节点服务器的状态、数据一致性,即我们保证客户端能够像对待单点那样去上传、并下载文件,这就需要在集群的各个子节点之间进行双向的数据同步

2. rsync+crontab

rsync(remote sync)是类unix系统下的数据镜像备份工具。一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH、rsync主机同步

0x1: rsync特点

. 可以镜像保存整个目录树和文件系统
. 可以很容易做到保持原来文件的权限、时间、软硬链接
. 无须特殊权限即可安装
. 快速
) 第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件,即增量备份
) rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽
. 安全
) 可以使用scp、ssh等方式来传输文件
) 可以通过直接的socket连接
. 支持匿名传输,以方便进行网站镜象

了解了rsync的基本概念之后,我们来学习一下如何配置rsync服务,从本质上来说,rsync是C/S架构的服务体系,我们只能实现client从server端拉取数据,所以我们如果要在多台服务器之间进行双向备份,则每一台服务器即是server,又是clinet

0x2: rsync服务安装配置

1. 部署rsync服务端

. 安装超级守护进程
yum –y install xinetd . 为rsync服务提供配置文件
vim /etc/rsyncd.conf
#Global Settings
uid = nobody
gid = nobody
use chroot = no
max connections =
timeout =
pid file = /var/run/rsyncd.pid
lockfile = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log #module
[zhenghan]
path = /opt/backup/
ignore errors = yes
read only = no
write only = no
hosts allow = *
hosts deny = *
list = yes
uid = root
gid = root
auth users = zhenghan
secrets file = /etc/zhenghan.passwd . 配置rsync认证文件(如果不需要密码则不需要配置)
vim /etc/zhenghan.passwd
echo "zhenghan:zhenghan" > /etc/zhenghan.passwd
cat /etc/zhenghan.passwd
zhenghan:zhenghan . 修改/etc/chandao.passwd的权限为600
chmod /etc/zhenghan.passwd . 配置服务启动
chkconfig rsync on
service xinetd start . 检查873端口是否成功监听
ss -antlp | grep . 检查rsync运行状态
chkconfig --list

2. 部署rsync客户端

. 设置rsync客户端的密码文件
) 密码文件
echo zhenghan > /etc/zhenghan.passwd
) 数据库的密码文件
echo zhenghan > /etc/db_zhenghan.passwd . 修改密码文件的的权限为600
chmod /etc/zhenghan.passwd
chmod /etc/db_zhenghan.passwd . 测试rsync客户端是否可以从rsync服务器拉成功
rsync -vzrtopg --password-file=/etc/zhenghan.passwd zhenghan@192.168.200.16::zhenghan/* /tmp 4. rsync同步脚本
#!/bin/bash
#func:rsync for zhenghan
#Version:v1.0 ntpdate 192.168.200.16 > /dev/null 2>&1
date=`date +%Y-%m-%d`
dest_chandao=/opt/backup/zhenghan/test
dest_db=/opt/backup/zhenghan/db_zhenghan
remote_zhenghan=192.168.200.16
remote_db=192.168.200.18
module_zhenghan=zhenghan
module_db=db_zhenghan
user1=zhenghan@139.com main()
{
rsync -vzrtopg --password-file=/etc/zhenghan.passwd zhenghan@$remote_zhenghan::$module_zhenghan/*$date* $dest_zhenghan
if [ $? -eq 0 ];then
echo "zhenghan-*$date* was rsynced" >> /opt/log/zhenghan_rsync.log 2>&1;
else
echo "zhenghan-*$date* was not rsynced" >> /opt/log/zhenghan_rsync.log 2>&1;
echo "zhenghan rsync was faild " | mail -s "zhenghan backup" $user2;
fi rsync -vzrtopg --password-file=/etc/db_zhenghan.passwd zhenghan@$remote_db::$module_db/*$date* $dest_db
if [ $? -eq 0 ];then
echo "db_zhenghan_*$date* was rsynced" >> /opt/log/zhenghan_rsync.log 2>&1;
else
echo "db_zhenghan_*$date* was not rsynced" >> /opt/log/zhenghan_rsync.log 2>&1;
echo "db_zhenghan rsync was faild " | mail -s "zhenghan backup" $user2;
fi
}
main

3. 定时任务

rsync是一个C/S的架构,服务端和客户端配置好之后,通常的做法是使用crontab定时任务在client上从server上"拉取"数据

crontab -e
##rsync for zhenghan
* * * /bin/sh /opt/scripts/rs_zhenghan.sh

0x3: 示例

使用2台linux机器进行双击互备份的实验

. CentOS
192.168.207.151
//从192.168.207.145增量(加/减)备份"/opt/apache/htdocs/vulfiles"这个目录,到本地[vulfiles]节点(由配置文件决定具体本机目录)
* * * * * rsync -vzrtopg --progress 192.168.207.145::vulfiles /opt/apache/htdocs/vulfiles . Red Hat Enterprice Linux
192.168.207.145
//从192.168.207.151增量(加/减)备份"/opt/apache/htdocs/vulfiles"这个目录,到本地[vulfiles]节点(由配置文件决定具体本机目录)
* * * * * rsync -vzrtopg --progress 192.168.207.151::vulfiles /opt/apache/htdocs/vulfiles

Relevant Link:

http://baike.baidu.com/link?url=EDZps6hVI-m9hmOcS5bbX9ARL2PmJ1V6ugHWeCDJp7Yz_40MnTLl0wrIMmpQOobqpL6OHfVTYZMwgJF8xE_I3a
http://nmshuishui.blog.51cto.com/1850554/1532927

3. rsync+inotify

0x1: rsync+inotify的优点

. 在数据量非常大的情况下,传统的任务计划,rsync都会先去遍历目标目录,把所有数据做一次特征码比对,然后进行差量传输,这个过程会是很漫长的,对于那些要求实时性更新比较高的企业来说,无疑是一场噩梦
. Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2..13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、***,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件
. 服务器性能
) rsync+crontab会定时去检查是否有文件更新,这势必会造成服务器性能下降
) rsync+inotify组合是触发式更新,只有在数据文件有变化时,才会去更新,因此相对前者而言,是提高了服务器性能
. 数据实时性
) rsync+crontab是周期性任务计划,不能保证数据的实时性
) rsync+inotify组合是触发式更新,只要有数据变化,就立刻同步更新

0x2: rsync+inotify安装配置

rsync+inotify和rsync+crontab最大的差别在于同步的触发条件,即同步命令的发起条件不同,rsync+inotify是通过linux的inotify机制去实时地触发双向文件同步

Relevant Link:

http://nmshuishui.blog.51cto.com/1850554/1387048

Copyright (c) 2014 LittleHann All rights reserved

Server Data Synchronization Via Linux rsync、rsync+inotify Between Load Balance Server的更多相关文章

  1. 3、架构--cp、scp、rsync、实时监控与同步

    笔记 1.晨考 1.VPN的搭建步骤 2.vpn中的iptables是什么作用? 网络转发 2.昨日问题 1.yum源问题 2.VPN链接正常,但是没办法通过172 3.VPN链接时,出现了DNS错误 ...

  2. linux命令:拷贝命令家族(cp、scp、rsync)

    Linux命令中:rsync和cp之间的区别 - 小 楼 一 夜 听 春 雨 - 博客园https://www.cnblogs.com/kex1n/p/7008178.html cp,scp,rsyn ...

  3. rsync命令 续集 、linux系统日志、screen工具

    1.rsync 通过服务进行监听同步: 开启服务:rsync --daemon  (默认开启873端口) 需要编辑配制文件:/etc/rsyncd.conf port=873log file=/var ...

  4. linux使用rsync、inotify-tools实现多台服务器文件实时同步

    需求:将本地192.168.1.10上的/data/wwwroot目录同步到 1.来源服务器上安装rsync.inotify-tools yum -y install rsync yum -y ins ...

  5. Linux下使用SSH、Crontab、Rsync三工具实现数据自动备份

    Linux下使用SSH.Crontab.Rsync三工具实现数据自动备份 作为网管人员大概都无一例外的经历过系统备份,尤其是重要系统的备份.重要数据库系统的备份工作.由于备份是个频繁而琐碎的工作,如何 ...

  6. rsync通过服务同步、Linux系统日志、screen工具 使用介绍

    第8周5月15日任务 课程内容: 10.32/10.33 rsync通过服务同步10.34 linux系统日志10.35 screen工具 扩展1. Linux日志文件总管logrotate http ...

  7. Linux CentOS7 rsync通过服务同步、linux系统日志、screen工具

    一.rsync通过服务同步 rsyncd.conf配置文件详解 port:指定在哪个端口启动rsyncd服务,默认是873端口. log file:指定日志文件. pid file:指定pid文件,这 ...

  8. Linux centos7 rsync工具介绍、rsync常用选项、rsync通过ssh同步

    一.rsync工具介绍 rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync.rsync是Linux系统下的文件同步和数据传输工具,它采用“rsync ...

  9. linux服务之rsync

    http://www.cnblogs.com/itech/archive/2010/06/13/1757952.html rsync与mfs好像有点类似,都是传输块的chunk,chunk的 1)软件 ...

随机推荐

  1. java 21 - 6 字符缓冲流的特殊方法以及该方法高效复制文件

    字符缓冲流的特殊方法: A.BufferedWriter: public void newLine():根据系统来决定换行符 private static void write() throws IO ...

  2. PCTF-2016-WEB

    Pctf ** web100 PORT51**  开始看到这个真的无法下手,想过用python–socket编程或者scapy发包.自己觉得是可以的,但是没有去试,后面看一大神writeup,知道: ...

  3. 实现了一个简单的cage变形器

    今天实现了一个简单变形器,可以用一个网格的形状影响另一个网格的形状. 如图,蓝色网格的形状被灰色网格操控. 当前的算法非常简单,就是计算蓝色网格每个点到灰色网格每个点的距离,以距离x次方的倒数作为权重 ...

  4. yum报错:Error: xz compression not available

    测试服务器(centos6.5)经过一段时间的折腾,有一天在上面进行yum操作时突然出现下面的报错: Error: xz compression not available 最后经过一番排查,发现原因 ...

  5. javascript中的后退和刷新

    <input type=button value=刷新 onclick="window.location.reload()"><input type=button ...

  6. 蒙古人交友网站 www.mengguren.com

    蒙古人交友http://www.mengguren.com/ 经过一个多月的努力,终于上线了,虽然长得丑陋一些.功能简单一些,欢迎大家注册,方便别人能找到您.吉日嘎拉<252056973@qq. ...

  7. PagerIndicator主题样式修改

    默认的黑色好丑 所以大家需要动手改造一下, 1 打开 Manifest.xml <activity android:name="com.zb.zhihuianyang.MainActi ...

  8. Activiti系列:带有serviceTask的或者定时启动任务的流程部署失败的原因分析

    在将两个带有serviceTask任务的流程部署到数据库的时候发现无法导入,最终分析出如下问题: 1)流程1是打算让定时启动事件可以每小时触发一次 由于原来是用 R/2015-11-01T01:00: ...

  9. 从Swift学习iOS开发的路线指引

    本文主要是楼主近段时间从Swift语法开始自学iOS开发的流程总结,PS 一个前提,楼主的生存环境中买不到一本iOS开发中文教程,所以基本都是百度摸索出来的 >_< 主要流程 学习Swif ...

  10. Android Studio上方便使用butterknife注解框架的偷懒插件Android Butterknife Zelezny

    首先提下ButterKnifey已经更新到版本7.0.1了,现在注解已经不叫@InjectView了,而叫@Bind,感觉更贴合语义.同时注册的方式也从 ButterKnife.inject(this ...