开发杂记

Centos/ubuntu服务器部署lsyncd+rsync来实现多台服务器之间的文件的实时同步和备份

栏目

开发杂记

时间

2024-07-17

投稿

Admin

最后修改时间:2024-09-28

一:多台服务器之间的文件同步难题

rsync是一个远程数据同步工具 它通过比较两边文件是否相同来进行同步更新,但是缺点也很明显 它只有执行同步命令的时候才会进行同步操作,为了达到两台或多台服务器之间的文件同步、备份只能通过定时任务来触发rsync。那么有没有实时监控文件变化来达到实时同步的方法呢?有的,这就是lsyncd+rsync方案:lsyncd 用来实时监听文件变化,去触发rsync进行同步操作。

 

二:演示环境

一台备份服务器:服务器A  IP:192.168.0.11  (接收端,安装rsync 以daemon模式启动)

一台运行web和数据库的服务器:服务器B  IP:192.168.0.12    (发送端,安装lsyncd+rsync)

 

三:服务器A (接收端) 安装配置rsync

  1. 安装rsync

    yum install -y rsync
    
    #ubuntu 
    sudo apt-get install rsync
  2. 配置rsync

    vim /etc/rsyncd.conf
    
    #ubuntu 手动创建这个文件

    修改配置文件:这里使用了两个模块 可以根据你的需求进行模块增减 模块节点名不要重复

    #最好把所有#注释全部去掉不然有些系统经常出现莫名其妙验证失败
    uid = nobody
    gid = nobody
    use chroot = yes
    max connections = 20
    strict mode=yes
    pid file = /var/run/rsyncd.pid
    lock file=/var/run/rsync.lock
    log file=/var/log/rsyncd.log
    [db_back]  #模块名称 有多个复制多个模块即可 注意模块名不要重复
    path = /home/backup/mysql/
    comment = backup mydql
    ignore errrors
    read only = no
    write only = no
    hosts allow = *
    hosts deny = *
    list = false
    uid = root
    gid = root
    auth users = rsync_user  #这里是同步用户名 下面介绍怎么创建
    secrets file = /etc/rsyncd.pwd  #这里是密码文件 下面介绍怎么创建
    [web_back]
    path = /home/backup/web/
    comment = backup web
    ignore errrors
    read only = no
    write only = no
    hosts allow = *
    hosts deny = *
    list = false
    uid = root
    gid = root
    auth users = rsync_user
    secrets file = /etc/rsyncd.pwd
  3. 创建同步用的用户和组

    groupadd rsync #创建一个rsync用户组
    useradd -s /sbin/nologin -M -g rsync rsync_user #创建一个不需要登陆的rsync组内用户rsync_user 组名在前,用户名在后
  4. 创建密码文件

    echo "rsync_user:123456" >/etc/rsyncd.pwd #录入用户名和密码创建密码文件
    chmod 600 /etc/rsyncd.pwd #修改密码文件的权限不然后期报错无法认证
  5. 创建接收文件的目录并授予用户权限

    mkdir -p /home/backup/mysql/
    mkdir -p /home/backup/web/
    chown -R rsync_user:rsync /home/backup/mysql/ #用户名在前,组名在后
    chown -R rsync_user:rsync /home/backup/web/ #用户名在前,组名在后
  6. 开放防火墙873端口

    firewall-cmd --add-port=873/tcp --permanent --zone=public
    firewall-cmd --reload
    
    #ubuntu 用命令行工具ufw
    sudo ufw allow 873/tcp
    sudo ufw disable
    sudo ufw enable
  7. 启动rsync

    systemctl start rsyncd
    systemctl enable rsyncd #设置开机启动
    systemctl restart rsyncd #重启
    systemctl stop rsyncd #停止
    
    #ubuntu 启动rsync
    systemctl start rsync
    systemctl enable rsync #设置开机启动
    systemctl restart rsync #重启
    systemctl stop rsync #停止
    ###############################
    ps -ef |grep rsync #查看是否已daemon模式成功启动

至此服务器A 接收端 已配置完成

四:服务器B 发送端 安装lsyncd+rsync 并配置

  1. 安装 rsync

    发送端也需要安装 rsync  不需要启动rsync,安装配置好即可,lsyncd需要用到rsync命令去同步文件

    yum install -y rsync
    #ubuntu安装看上面
    groupadd rsync #创建一个rsync用户组
    useradd -s /sbin/nologin -M -g rsync rsync_user #创建一个不需要登陆的rsync组内用户rsync_user 组名在前,用户名在后
    echo "123456" >/root/rsyncd.pwd #录入密码创建密码文件 由于发送文件时已带有用户名,所以此处只录入密码即可
    chmod 600 /root/rsyncd.pwd #修改密码文件的权限不然后期报错无法认证
  2. 创建同步目录(这个目录的文件有增删改操作即同步到服务器A)

    mkdir /home/web/mysite
    mkdir /home/web/mydbkack
  3. 同步测试

    rsync -avz /home/web/mysite/ rsync_user@192.168.0.11::web_back --password-file=/root/rsyncd.pwd
    #/home/web/mysite/是服务器B需要同步到服务器A的目录
    #rsync_user@192.168.0.11::web_back 认证用户名@服务器A对的IP::服务器A的rsync配置模块
    #--password-file=/root/rsyncd.pwd 用来认证的密码文件 免交互
    如果提示文件夹权限问题,应该是防火墙问题,记得开放873端口。认证问题仔细查看用户名和密码文件位置或者是否输错
  4. 安装 lsyncd 

     yum -y install lsyncd
     #如果提示无法安装,可以通过安装EPEL存储库的方式再用yum安装lsyncd
     yum install -y epel-release
     
     #ubuntu安装
     sudo apt-get install lsyncd
  5. 配置 lsyncd 

    vim /etc/lsyncd.conf
    
    #ubuntu lsyncd的配置文件是/etc/lsyncd/lsyncd.conf.lua
    #ubuntu 如果切换lsyncd配置文件 记得修改一下/etc/init.d文件夹的lsyncd启动配置 
    # 然后使用命令systemctl daemon-reload 重新加载一下
    

    配置如下 --注释部分也最好去掉

    settings {
       logfile = "/var/log/lsyncd/lsyncd.log",
       statusFile = "/var/log/lsyncd/lsyncd.status",
       inotifyMode = "CloseWrite",
       maxProcesses = 20,
       maxDelays = 1,
       nodaemon = false,
    }
    sync {
       default.rsync,
       source = "/home/web/mysite/",                         --监控目录
       target = "rsync_user@192.168.0.11::web_back",    --rsync的认证用户名、IP、模块
       excludeFrom = "/home/file_exclude.lst",    --排除列表文件 比如一些临时文件或者日志文件不进行同步 支持规则写法
       delete = false, --删除时是否也要触发备份事件
       delay = 15,
       init = false,
       rsync = {
           binary = "/usr/bin/rsync",               --rsync可执行文件路径,必须为绝对路径
           password_file = "/root/rsyncd.pwd",       --密码认证文件
           archive = true,
           compress = false,
           verbose = false,
           _extra = {"--bwlimit=1000", "--omit-link-times"} --bwlimit传输速率
       }
    }
    sync {
       default.rsync,
       source = "/home/web/mydbkack/",                         --监控目录
       target = "rsync_user@192.168.0.11::db_back",    --rsync的认证用户名、IP、模块
       excludeFrom = "/home/file_exclude.lst",    --排除列表文件
       delete = false, --删除时是否也要触发备份事件
       delay = 15,
       init = false,
       rsync = {
           binary = "/usr/bin/rsync",               --rsync可执行文件路径,必须为绝对路径
           password_file = "/root/rsyncd.pwd",       --密码认证文件
           archive = true,
           compress = false,
           verbose = false,
           _extra = {"--bwlimit=1000", "--omit-link-times"} --bwlimit传输速率
       }
    }
  6. 排除同步的文件列表 基础写法

    #如所有包含runtime和logs的目录
    **/runtime/**
    **/logs/**
    ##规则如下:
    如果规则以斜线/开头,则从头开始要匹配全部
    如果规则以/结尾,则要匹配监控路径的末尾
    ?匹配任何字符,但不包括/
    *匹配0或多个字符,但不包括/
    **匹配0或多个字符,可以是/
  7. 创建 lsyncd 的日志文件

    mkdir -p /var/log/lsyncd/
    touch /var/log/lsyncd/lsyncd.log
    touch  /var/log/lsyncd/lsyncd.status
    chmod 600 /var/log/lsyncd/lsyncd.log
    chmod 600 /var/log/lsyncd/lsyncd.status
  8. 启动并设置开机启动

    systemctl start lsyncd
    systemctl enable lsyncd #开机启动
    systemctl restart lsyncd #重启
    systemctl stop lsyncd #停止
    
    #启动成功日志文件会打印
    Mon Jul 19 16:11:58 2024 Normal: --- Startup ---
    ...................
    ........
    #若启动失败 手动启动下看报错 进行排查
    /usr/bin/lsyncd -nodaemon /etc/lsyncd.conf

至此 全部完成,你可以试着在服务器B进行文件增删改的操作,在服务器A看同步情况。

如果有多个服务器B(发送端)一样可以按照 步骤四 操作。同样服务器A有多个的情况也一样

 

© UU-TOOL.COM
UU工具箱 好用且免费的在线工具箱