分布式----关于搭建rsync,rsync+inotify 远程同步!!

  • 时间:
  • 来源:互联网
  • 文章标签:

1024

  • 一,关于rsync
    • 1.1rsync同步源
    • 1.2 基本思路
    • 1.3 rsync命令的用法
    • 1.4 备份(拉取)的两种方法
    • 1.5 不足点
  • 二,实时同步rsync+inotify
    • 2.1优点:
    • 2.2关于inotify
    • 2.3基本思路:
  • 三,搭建rsync同步apache站点目录
    • 源端(服务器):
      • 步骤一:检查环境
      • 步骤二:主要两个配置文件
    • 发起端(客户端):
      • 步骤一:检查环境
      • 步骤二:拉取的两种表示方法
      • 步骤三:计划性任务
    • 总结
  • 四,搭建rsync+inotify实时同步
      • 源端调整:
      • 发起端(客户端)
    • 总结

一,关于rsync

  • 一款快速增量备份的工具

Remote sync 远程同步
支持本地复制,或者与其他ssh,rsync主机同步
官方网站:http://rsync.samba.org

1.1rsync同步源

  • 指备份操作的远程服务器,也成为备份源;
    在这里插入图片描述

1.2 基本思路

  • 更改rsync.conf配置文件
  • 独立的账号文件
  • 启用rsync的–daemon模式 守护进程模式

1.3 rsync命令的用法

rsync  选项  原始位置  目标位置

常用选项
-a   归档模式,递归并保留住对象属性,等同于-rlptgoD
-v  显示同步过程的详细信息
-z  在传输文件时进行压缩
-H  保留硬链接文件
-A 保留ACL属性信息
--delete   删除目标位置有,原始位置没有的文件
--checksum  根据对象的校验和来决定是否跳过文件

1.4 备份(拉取)的两种方法

1.用户名@主机地址::共享模块名

示例:rsync -avz back@20.0.0.11::www /opt

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

示例:rsync -avz rsync://back@20.0.0.11/www /opt/

1.5 不足点

  • 执行备份的时间固定,延迟明显,实时性差
  • 如果同步源长期不变化是,密集的定期任务是不必要的
  • 网络拥塞,端口宕掉,带宽问题都会影响;

二,实时同步rsync+inotify

2.1优点:

  • 一旦同步源出现变化,立即重启备份(同步命令)
  • 只要同步源没有变化,则不执行备份

2.2关于inotify

  • 从版本内核的inotify机制

从版本2.6.13(centos6.0)开始提供
可以监控文件系统的变动情况,并作出通知响应
辅助软件:inotify-tools

在这里插入图片描述

2.3基本思路:

  • 调整inotify内核参数

fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

//监控事件队列的大小
//最多监控实例数
//每个实例最多监控文件数

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

  • 同步操作脚本
    使用while,read持续获取监控结果
    根据结果可以作进一步判断,决定执行何种操作

三,搭建rsync同步apache站点目录

源端(服务器):

步骤一:检查环境

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

rpm -q rsync   //查看软件包是否安装

//未安装的话,yum -y install rsync

yum -y install httpd                 //安装apache测试,站点目录同步


步骤二:主要两个配置文件

/etc/rsync.conf //rsync的主配置文件
/etc/rsyncd_users.db //rsync的账号文件


1.vi /etc/rsyncd.conf 
//原有配置下,有的内容去掉注释,没有的内容加上去

uid = nobody
gid = nobody
use chroot = yes
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
address = 20.0.0.11
port 873
hosts allow = 20.0.0.0/24

[www]
path = /var/www/html
comment = www.kgc.cn
read olny = yes
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
auth users = back
secrets file = /etc/rsyncd_users.db
///配置解释
允许所有主账户
允许所有组账户
用户使用权限
日志文件存放位置
pid文件存放位置
配置rsync本机服务器地址
端口873
白名单,允许175网段的所有主机地址;

[www]                //共享模块名
定义共享的目录
绑定域名
只读模式,只允许读
禁止压缩的类型文件             //外面和里面的,里面最终生效,最后的生效
rsync同步的用户名
用户的密码存放文件            //授权只允许主账户的权限600

  1. vi /etc/rsyncd_users.db
    backuper:123123

  2. chmod 600 /etc/rsyncd_users.db //更改权限只有主账户有读写权限
    chmod 777 /var/www/html //将同步站点目录更改权限777放开权限测试

  3. 启动服务
    rsync --daemon
    查看状态
    netstat -antp |grep rsync

发起端(客户端):

步骤一:检查环境

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

rpm -q rsync   //查看软件包是否安装

//未安装的话,yum -y install rsync

yum -y install httpd                 //安装apache测试,站点目录同步

步骤二:拉取的两种表示方法

  1. 用户名@主机地址::共享模块名

示例:rsync -avz back@20.0.0.11::www /opt

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

示例: rsync -avz rsync://back@20.0.0.11/www /opt/

配置免交互:

创建一个文件存放密码:
vi  /etc/server.pass
123123

chmod  600 /etc/server.pass       //更改权限

验证:
rsync -avz --delete --password-file=/etc/pass rsync://back@20.0.0.11/www  /var/www/html

步骤三:计划性任务

比如每5分钟进行同步

crontab -e
5 * * * *    /usr/bin/rsync   -azv  --delete --password-file=/etc/pass back@20.0.0.11::www   /var/www/html

总结

  1. 源端的主配置信息,需注意,要一致,不匹配无法进行;
  2. 共享模块的站点共享目录权限,以及用户账号文件权限
  3. 发起端的密码文件的权限

四,搭建rsync+inotify实时同步

源端调整:

  1. /etc/rsyncd.conf 内的配置, read only = yes 改为 no ;
  2. 重新开启守护进程–daemon,流程如下:
    //先查看下进程,杀死进程
[root@localhost www]# netstat -antp |grep rsync
tcp        0      0 20.0.0.11:873           0.0.0.0:*               LISTEN      11219/rsync         
[root@localhost www]# kill -9 11219

//这个时候需要把rsync的pid进程文件删除掉,因为里面的pid信息还存在,会影响无法开启进程;

rm -rf /var/run/rsyncd.pid     //pid进程是咱们之前配置文件定义的存放位置

//开启守护进程

rsync --daemon

查看状态
netstat -antp |grep rsync

发起端(客户端)

  1. 做内核参数优化
vi  /etc/sysctl.conf
//最后插入
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
--wq保存

sysctl  -p     //生效

配置解释:

//监控事件队列的大小
//最多监控实例数
//每个实例最多监控文件数
  1. 安装辅助工具监控inotify-tools
yum -y install gcc gcc-c++ make    //安装底层环境依赖包

//到软件所在目录下,解压到所在目录
tar zxvf inotify-tools-3.14.tar.gz 
cd inotify-tools-3.14/

//编译安装
./configure 
make
make install

  1. 验证监控功能
inotifywait -mrq -e modify,create,move,delete  /var/www/html

//命令选项解释
-m 持续进行监控
-r 递归监控所有子对象
-q 简化输出信息
-e 指定要监控那些事件类型

监控:
修改,新建,移动,删除

  1. 需要新开启一个t发起端的 tty终端,
chmod  777 /var/www/html         //放开权限

cd /var/www/html
echo 'this  is  a' > a.txt   //直接ehco内容到文件,是属于修改

  1. 到之前执行监控的界面查看显示如下
 inotifywait -mrq -e modify,create,move,delete /var/www/html
/var/www/html/ MODIFY a.txt

  1. 编写监控执行脚本
cd /opt/         //在哪都行,看情况

vi inotify.sh

#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pas /var/www/html backuper@20.0.0.11::test"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if  [ $(pgrep rsync | wc -l) -le 0 ] ; then
         $RSYNC_CMD
    fi
done

--wq保存


chmod  +x  inotify.sh     //给执行权限

  1. 执行脚本,验证是否实时同步;
[root@localhost opt]# ./inotify.sh 

再进入发起端之前开启的第二台终端上,进行同步验证
[root@localhost html]# echo "this is b" > b.txt             //在/var/www/html/写入文档

在监控上可以看到写入的信息:
rsync: failed to set times on "/." (in wwwroot): Operation not permitted (1)
rsync: chgrp "/.jinmao.txt.U7UOVY" (in wwwroot) failed: Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]

  1. 源端查看是否实时同步;
[root@localhost www]# ll /var/www/html/
total 4
-rw-r--r-- 1 root root 11 Oct 23 09:50 a.txt
-rw-r--r-- 1 root root  0 Oct 23 10:45 b.txt

完成!!

总结

  1. 源端配置文件的只读权限是否改为no
  2. 发起端的推送目录权限777
  3. 通过发起端监控站点目录向源端推送(实时同步),其他节点同步源端即可;

本文链接http://www.taodudu.cc/news/show-1781925.html