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
相关推荐
塔能物联运维9 分钟前
双轮驱动能源革命:能源互联网与分布式能源赋能工厂能效跃迁
大数据·运维
辣个蓝人QEX29 分钟前
【ZYNQ MP开发】Linux下使用bootgen命令生成BOOT.bin报错架构不对问题探究
linux·arm开发·xilinx·zynq·mpsoc·bootgen·u-boot移植
Vesan,36 分钟前
无人机飞控运行在stm32上的RTOS实时操作系统上,而不是linux这种非实时操作系统的必要性
linux·stm32·无人机
GalaxyPokemon1 小时前
Muduo网络库实现 [十六] - HttpServer模块
linux·运维·服务器·网络
461K.1 小时前
spark与hadoop的区别
大数据·运维·hadoop·分布式·spark·intellij-idea
Zfox_2 小时前
Git 进阶之路:高效协作之分支管理
大数据·linux·运维·c++·git·elasticsearch
夏天里的肥宅水2 小时前
解决方案:远程shell连不上Ubuntu服务器
linux·运维·服务器·ubuntu
牛角上的男孩2 小时前
使用QEMU(8.2.10)调试ARM64 Linux内核6.6.30
linux·运维·服务器
别致的影分身2 小时前
Docker Image(镜像)
运维·docker·容器
李菠菜2 小时前
优化Centos关闭SELinux/Swap及资源限制调整
linux·后端·centos