linux实现rsync+sersync实时数据备份

1.概述

rsync(Remote Sync) 是一个Unix/linux系统下的文件同步和传输工具

2.端口和运行模式

tcp/873

采用C/S模式(客户端/服务器模式)

3.特点

  • 可以镜像保存整个目录和文件
  • 第一次全量备份(备份全部的文件),之后是增量备份(只备份变化的文件)

4. 数据同步方式

  • 推(push) 本地将数据发送到远程服务器
  • 拉(pull) 远程服务器获取数据到本地

5.rsync命令

  • 基本用法 rsync 选项 源文件位置 目标文件位置

  • 选项

    bash 复制代码
    -a,--archive 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于-rlptgoD
    -r,--recursive 对子目录以递归模式处理,即同步所有下面的数据
    -l,--links 表示拷贝链接文件
    -p , --perms 表示保持文件原有权限
    -t , --times 表示保持文件原有时间
    -g , --group 表示保持文件原有属用户组
    -o , --owner 表示保持文件原有属主
    -D , --devices 表示块设备文件信息
    -z , --compress 表示压缩传输
    -H 表示硬连接文件
    -A 保留ACL属性信息(需配合-p选项)
    -P 显示传输进度
    -u, --update 仅仅进行更新,也就是跳过所有已经存在于目标位置,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
    --port=PORT 定义rsyncd(daemon)要运行的Port(预设为tpc  873)
    --delete 删除那些目标位置有而原始位置没有的文件
    --password-file=FILE 从FILE中得到密码
    --bwlimit=KBPS 限制I/O带宽,KBytes /second
    --filter "-filename" 需要过滤的文件
    --exclude=filename :需要过滤的文件
    -v 显示同步过程的详细信息
    #常用的-avz
    #补充:如果传输的特别大的文件,就不要用z 参数,因为压缩和解压比较耗时
  • 示例

    bash 复制代码
    #格式1
    rsync  选项  rsync://用户名@同步源服务器IP:/共享模块名  目标目录  
    rsync -avz --delete rsync://[email protected]:/test /test  
    #--delete 是删除服务端(下面实验的主机A)没有的文件
    #格式2
    rsync  选项  用户名@同步源服务器IP::共享模块名  目标目录  
    rsync -avz --delete [email protected]::test /test

6.实验

主机 ip 地址
A 192.168.98.143
B 192.168.98.140
(1).数据同步
  • 在主机A上编写rcync的配置文件

    bash 复制代码
    vim /etc/rsyncd.conf
        uid = root
        gid = root
        address = 192.168.98.143 #写的是本机的ip地址否则服务无法启动
        use chroot = yes
        port = 873 #定义端口
        hosts allow = 192.168.98.0/24 #定义允许访问的地址
        max connections = 4
        pid file = /var/run/rsyncd.pid #进程id文件
        lock file = /var/run/rsyncd.lock #日志文件
        log file = /var/log/rsyncd.log #锁文件
        motd file = /etc/rsyncd.motd #消息文件
    	[backup] #模块名
           path = /test  #备份路径
           comment = backup area #描述
           read only = yes #是否只读
           list = yes #是否隐藏模块列表
           auth users = b1 #备份所使用的用户
           secrets file = /etc/rsync.passwd #校验文件,包含用户名和密码的文件,用户名是			auth users的值	
  • 创建描述文件和校验文件

    bash 复制代码
    echo "I am backup server" > /etc/rsyncd.motd #创建描述文件
    echo  "b1:123456" >> /etc/rsync.passwd #创建用户名和密码文件
    chmod 600 /etc/rsyncd.passwd #设置校验文件的权限,不设置会报错
  • 开启服务

    bash 复制代码
    rsync --daemon --config=/etc/rsyncd.conf  #指定配置文件并启动服务
    ss -anputl | grep 873 #查看服务是否启动
    systemctl stop firewalld 
    setforce 0
    iptables -F #关闭防火墙
  • 主机B测试

    bash 复制代码
    sync -avz --delete [email protected]::backup /test  #输入/etc/rsync.passwd中定义的密码
    #免密备份
    vim /etc/rsync.passwd #在主机B上创建文件
    	123456 #只写密码不写用户名,输入/etc/rsync.passwd中定义的密码
    chmod 600 /etc/rsync.passwd  #修改文件权限否则会报错
    sync -avz --delete [email protected]::backup /test  --password-file=/etc/rsync.passwd  #指定密码文件
(2).实时数据同步(rsync+sersync)

​ 目的:将主机B的数据实时同步到主机A上

  • 修改主机A的rsync的配置文件

    bash 复制代码
    uid = root
    gid = root
    address = 192.168.98.143
    use chroot = yes
    port = 873
    hosts allow = 192.168.98.0/24
    max connections = 4
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsyncd.lock
    log file = /var/log/rsyncd.log
    motd file = /etc/rsyncd.motd
    
    [backup]
           path = /test
           comment = backup area 
           read only = false  #在上述实验的基础上只修改这里
           list = yes
           auth users = b1
           secrets file = /etc/rsync.passwd
  • 主机B安装sersync

    bash 复制代码
    #使用tar包解压后直接使用
    tar -xf  sersync2.5.4_64bit_binary_stable_final.tar.gz -C /opt/
    	mv /opt/GNU-Linux-x86 /opt/sersync  #修改文件名
    #修改配置文件
      vim /opt/sersync/confxml.xml
      	#修改第24-28行
    	<localpath watch="/monitored">  #本地监控目录
            <remote ip="192.168.98.143" name="backup"/> #主机A(rsync主机的ip),模块名
            <!--<remote ip="192.168.8.39" name="tongbu"/>-->
            <!--<remote ip="192.168.8.40" name="tongbu"/>-->
            </localpath>
         #修改第31-34行
         <commonParams params="-artuz"/>
                <auth start="true" users="b1" passwordfile="/etc/rsync.passwd"/>  #users是备份使用的用户,rsync配置文件中定义的用户, passwordfile就是rsync的校验文件,包含用户名和密码
                <userDefinedPort start="false" port="874"/><!-- port=874 -->
                <timeout start="false" time="100"/><!-- timeout=100 -->
                 <ssh start="false"/>
  • 主机B开启守护进程同步数据

    bash 复制代码
    #创建校验文件,修改权限
    echo "123456" > /etc/rsync.passwd  && chmod 600 /etc/rsync.passwd  
    /opt/sersync/sersync2  -d  -r  -o  /opt/sersync/confxml.xml #开启服务,停止服务使用kill命令
    mkdir /monitored  && echo "hello linux !!!" >> /monitored/1.txt  #更改监听的目录查看是否会同步到主机A
相关推荐
音视频牛哥13 分钟前
Nginx RTMP DASH 模块分析 (ngx_rtmp_dash_module.c)
运维·nginx·大牛直播sdk·dash·nginx rtmp服务器·nginx dash·dash播放
G探险者14 分钟前
项目日志是否应该启用文件压缩?
运维·后端
Edward-tan30 分钟前
Django 生成 ssl 安全证书,切换 https、wss协议(daphne 、nginx)
运维·服务器·django
字节程序员1 小时前
Jenkins 持续集成:Linux 系统 两台机器互相免密登录
linux·软件测试·ci/cd·jenkins
试水年华1 小时前
鸿蒙Next-集成HmRouter的路由模式
linux·运维·服务器·华为·harmonyos·ark-ts语言
Bigger1 小时前
Mac 命令行及 Linux 使用指南与示例
linux·前端·命令行
Karl_wei1 小时前
Flutter Linux应用初探
linux·前端·flutter
IT缺脑干1 小时前
CentOS 7 挂载与卸载文件系统
linux·运维·centos
Yang三少喜欢撸铁1 小时前
【10分钟掌握Docker、k8s的基础命令】
运维·docker·容器·kubernetes·k8s
Levin__NLP_CV_AIGC2 小时前
Nvidia Driver英伟达驱动安装-Ubuntu-CUDA
linux·运维·ubuntu·计算机视觉·自然语言处理