美文网首页
Linux文件同步

Linux文件同步

作者: Belic | 来源:发表于2018-10-28 23:25 被阅读0次

    环境

    *CentOS 7:

    1. 主机1: 10.99.11.12
    2. 主机2: 10.99.11.20

    配置双机信任

    # 10.99.11.12
    ssh-keygen  # 生成公钥和私钥
    ssh-copy-id root@10.99.11.20  
    
    

    ssh-copy-id root@<另一主机>: 复制公钥到另一台主机上~/.ssh/authorized_keys , 默认使用~/.ssh/id_rsa.pub公钥, 可用-i参数指定公钥

    rsync

    ...

    Unison + inotify-tools

    参考: unison + inotify 实现文件实时双向同步部署步骤

    Unison简介

    Unison是Windows、Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致。Unison拥有与其它一些同步工具或文件系统的相同的特性,但也有自身的特点:

    1. 跨平台使用;

    2. 对内核和用户权限没有特别要求;

    3. Unison是双向的,它能自动处理两分拷贝中更新没有冲突的部分,有冲突的部分将会显示出来让用户选择更新策略;

    4. 只要是能连通的两台主机,就可以运行unison,可以直接使用socket连接或安全的ssh连接方式,对带宽的要求不高,使用类似rsync的压缩传输协议。

    安装和使用

    yum install unison -y
    
    

    /usr/bin/unison <本地目录> ssh://remoteUser@<IP>/<远程目录的绝对路径>

    mkdir ~/test
    unison /root/test ssh://root@10.99.10.20//root/test
    
    

    配置文件

    使用后会在生成当前用户的配置文件~/.unison/default.prf

    vim ~/.unison/default.prf
    
    #!/bin/bash
    
    # this script is created by yourname.
    # Unison preferences file 
    
    #root = /root/test 
    
    #root = ssh://root@192.168.16.2//root/test
    
    #force = 
    
    #ignore = 
    
    batch = true
    
    #repeat = 1 
    
    #retry = 3 
    
    owner = true  # 保持同步过来的文件属性
    
    group = true  # 保持同步过来的文件组信息
    
    perms = -1  # 保持同步过来的文件读写权限
    
    fastcheck = false
    
    rsync = false  # 激活rsync传输模式
    
    sshargs = -C  # 使用ssh的压缩传输方式
    
    xferbycopying = true
    
    log = true
    
    logfile = /root/.unison/unison.log 
    
    

    可以用unison --help来查看具体的一些命令

    两个参数root=...是指定源和目标, 和命令行中写法一致; 也可以配置多个.prf文件, 通过unison <配置文件名>(不加配置文件名就是default)

    inotify-tools

    • 安装
    yum install inotify-tools
    
    • 同步脚本
    
    #!/bin/bash
    LOCAL_DIR="/root/test"
    REMOTE_DIR="/root/test/"
    REMOTE_USER="root"
    UNISION="/usr/bin/unison"
    INOTIFY="/usr/bin/inotifywait"
    IP_LIST_FILE="/root/iplist.txt"  # ip地址文件
    ATTRIBUTES="modify,delete,create,attrib"
    
    ${INOTIFY} -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e ${ATTRIBUTES} ${LOCAL_DIR} | while read files
    do
        for IPADDR in `sed '/^$/d' ${IP_LIST_FILE}`
        do
            ${UNISION} "${LOCAL_DIR}" "ssh://${REMOTE_USER}@${IPADDR}/${REMOTE_DIR}"
        done
    done
    
    
    • 执行脚本

    建议用supervisor

    nohup ./inotify.sh &
    
    

    两台机器配置基本相同(除了改下IP)

    相关文章

      网友评论

          本文标题:Linux文件同步

          本文链接:https://www.haomeiwen.com/subject/oykvtqtx.html