rsync远程同步

文章目录

    • 关于rsync
    • 配置rsync源服务器
      • 软件包
      • 一、配置rsync源
        • 1、基本思路
        • 2、应用示例
      • 二、本地端(客户端)配置
        • 1、使用rsync备份工具
        • 2、示例
          • 常用选项
          • 1)格式1示例
          • 2)格式2示例
          • 3)rsync同步操作示例
          • 4)免交互示例
    • rsync实时同步
      • rsync+inotify实时同步

关于rsync

rsync远程同步_第1张图片
Remote Sync,远程同步,它是一个开源的快速增量备份工具,可以在不同主机之间镜像同步整个目录树
支持增量备份、保持连接和权限,且采用优化的同步算法,传输前执行压缩,因此分床适用于异地备份、镜像服务器等应用
支持本地复制,或者与其他SSH、rsync主机同步
官方网站:http://rsync.samba.org

配置rsync源服务器

==rsync同步源:指备份操作的远程服务器,也称为备份源 ==
rsync远程同步_第2张图片

软件包

链接:https://pan.baidu.com/s/1oHDs1CQnIOOGxUyEppD9Qw
提取码:6ozk

一、配置rsync源

在同步源服务器上操作

1、基本思路

建立rsyncd.conf配置文件、独立的账号文件
启用rsync的–daemon模式

2、应用示例

用户backuper,允许下行同步
操作的目录为 /var/www/html/

#安装httpd环境

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# cd /var/www/html
[root@localhost ~]# ll
总用量 0

①配置文件rsyncd.conf

需手动建立,语法类似于Samba配置
认证配置auth users、secrets file,不加则为匿名

linux最小化安装是没有rsync 需要安装:yum -y install rsync

[root@localhost ~]# vim /etc/rsyncd.conf 		//原有的都是#注释掉的,直接删除手动配置
uid = nobody
gid = nobody
use chroot = yes			 			//禁锢在源目录
address = 192.168.32.11					//监听地址
port 873							//监听端口号
log file = /var/log/rsyncd.log           //日志文件位置
pid file = /var/run/rsyncd.pid            //存放进程ID的文件位置
hosts allow = 192.168.100.42              //允许访问的客户机地址
[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 =backuper                             //授权账户
secrets file = /etc/rsyncd_users.db              //存放账户信息的数据文件

同步源最好仅允许以只读方式做同步,另外,同步可以采用匿名的方式,只要将其中的“auth users”"secrets file"配置去掉

②rsync账号文件

采用“用户名:密码”的记录格式,每行一个用户记录
独立的账号数据,不依赖于系统账号

[root@localhost ~]# vim /etc/rsyncd_users.db
backuper:pwd123
[root@localhost ~]# chmod 600 /etc/rsyncd_users.db 
[root@localhost ~]# ls -ld /var/www/html 
drwxr-xr-x. 2 root root 6 3月  23 16:11 /var/www/html

//现在此目录下是没有文件的

③启用rsync服务

通过–daemon独自提供服务

[root@localhost ~]# rsync --daemon
[root@localhost ~]# netstat -anpt |grep rsync
tcp        0      0 192.168.100.41:873      0.0.0.0:*               LISTEN      11979/rsync

如果要停止这个服务 kill $(cat /var/run/rsyncd.pid)

④在 /var/www/html目录中,新建文件

[root@localhost ~# cd /var/www/html/
[root@localhost html]# vim kgc.html
this is kgc
[root@localhost html]# vim accp.html
this is accp

此时服务端的源就设置好了

二、本地端(客户端)配置

1、使用rsync备份工具

linux最小化安装是没有rsync 需要安装:yum -y install rsync

rsync命令的用法与cp命令差不多

2、示例

[root@localhost ~]# rsync /etc/fstab /opt
[root@localhost ~]# rsync -rl /etc/fstab /boot/grub /opt
[root@localhost ~]# cd /opt
[root@localhost opt]# ll
总用量 1932
-rw-r--r--. 1 root root     632 3月  23 17:14 fstab
drwxr-xr-x. 2 root root       6 3月  26 2015 rh
drwxr-xr-x. 2 root root      27 3月  23 17:17 grub

配置源的两种表示方法(此次我们使用的是格式1的方法)

格式1:用户名@主机地址::共享模块名
格式2: rsync://用户名@主机地址/共享模块名

rsync [选项] 原始位置 目标位置
常用选项
  • -a:归档模式,递归并保留对象属性,等同于 -rlptgoD
  • -v:显示同步过程的详细(verbose)信息
  • -z:在传输文件时进行压缩(compress)
  • -H:保留硬连接文件
  • -A:保留ACL属性信息
  • –delete:删除目标位置有而原始位置没有的文件
  • –checksum:根据对象的校验和来决定是否跳过文件
1)格式1示例
[root@localhost opt]# rsync -avz [email protected]::wwwroot /opt

rsync远程同步_第3张图片

2)格式2示例
[root@localhost opt]# rsync -avz rsync://[email protected]/wwwroot /root

rsync远程同步_第4张图片

3)rsync同步操作示例

这个在客户机上操作192.168.100.42

[root@localhost ~]# mkdir /opt/myweb
[root@localhost ~]# rsync -avzH --delete [email protected]::wwwroot  /opt/myweb
[root@localhost ~]# cd /opt/myweb/
[root@localhost myweb]# ll
总用量 8
-rw-r--r-- 1 root root 16 9月   2 17:04 123.html
-rw-r--r-- 1 root root 37 9月   2 17:04 456.html

rsync源的免交互处理:使用 --password-file= 密码文件

4)免交互示例
[root@localhost wwwroot]# vim /etc/server.pass		//明文密码
pwd123
[root@localhost wwwroot]# cat /etc/server.pass
pwd123
[root@localhost wwwroot]# chmod 600 /etc/server.pass	//改权限,安全加固下
[root@localhost wwwroot]#  rsync -avzH --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/myweb/

rsync远程同步_第5张图片
在rsync源上更改kgc.html文件以及在客户端更改accp.html文件,重新同步后查看:
①未变更前
rsync源文件:
rsync远程同步_第6张图片
客户端文件:
rsync远程同步_第7张图片
②变更后
rsync源文件:
rsync远程同步_第8张图片
客户端文件:
rsync远程同步_第9张图片
③重新同步验证
rsync远程同步_第10张图片
④结论

rsync源文件变更后,客户端重新同步会覆盖之前的老文件,更新为rsync源变更后的新文件;而客户端文件变更,重新同步后还是会同步rsync源文件。所以,同步是以rsync源文件为基准的,只参照rsync源

#添加周期性计划任务

每天晚上10点半对服务器网站目录更新一次

[root@localhost wwwroot]# crontab -e 
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/myweb/

[root@localhost wwwroot]# systemctl restart crond
[root@localhost wwwroot]# systemctl enable crond

rsync实时同步

1、定期同步的不足
执行备份的时间固定,延迟明显、实时性差
当同步源长期不变化时,密集的定期任务是不必要的

2、实时同步的优点
一旦同步源出现变化,立即启动备份
只要同步源无变化,则不执行备份

注意源端设置

[root@localhost ~]# vim /etc/rsyncd.conf
read only = no 		//关闭只读,允许写入

######关于inotify##########
!!!Linux内核的inotify机制!!!
从版本2.6.13开始提供可以监控文件系统的变动情况,并作出通知响应
辅助软件:inotify-tools

rsync+inotify实时同步

#查看内核参数

[root@localhost myweb]# cat /proc/sys/fs/inotify/max_queued_events 
16384
[root@localhost myweb]# cat /proc/sys/fs/inotify/max_user_instances 
128
[root@localhost myweb]# cat /proc/sys/fs/inotify/max_user_watches 
8192

max_queue_events:监控队列大小
max_user_instances:最多监控实例数
max_user_watches:每个实例最多监控文件数

在本端客户端建立监控机制

#调整inotify内核参数,末尾添加

[root@localhost ~]# vim /etc/sysctl.conf
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

[root@localhost ~]# sysctl -p		//生效

#安装inotify-tools辅助工具

inotifywait:用于持续监控,实时输出结果
inotifywatch:用于短期监控,任务完成后再出结果

上传inotify-tools-3.14.tar.gz到/opt目录下

[root@localhost myweb]# cd /opt
[root@localhost opt]# tar xzvf inotify-tools-3.14.tar.gz 
[root@localhost opt]# cd inotify-tools-3.14/
[root@localhost inotify-tools-3.14]# ./configure
[root@localhost inotify-tools-3.14]# make && make install
[root@localhost ~]# inotifywait -mrq -e modify,create,move,delete  /opt/myweb    		//这边要另外开个终端在/opt/myweb 写一个文件进文件监控

rsync远程同步_第11张图片
通过inotifywait触发rsync同步操作
使用while、read持续获取监控结果
根据结果可以作进一步判断,决定执行何种操作

#编写出发脚本

vim /opt/inotify.sh
#!/bin/bash
#触发监控的命令
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/myweb/"
#同步的操作
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /opt/myweb/ [email protected]::wwwroot"

$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD

#echo "${FILE} was rsynced" >>/opt/inotify_rsync.log

     fi

done
[root@localhost ~]# chmod +x /opt/inotify.sh

#在同步源 192.168.100.41操作,打开读写

[root@localhost ~]# vim /etc/rsyncd.conf 
read only =no                 ###这个地方原来的yes  改成 no    这个地方的模块可以读写了

#重启rsyncd服务

[root@localhost ~]#  kill $(cat /var/run/rsyncd.pid)      //关闭rsyncd服务
[root@localhost ~]# rsync --daemon                    //启动rsyncd服务
[root@localhost ~]# netstat -anpt |grep rsync
tcp        0      0 192.168.100.41:873      0.0.0.0:*               LISTEN      64194/rsync 

[root@localhost ~]# chmod 777 /var/www/html/		//改权限

#在客户机 192.168.100.42操作

[root@localhost ~]#  chmod 777 /opt/myweb/		//添加权限
[root@localhost ~]#  /opt/inotify.sh   	//执行脚本触发

需要在开一个终端

[root@localhost ~]#  vim /opt/myweb/abc.html      //创建一个文件并写入数据

rsync远程同步_第12张图片
这时在同步源 192.168.100.41会发现这个地方多了个abc.html文件

[root@localhost ~]# ll /var/www/html/ 

rsync远程同步_第13张图片
一定注意两边的同步目录权限都设置777

你可能感兴趣的:(Web服务器群集,rsync,同步)