zoukankan      html  css  js  c++  java
  • Server Data Synchronization Via Linux rsync、rsync+inotify Between Load Balance Server

    目录

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

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

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

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

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

    2. rsync+crontab

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

    0x1: rsync特点

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

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

    0x2: rsync服务安装配置

    1. 部署rsync服务端

    1. 安装超级守护进程
    yum –y install xinetd
    
    2. 为rsync服务提供配置文件
    vim /etc/rsyncd.conf 
    #Global Settings        
    uid = nobody
    gid = nobody
    use chroot = no
    max connections = 5
    timeout = 600
    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
    
    3. 配置rsync认证文件(如果不需要密码则不需要配置)
    vim /etc/zhenghan.passwd
    echo "zhenghan:zhenghan" > /etc/zhenghan.passwd        
    cat /etc/zhenghan.passwd
    zhenghan:zhenghan
    
    4. 修改/etc/chandao.passwd的权限为600
    chmod 600 /etc/zhenghan.passwd
     
    5. 配置服务启动
    chkconfig rsync on
    service xinetd start
    
    6. 检查873端口是否成功监听
    ss -antlp | grep 873
    
    7. 检查rsync运行状态
    chkconfig --list

    2. 部署rsync客户端

    1. 设置rsync客户端的密码文件
        1) 密码文件
        echo zhenghan > /etc/zhenghan.passwd
        2) 数据库的密码文件
        echo zhenghan > /etc/db_zhenghan.passwd
    
    2. 修改密码文件的的权限为600
    chmod 600 /etc/zhenghan.passwd
    chmod 600 /etc/db_zhenghan.passwd 
    
    3. 测试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
    20 09 * * * /bin/sh /opt/scripts/rs_zhenghan.sh

    0x3: 示例

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

    1. CentOS 5
    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
    
    2. Red Hat Enterprice Linux 5
    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的优点

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

  • 相关阅读:
    转(一万小时定律的文章): const 与 readonly区别...
    项目中报错邮件方法
    Windows Phone(一) 正式开发之前的准备资料(主要注册开发者账号,手机解锁,激活码,程序部署)
    转(ASP.NET页面缓存)
    部署XAP时,部署工具提示部署无效,求解决!
    jQuery 1
    DOMform
    jQuery 2 一些常用的函数
    jQuery 6 层次选择器
    jQuery 3 对象转换
  • 原文地址:https://www.cnblogs.com/LittleHann/p/4189906.html
Copyright © 2011-2022 走看看