rsync远程同步:下行同步、上行同步+inotify实时同步
一、rsync远程同步
1.什么是rsync远程同步
rsync是CS架构的数据镜像备份工具,可以实现全量备份和快速增量备份支持本地复制或ssh、rsync主机同步。rsync默认端口为 873
rsync特性:可以在不通主机之间镜像同步整个目录树,支持增量备份、保持链接和权限、时间、属性且传输前自动执行压缩、rsync不需要特殊权限即可安装,centos系统默认安装,支持匿名传输,注意发起端要有对应目录位置的读权限。
2. rsync备份类型
完全备份:每次备份将备份源所有文件或目录备份到目的。
差量备份:备份上次完全备份以后有变化的数据。
增量备份:备份上次完全备份以后有变化的数据。
3. rsync同步方式
①本地复制:首先是将源文件和目的位置文件对比找出差异,然后将源文件与目的位置的差异部分进行一致性同步。
②上行同步:客户端与服务端同步内容,可以理解为客户端从服务器上下载内容
③下行同步:服务端与客户端同步内容,可以理解为客户端将内容上传到服务器
4. rsync命令使用
基本格式:rsync [选项] 原始位置 目的位置
注意:原始位置文件夹若加/则是同步文件夹下所有内容,不包括文件夹本身,若需要整个目录同步则不加/
选项:
a: 归档模式,保留所有属性权限等
v: 显示同步过程
z: 传输时进行压缩
e: 指定使用什么方式同步ssh等
delete: 删除目的位置有但是原始位置没有的文件同步客户端和服务端数据
password-file: password-file=密码文件位置,可以在同步时使用免交互登录
二、rsync下行同步实验部署
1. 实验环境
192.168.50.200:客户端
192.168.50.150:服务端
关闭防火墙,安全防护模块
2. 实验流程
2.1 修改配置文件
1 rpm -q rsync #检测rsync是否安装,一般系统已默认安装rsync 2 rpm -qc rsync #查看配置文件在什么地方 3 cp /etc/rsyncd.conf /etc/rsyncd.conf_bak 4 #备份配置文件,便于回滚还原 5 vim /etc/rsyncd.conf #建立/etc/rsyncd.conf配置文件 6 Uid = root #用户id,注意不用root使用rsync同步时可能会报错
7 Gid = root #组id,注意不用root使用rsync同步时可能会报错
8 Use chroot = yes #禁锢在源目录
9 Address = 192.168.50.150 #监听地址 10 Port 873 #监听端口 tcp/udp 端口可通过cat /etc/services | grep rsync 查看 11 Log file = /var/log/rsyncd.log #日志文件位置 12 Pid file = /var/run/rsyncd.pig #存放进程id的文件位置 13 Hosts allow = 192.168.50.0/24 #允许访问的客户机地址 14 Dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不在压缩的文件类型 15 16 [myhtml] #共享模块名称 17 Path = /var/www/html #源目录的实际路径 18 Comment = this is rsync of www.kgc.com #解释说明 19 Read only = yes #是否为只读 20 Auth users = daiwei #授权账户,多个账号以空格分隔 21 Secrets file = /etc/rsyncd_users.db #存放账户信息的数据文件 22 #如采用匿名的方式,只要将其中的“auth users”和“secrets file” 23 配置项去掉即可 24 25 mkdir -p /var/www/html #创建目录 26 ls -ld /var/www/html/ #查看权限 27 #如果没有读权限需要加上读权限 28 Chmod +r /var/www/html/ 29 30 vim /etc/rsyncd_users.db 31 Daiwei:123456 #无需建立同名系统用户 32 Chmod 600 /etc/rsyncd_users.db 33 #设置权限,保证所以用户对源目录/var/www/html都有读取权限 34 rsync --daemon #启动rsync服务,以独立监听服务的方式运行 35 netstat -antp |grep rsync 36 #关闭rsync服务使用kill命令, kill 进程号,cat /var/run/rsyncd.pid查看进程号;或rm -rf /var/wrun/rsyncd.pid

2.2 进入客户端(发起端200),同步数据
1 mkdir /opt/ky26 #创建文件ky26 2 rsync -avz daiwei@192.168.50.150::myhtml /opt/ky26 3 #将模块下载到本地的ky26 ,密码:123456

2.3 进入服务端
将/etc/passwd /etc/shadow拷贝到/var/www/html目录下

2.4 进入客户端查看数据是否变更,如下图,数据已变更

2.5 在服务端/var/www/html目录下修该用户信息文件,在尾行插入一条zhangsan的信息,客户端也会同步



2.6 设置免交互密码,只给当前用户使用,其他用户无法使用


2.7 服务端删除数据,客户端若要同步需要加--delete命令


2.8 实时备份
设置每天十点半备份

2.9 补充配置源的表达方式
rysnc -avz -e ‘ssh -p ssh的端口号’ 原始位置 目标位置
服务端添加信息

客户端同步信息

三 、 rsync实时同步部署
1. 实验环境
master:192.168.50.200
slave: 192.168.50.100
2. 服务端配置
1 #基于下行同步完成的情况下 2 vim /etc/rsyncd.conf 3 read only =no 4 #关闭下行同步的只读,保存退出 5 kill `cat /var/run/rsyncd.pid` 6 #杀死rsync进程即关闭服务 7 rsync --daemon 8 #开启rsync服务 9 chmod 777 /var/www/html 10 #给lhjhtml模块的目录加权限
3. 客户端配置
1 #查看inotify内核参数 2 cat /proc/sys/fs/inotify/max_queued_events 3 #监控时间队列数 4 cat /proc/sys/fs/inotify/max_user_instances 5 #最多监控实例数 6 cat /proc/sys/fs/inotify/max_user_watches 7 #每个实例最多监控文件数 8 vim /etc/sysctl.conf #优化inotify内核参数 9 fs.inotify.max_queued_events = 32768 10 fs.inotify.max_user_instances = 1024 11 fs.inotify.max_user_watches = 1048576 12 sysctl -p #加载内核生效
4. 安装inotify
#客户端安装inotify yum install gcc gcc-c++ -y #安装编译工具 cd /opt #将安装包放入/opt下 tar zxvf inotify-tools-3.14.tar.gz #解压安装包 cd inotify-tools-3.14 ./configure && make && make install #编译安装inotify #编写脚本监控客户端/var/www/html目录,当这个目录发生改变时使用rsync同步上传到服务端 vim inotify.sh #!/bin/bash INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /var/www/html" RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html dai@192.168.50.200::lhjhtml" $INOTIFY_CMD | while read DIRECTORY EVENT FILE do if [ $(pgrep rsync | wc -l) -le 0 ] ; then $RSYNC_CMD fi done #脚本内容解析:定义2个变量,变量INOTIFY_CMD监控客户端的/var/www/html文件夹。变量RSYNC_CMD执行rsync同步将/var/www/html/文件夹内容同步上传到服务端。将变量INOTIFY_CMD监控标准输入结果传给while函数,while函数读取若有后面这些关键字则执行if语句,当执行过滤rsync命令行数小于等于0则执行变量$RSYNC_CMD
1 cd /opt/ 2 chmod +x inotify.sh 3 ./inotify.sh 4 执行脚本后会在前台执行占用窗口,重新开个窗口执行以下命令验证 5 cd /opt/ky26 6 echo "123">1.txt 7 然后到服务端查看是否上传完成
四、rsync删除大量文件
1 mkdir -p /date/blank 2 #建立一个空的文件夹 3 mkdir -p /date/test 4 cd /date/test 5 touch {1..10000} 6 #模拟/date/test文件中有1万个文件数据 7 rsync --delete-before -avH --progress --stats /home/blank /date/test 8 #使用rsync删除/date/test目录中的文件,用空文件夹同步了test文件夹 9 选项说明: 10 --delete-before 接收者在传输进行删除操作 11 -a 归档模式,表示以递归方式传输文件,并保持所有文件属性-H 保持硬连接的文件 12 -v 详细输出模式 13 -H 保持硬连接的文件 14 --progress 在传输时显示传输过程 15 --stats 给出某些文件的传输状态 16 cd /date/test 17 ls 18 #进入查看数据为空

浙公网安备 33010602011771号