V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
gzelvis
V2EX  ›  Linux

想把上线 linux 用于生产的服务器的某个文件夹 与 本地公司部门服务器也是 linux 的进行实时同步,有什么办法?

  •  
  •   gzelvis · 2016-03-04 02:13:39 +08:00 · 5172 次点击
    这是一个创建于 3217 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目的是这样的,在本地公司做一个 100% 与服务器同样的环境,进行模拟调试或备份,因此最好能实现与生产服务器同时备份(就是源服务器多了什么文件本地立刻就开始同步),就算不能实时同步,否做个 cron 命令每天晚上进行文件夹同步。其它文件夹都好说,关键是图片目录, discuz 的图片目录那如繁星般的文件如果用差一点的 ftp 软件光 list 都会死机的。。。

    不知道各位有没有什么办法, 两边环境都是 linux
    32 条回复    2016-03-14 17:17:44 +08:00
    shiny
        1
    shiny  
       2016-03-04 02:14:52 +08:00
    rsync 定时同步试过吗
    SoloCompany
        2
    SoloCompany  
       2016-03-04 02:37:37 +08:00
    btsync?
    gzelvis
        3
    gzelvis  
    OP
       2016-03-04 02:42:54 +08:00 via iPhone   ❤️ 1
    回楼上两位,我就是第一次试这样的备份方式,什么 sync 都没试过,以前 windows 和文件还少的时候时候 flashfxp 的文件夹同步功能。 linux 下和那么多子文件真不知道应该怎么办
    ryd994
        4
    ryd994  
       2016-03-04 04:07:07 +08:00 via Android
    cron+rsync
    没什么大不了的
    Theo14
        5
    Theo14  
       2016-03-04 08:32:38 +08:00
    可以用 lsyncd 不需要 cron
    我之前写的一个配置方法 http://gunner.me/archives/199
    motecshine
        6
    motecshine  
       2016-03-04 08:51:07 +08:00 via Android
    不是有 git hooks 么,你们公司不用版本控制么
    noli
        7
    noli  
       2016-03-04 08:53:54 +08:00
    你只需要知道 linux 有 inode ,用 libuv 或者 nodejs 干这个应该简单得不能再简单了
    popil1987
        8
    popil1987  
       2016-03-04 09:00:38 +08:00
    DRDB 或者 lsyncd
    drdb 是块同步,应该比基于文件比较的要快,但我只在内网环境下用过。
    fff333
        9
    fff333  
       2016-03-04 09:19:31 +08:00 via Android
    Rsync 的时候,如果文件改变,会失败
    lfzyx
        10
    lfzyx  
       2016-03-04 09:36:55 +08:00
    lsyncd +1
    pupie
        11
    pupie  
       2016-03-04 10:04:38 +08:00
    试过分布式文件系统没有呢,曾经也有这样的需求,最后是在两地架设一个分布式文件系统,文件夹同步。任意一端的修改就会同步到另外一端。
    linux 不太熟,我记得 windows server 自身都有这样的功能
    likuku
        12
    likuku  
       2016-03-04 14:20:39 +08:00
    @pupie 分布式文件系统,那得把当前存储的东西迁移到新创建的分布式文件系统上。 windows 的 DFS 也有延迟的,看文件大小和网络速度。因为要通过公网,那么 vpn 把两头 连起来也是必要的了。
    likuku
        13
    likuku  
       2016-03-04 14:22:16 +08:00   ❤️ 1
    @popil1987 DRBD 是网络 RAID ,对网络品质要求蛮高的,同一个局域网下还不错,且从机的 drbd 数据盘是不可以被挂载的,只能用于离线备份。
    skydiver
        14
    skydiver  
       2016-03-04 14:24:20 +08:00
    @noli 你想说的是 inotify 吧
    noli
        15
    noli  
       2016-03-04 17:58:20 +08:00
    @skydiver 自己稍微 baidu 或者 google 一下又不会怀孕……非要浪费我 5 个铜币

    https://zh.wikipedia.org/zh/Inode

    inode 是指在许多“类 Unix 文件系统”中的一种数据结构。每个 inode 保存了文件系统中的一个文件系统对象(包括文件、目录、设备文件、 socket 、管道, 等等)的元信息数据,但不包括数据内容或者文件名[1]。
    noli
        16
    noli  
       2016-03-04 18:03:08 +08:00
    @skydiver 我错了,确实是 inotify 。 你说的是我想说的那个东西的正确名字。


    nodejs 封装了 inotify
    jarlyyn
        17
    jarlyyn  
       2016-03-04 18:18:59 +08:00
    rysnc+inotify

    写过 python 的脚本。
    vus520
        18
    vus520  
       2016-03-04 18:25:25 +08:00
    一般模式
    rysnc+inotify

    网络好就上
    分布式文件系统
    caola
        19
    caola  
       2016-03-04 20:07:53 +08:00
    一般 linux 都自带有 rsync ,为什么不用呢,一命令就完成同步,
    Srar
        20
    Srar  
       2016-03-04 20:12:22 +08:00
    Syncthing
    msg7086
        21
    msg7086  
       2016-03-04 22:16:24 +08:00
    rsync 毫无压力啊。我们论坛 Discuz 附件 20 多万个文件同步起来飞快的。
    gzelvis
        22
    gzelvis  
    OP
       2016-03-05 01:10:15 +08:00
    @msg7086 具体是怎么做的?还望赐教 。我指具体的命令
    msg7086
        23
    msg7086  
       2016-03-05 02:01:48 +08:00
    @gzelvis
    比如说生产服务器位于 a.b.c.d ,文件位于 /var/www/bbs/;
    本地测试用服务器位于 r.s.t.u ,文件也位于 /var/www/bbs/。
    现在你站在本地服务器上,那么可以用 rsync a.b.c.d:/var/www/bbs /var/www -a 来从生产机上拉数据。
    反过来,如果你站在生产服务器上,那么可以用 rsync /var/www/bbs r.s.t.u:/var/www -a 来向本地机器推送数据。

    如果从外往内推数据的话,需要你这边能从公网访问。

    上面说的 inotify 实时推送,就是生产服务器上每次拿到文件新增的消息以后,把路径填进 rsync 的命令行里,实时同步传送。
    如果对实时性要求不高的话,定时推送我觉得是足够了。
    gzelvis
        24
    gzelvis  
    OP
       2016-03-05 02:23:25 +08:00
    @msg7086 非常感谢你那么耐心的回答,想问下定时推送是设定 cron 每天做一次吗?能否把这个命令行也告诉我?再次感谢
    gzelvis
        25
    gzelvis  
    OP
       2016-03-05 02:24:02 +08:00
    @msg7086 像论坛的现在没那么多人了,估计就设定每天半夜 3 点跑一次同步应该就好了
    cevincheung
        26
    cevincheung  
       2016-03-05 02:27:21 +08:00
    哎呀我去……这不是说 ipfs 呢么
    msg7086
        27
    msg7086  
       2016-03-05 02:33:04 +08:00
    @gzelvis 你可以搜索一下 crontab 的编辑方法。
    只要一次同步成功以后,把相同的命令写进 crontab 的命令区就行了。
    无密码登录可以搜索 SSH 密钥登录。
    gzelvis
        28
    gzelvis  
    OP
       2016-03-05 02:34:20 +08:00
    @msg7086 好的我先试试
    allan888
        29
    allan888  
       2016-03-05 06:18:26 +08:00
    感觉太麻烦了, btsync 我觉得是最简单的。
    本地的机器和服务器同步,然后本地设置成不能删除的模式。
    julor
        30
    julor  
       2016-03-05 07:07:12 +08:00 via Android
    可以试试开源的 syncthing ,记得在服务器上设置为 master 模式
    qgb
        31
    qgb  
       2016-03-14 06:34:22 +08:00
    @cevincheung what ?
    cevincheung
        32
    cevincheung  
       2016-03-14 17:17:44 +08:00
    @qgb ipfs p2p file share. 可以订阅节点。互相同步数据。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3042 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 13:16 · PVG 21:16 · LAX 05:16 · JFK 08:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.