服务器数据同步:rsync远程同步方式+实时同步!

前言

一:理论

1.1:什么是rsync?有什么作用

  • rsync,全称为:Remote Sync(远程同步),是一款开源的快速增量备份工具,可以在不同主机之间镜像同步整个目录树
  • 还支持本地复制,增量备份、保持连接和权限,或者与其他SSH,rsync主机同步
  • 采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用
  • mark

1.2:rsync源服务器的关系

mark

二:实验

2.1:rsync命令集锦

  • 1、启动rsync服务:rsync --daemon

  • 2、关闭rsync服务:kill $(cat /var/run/rsyncd.pid)

  • 3、同步本地文件系统数据:rsync [选项] 原始位置 目标位置

    例如:
    rsync /etc/fstab /opt '//同步本机的fstab文件到opt目录'
    rsync -rl /boot/grub /opt	'//同步本机的grub目录到opt目录'
    '//如果想要在/opt目录下也创建一个boot目录,那么命令需要为:rsync -R rl /boot/grub /opt '
    常用选项:
    -a:归档模式,递归并保留对象属性,等同于 -rlptgoD
    -r 对子目录以递归模式处理,主要是针对目录来说的,如果单独传一个文件不需要加-r,但是传输的是目录必须加-r选项
    -l 保留软链接
    -p 保持文件权限
    -v:显示同步过程的详细(verbose)信息
    -z:在传输文件时进行压缩(compress)
    -H:保留硬连接文件
    -A:保留ACL属性信息
    --delete:删除"目标""源"没有的文件
    --checksum:根据对象的校验和来决定是否跳过文件
    --progress 在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等等
    路径的格式可以是本地路径,也可以是使用user@host:path或user@host::path的远程路径,如果主机和path路径之间使用单个冒号隔开,表示使用的是远程shell通信方式,而使用双冒号隔开的则表示的是连接rsync daemon
    
  • 4、下行同步的两种方式(使用客户端将rsync服务器下的wwwroot共享模块下的内容同步到本地的/opt目录下(共享模块下的真实共享路径需要对other用户具有 ‘r’ 权限))

    • (1):命令格式用户名@主机地址::共享模块名

      例如:[root@rsyncClient ~]# rsync -avz [email protected]::wwwroot /opt

    • (2):命令格式:rsync://用户名@主机地址/共享模块名

      例如:[root@slave opt]# rsync -avz rsync://[email protected]/wwwroot /root

  • 5、rsync通过ssh的方式同步

    • 命令与平常的scp命令类似
    • 例如:将本地/opt/abc.txt上传到目标服务器/opt目录:rsync -avz /opt/abc.txt [email protected]:/opt
    • 例如:将目标服务器/opt/qwe.txt文件下载到本地/opt目录下:rsync -avz [email protected]:/opt/qwe.txt /opt

2.2:实验环境

  • VMware软件

    • 主机名 IP地址 安装服务 系统版本
      master 192.168.233.131 rsync,httpd centos7.4
      slave 192.168.233.133 rsync,inotify-tools centos7.4

2.3:实验拓扑图

  • mark

2.4:实验过程

2.4.1:开局优化
  • 1、修改IP地址,操作相同,仅展示master的操作

    [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=static	'//改为static'
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=ens33
    UUID=0f49a612-24ff-4410-8185-c13a60922cdc
    DEVICE=ens33
    ONBOOT=yes
    IPADDR=192.168.233.131	'//添加下面三个IP地址'
    NETMASK=255.255.255.0
    GATEWAY=192.168.233.2
    DNS1=8.8.8.8
    [root@localhost ~]# systemctl restart network
    '//另一台IP地址修改为192.168.233.133'
    
  • 2、关闭防火墙与核心防护功能,两台主机都要做

    [root@localhost ~]# systemctl stop firewalld	'//关闭防火墙'
    [root@localhost ~]# systemctl disable firewalld	'//禁止防火墙开机自启'
    Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
    Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
    [root@localhost ~]# setenforce 0	'//关闭核心防护'
    [root@localhost ~]# vi /etc/sysconfig/selinux 	'//禁止核心防护开启自启'
    SELINUX=disabled
    
  • 3、修改主机名与主机映射文件,两台都做

    [root@localhost ~]# hostnamectl set-hostname slave
    [root@localhost ~]# su
    [root@slave ~]# vi /etc/hosts
    192.168.233.133 slave
    192.168.233.131 master
    
    [root@slave ~]# ping master
    '//master主机操作相同,不在赘述'
    
  • 配置本地yum源,两台都做

    [root@slave ~]# cd /etc/yum.repos.d/
    [root@slave yum.repos.d]# mkdir bak
    [root@slave yum.repos.d]# mv * bak	'//备份原有yum文件'
    mv: 无法将目录"bak" 移动至自身的子目录"bak/bak" 下
    [root@slave yum.repos.d]# vi local.repo	'//创建本地yum文件'
    [mnt]
    name=mnt
    baseurl=file:///mnt
    gpgcheck=0
    enbaled=1
    [root@slave yum.repos.d]# mount /dev/sr0 /mnt	'//手动挂载光盘'
    mount: /dev/sr0 写保护,将以只读方式挂载
    [root@slave yum.repos.d]# vi /etc/fstab	'//设置自动挂载'
    /dev/sr0 /mnt   iso9660 defaults        0 0
    [root@slave yum.repos.d]# yum clean all	'//清理缓存'
    [root@slave yum.repos.d]# yum makecache	'//创建缓存'
    
    
2.4.2:配置rsync源服务器
  • 安装httpd与rsync服务

    [root@master yum.repos.d]# yum install httpd rsync -y
    
    
  • 修改rsync配置文件

    [root@master yum.repos.d]# vi /etc/rsyncd.conf 
     uid = nobody	
     gid = nobody	
     use chroot = yes                           '//禁锢在源目录'
     address = 192.168.233.131                   '//监听地址'
     port 873                                   '//监听端口号'
     log file = /var/log/rsyncd.log            '//日志文件位置'
     pid file = /var/run/rsyncd.pid           '//存放进程ID的文件位置'
     hosts allow = 192.168.233.133            '//允许访问的客户机地址'
    [wwwroot]                                       '//共享模块名称'
     path = /var/www/html                       '//源目录的实际路径'
     comment = Document Root of www.51xit.top
     read only =yes                                 '//是否只读'
     dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z          '//同步时不在压缩的文件类型'
     auth users = lisi                            '//授权账户'
     secrets file = /etc/rsyncd_users.db                '//存放账户信息的数据文件'
    
  • 创建于用户密码文件

    [root@master yum.repos.d]# vi /etc/rsyncd_users.db	'//创建存放账户信息的数据文件'
    lisi:lisi123	'//采用“用户名:密码”的记录格式,每行一个用户记录独立的账号数据,不依赖于系统账号'
    
    [root@master yum.repos.d]# chmod 600 /etc/rsyncd_users.db '//给数据文件设置权限'
    [root@master yum.repos.d]# ll -ld /var/www/html/	'//查看下源目录的文件权限'
    drwxr-xr-x. 2 root root 6 8月   4 2017 /var/www/html/
    
    
  • 启动rsync服务

    [root@master yum.repos.d]# rsync --daemon	'//启动rsync服务,如果要停止这个服务请使用kill $(cat /var/run/rsyncd.pid)'
    [root@master yum.repos.d]# netstat -ntap |grep rsync
    tcp        0      0 192.168.233.131:873     0.0.0.0:*               LISTEN      4371/rsync    
    
  • 在 /var/www/html目录中,新建文件

    [root@master yum.repos.d]# cd /var/www/html/
    [root@master html]# ls
    [root@master html]# touch 111.html
    [root@master html]# touch 222.html
    [root@master html]# ls
    111.html  222.html
        '//创建完成后,我们稍后到客户机上操作,进行验证'
    
2.2.3:客户端配置,本地同步与下行同步
  • 安装rsync服务

    [root@slave yum.repos.d]# yum install -y rsync
    
  • 本地文件系统上实现同步,

    命令格式:rsync [选项] 原始位置 目标位置
    [root@slave yum.repos.d]# cd /opt
    [root@slave opt]# ls
    rh
    [root@slave opt]# rsync /etc/fstab /opt	'//将本机的/etc/fstab文件同步到本机/opt下'
    [root@slave opt]# ls
    fstab  rh
    [root@slave opt]# rsync -rl /boot/grub /opt	'//将本机的/boot/grub目录同步到本机/opt下'
    [root@slave opt]# ls
    fstab  grub  rh
    
    
  • 下行同步的两种方式,密码是lisi123

    [root@slave opt]# mkdir myweb
    '//方法一'
    [root@slave opt]# rsync -avzH --delete [email protected]::wwwroot /opt/myweb
    Password: 
    receiving incremental file list
    ./
    111.html
    222.html
    
    sent 98 bytes  received 207 bytes  87.14 bytes/sec
    total size is 0  speedup is 0.00
    [root@slave opt]# ls /opt/myweb/
    111.html  222.html
    
    '//方法二'
    [root@slave opt]# rsync -avz rsync://[email protected]/wwwroot /root
    Password: 
    receiving incremental file list
    ./
    111.html
    222.html
    
    sent 98 bytes  received 207 bytes  87.14 bytes/sec
    total size is 0  speedup is 0.00
    
    
2.2.4:rsync源的免密交互处理
  • rsync源的免密交互处理

    [root@slave opt]# vi /etc/server.pass	'//创建密码文件'
    lisi123
    [root@slave opt]# chmod 600 /etc/server.pass	'//给密码文件权限'
    [root@slave opt]# rm -rf myweb/*	'//先删除/opt/myweb目录下的内容用来测试
    [root@slave opt]# ls myweb/
    [root@slave opt]# rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/myweb	'//指定刚刚创建的密码文件,发现已经不需要输入密码了'
    [root@slave opt]# ls myweb/
    111.html  222.html
    
  • 可以创建周期性任务进行同步源服务器

    [root@slave opt]# crontab -e
    30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/myweb/	'//每天晚上10点半对服务器网站目录更新一次'
    [root@slave opt]# systemctl restart crond
    [root@slave opt]# systemctl enable crond
    
    
2.2.5:rsync实时同步
  • 源端配置

    [root@master html]# vi /etc/rsyncd.conf 
    read only = no '//改为no'
    [root@master html]# kill `cat /var/run/rsyncd.pid`	'//关闭rsync服务'
    [root@master html]# netstat -ntap |grep rsync
    [root@master html]# rsync --daemon	'//开启rsync服务'
    [root@master html]# netstat -ntap |grep rsync
    tcp        0      0 192.168.233.131:873     0.0.0.0:*               LISTEN      88302/rsync         
    [root@master html]# chmod 777 /var/www/html
    
    
  • 客户端配置

    [root@slave opt]# cat /proc/sys/fs/inotify/max_queued_events 	'//监控队列大小'
    16384	
    [root@slave opt]# cat /proc/sys/fs/inotify/max_user_instances	'//最多监控实例数'
    128	
    [root@slave opt]# cat /proc/sys/fs/inotify/max_user_watches 	'//每个实例最多监控文件数'
    8192
    [root@slave opt]# vi /etc/sysctl.conf
    [root@slave opt]# sysctl -p
    fs.inotify.max_queued_events = 32768
    fs.inotify.max_user_instances = 1024
    fs.inotify.max_user_watches = 1048576
    
    
  • 上传

    mark

  • 客户端安装inotify-tools辅助工具

    [root@slave opt]# tar zxf inotify-tools-3.14.tar.gz 
    [root@slave opt]# cd inotify-tools-3.14/
    [root@slave inotify-tools-3.14]# yum install gcc gcc-c++ -y
    [root@slave inotify-tools-3.14]# ./configure 
    [root@slave inotify-tools-3.14]# make && make install
    
    
  • 重新打开一个终端

    [root@slave ~]# inotifywait -mrq -e modify,create,move,delete  /opt/myweb	'//运行持续监控监控'
    inotifywait:用于持续监控,实时输出结果
    inotifywatch:用于短期监控,任务完成后再出结果
    
  • 源服务器编辑脚本并启动

    [root@slave inotify-tools-3.14]# vim /opt/inotify.sh
    [root@slave inotify-tools-3.14]# chmod 777 /opt/myweb/
    [root@slave inotify-tools-3.14]# chmod +x /opt/inotify.sh 
    [root@slave inotify-tools-3.14]# cd ..
    [root@slave opt]# ./inotify.sh 	'//执行脚本进行监控'
    
    
  • 重新打开终端,测试rsync上传同步

    [root@slave myweb]# touch 111.html	'//客户机创建文件,删除文件也可以同步成功'
    [root@master html]# ll	'//服务端查看'
    总用量 0
    -rw-r--r--. 1 root   root   0 3月  24 09:22 111.html	'//同步成功'
    
    '//查看刚刚运行的脚本监控'
    rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1052) [sender=3.0.9]
    	'//发现会有这个报错,但是文件是正常传过去的,这里的这个报错我没有解决掉,如果有朋友解决了可以私信我或者评论告诉我,多谢!'
    
    
原创文章 172 获赞 97 访问量 5万+

猜你喜欢

转载自blog.csdn.net/CN_TangZheng/article/details/105083832