rsync 远程同步连接
前言
随着服务器的节点越来越多,管理员管理的节点也越来越多。假设有一个web站点工作目录,每次站点更新都要向web集群中的每一台服务器上传更新的站点目录。如果一台一台的上传那将是一个重复耗时的工作量。工作效率极低,大大降低了管理员的运维效率。为了解决此类问题,随之而产生了rsync 远程同步连接服务。用于实时更新同步。
由于rsync服务每次都需要管理员手动开启,还需要添加守护进程才能实时进行同步,可用性不高,占用系统资源、增加系统负担。于是乎就有了他的好cp的出现,inotify服务互补了rsync服务的不足,能够在站点目录发生更改的同时,自动的同步到所有的服务器上。大大提高的管理员的工作效率。
一、了解rsync服务
1、什么是rsync
rsync是一款快速增量备份的工具
2、rsync的优点和缺点
优点:
-
快速:第一次同步时rsync会复制全部内容,但在下一次只传输修改过的文件。rsync在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
-
安全:可以使用ssh、rsync等方式来同步文件。
-
方便:支持匿名传输,以方便进行网站镜象同步。
缺点: -
执行备份的时间固定,延迟明显、实时性差
-
当同步源长期不变化时,密集的定期任务是不必要的
3、rsync的特性
-
可以镜像保存整个目录树和文件系统。
扫描二维码关注公众号,回复: 12029270 查看本文章 -
可以很容易做到保持原来文件的权限、时间、软硬链接等等。
-
无须特殊权限即可安装。
二、实例配置rsync 远程同步
1、实例环境配置
- 两台安装linux (64位)操作系统的服务器。
- 关闭防火墙、Slinux防护,配置好yum源仓库。
- 配置两台服务器的网络,网络互通。
2、rsync的使用命令
- 服务控制命令
systemctl start|stop|restart|status rsyncd - 同步本地源文件系统数据的rsync命令
rsync [选项] 原始位置 目标位置
-a //归档模式传输,递归并保留文件属性
-v //详细模式输出, 打印速率, 文件数量等
-z //传输时进行压缩以提高效率
-r //递归传输目录及子目录,即目录下得所有目录都同样传输。
-t // 保持文件时间信息
-o // 保持文件属主信息
-p // 保持文件权限
-g //保持文件属组信息
-l //保留软连接
-P // 显示同步的过程及传输时的进度等信息
-D //保持设备文件信息
-L // 保留软连接指向的目标文件
-A //保留ACL属性信息
--exclude=PATTERN // 指定排除不需要传输的文件模式
--exclude-from=file // 文件名所在的目录文件
--bwlimit=100 // 限速传输,这里的单位是KB
--delete //让目标目录和源目录数据保持一致,删除目标位置有而原始位置没有的文件
[root@wu ~]# rsync -azr /etc/passwd /opt //将etc/passwd文件同步到 /opt中
[root@wu ~]# cd /opt
[root@wu opt]# ls
passwd rh //同步成功
- 配置线网同步源的语法格式
方法一、
rsync -avz 用户名@主机地址::共享模块名 同步到的位置
rsync -avz [email protected]::wwwroot /opt
方法二、
rsync -avz rsync://用户名@主机名/共享模块名 同步到的位置
rsync -avz rsync://[email protected]/wwwroot /opt
3、配置rsync同步源过程
3.1、安装使用yum源安装rsync
[root@localhost opt]# yum -y install rsync
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
正在解决依赖关系
--> 正在检查事务
---> 软件包 rsync.x86_64.0.3.1.2-4.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
====================================================
Package 架构 版本 源 大小
====================================================
······ //省略部分信息
正在安装:
rsync x86_64 3.1.2-4.el7 centos 403 k
已安装:
rsync.x86_64 0:3.1.2-4.el7
3.2、配置rsync同步配置文件
uid = nobody
gid = nobody
use chroot = yes //禁止同步切换目录
address = 192.168.10.55 //本地监听地址
port = 873 //本地监听端口
pid file = /var/run/rsyncd.pid //服务的进程号存放位置
log file = /var/run/rsyncd.log //服务的日志文件存放位置
hosts allow = 192.168.10.56 //允许同步的IP地址
[woaita] // 共享同步模块名
path = /var/www/html //同步文件目录
read only = yes //只允许同步读取
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 //支持同步压缩
auth users = wu //创建同步连接的账户名
secrets file = /etc/rsyncd_users.db //存放账户的用户信息
3.3、设置同步用户信息
[root@wu opt]# vim /etc/rsyncd_users.db //编辑用户的信息
wu:123456 //格式“用户名:密码”编辑同步的密码
[root@wu opt]# chmod 600 /etc/rsyncd_users.db //给文件安全授权,只有本地管理员账户才能调用
[root@wu opt]# mkdir /var/www/html //创建同步目录
[root@wu html]# touch /var/www/html/ab //创建同步文件
3.4、启动rsync服务、并开启守护进程
[root@ ~]# rsync --daemon
//启动rsync服务,如果要停止这个服务请使用kill $(cat /var/run/rsyncd.pid)
[root@wu html]# netstat -anupt |grep rsync //过滤rsync进程端口号是否启动
tcp 0 0 192.168.10.55:873 0.0.0.0:* LISTEN 13878/rsync
4、测试能否同步
- 在测试同步的服务器上安装rsync
[root@localhost opt]# yum -y install rsync - 第一种方法测试
[root@localhost opt]# rsync -avz [email protected]::woaita /opt
Password: //输入之前设置的密码
receiving incremental file list
./
ab //同步成功
sent 46 bytes received 121 bytes 66.80 bytes/sec
total size is 13 speedup is 0.08
- 第二种方法测试
[root@localhost opt]# rsync -avz rsync://[email protected]/woaita /opt
Password: //输入之前设置的密码
receiving incremental file list
./
ab //同步成功
sent 46 bytes received 121 bytes 47.71 bytes/sec
total size is 13 speedup is 0.08
5、测试免密交互同步
[root@localhost ~]# vim /etc/mima //编写密码文件
123456
[root@localhost ~]# chmod 600 /etc/mima //给文件安全授权,只有本地管理员账户才能调用
[root@localhost opt]# ls //未同步前
abc rh
[root@localhost opt]# rsync -acz --password-file=/etc/mima [email protected]::woaita /opt/ //免密同步
[root@localhost opt]# ls //同步过后
ab abc rh
三、rsync-inotify自动远程连接同步
1、inotify的介绍及作用
- inotify是Linux内核提供的一个文件系统变化通知机制,从2.6.13版本的内核开始提供。
- 比如你在创建一个文件时它可以通知你哪个文件被创建了,删除文件时通知你哪个文件被删除了,修改文件时通知你哪个文件被修改了,关闭文件时哪个文件被关闭了,是可写关闭还是不可写关闭等等。
- 这个机制在某些特定用途下是很必要的,比如桌面搜索引擎,一般当我们不记得某一文件放在哪个地方时,我们可以直接通过这个桌面搜索引擎来搜索该文件以得到其位置,在Linux下的beagle搜索引擎就是用inotify实现的。
- 还有就是用在文件同步方面和文件的增量备份方面,当本地的文件被修改保存后可以即时的将该文件同步到远程服务器上去。
2、下载编译安装inotify
下载网址:https://sourceforge.net/projects/inotify-tools/
下载完成后上传到服务器端
[root@localhost ~]# tar zxvf inotify-tools-3.14.tar.gz //解压
[root@localhost ~]# cd inotify-tools-3.14/ //进入解压的文件
[root@localhost inotify-tools-3.14]# ./configure //配置安装
[root@localhost inotify-tools-3.14]# make && make install //编译安装
3、调整linux内核参数
[root@localhost proc]# vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384 //监控事件队列大小
fs.inotify.max_user_instances =1024 //最多监控实例数
fs.inotify.max_user_watches = 1048576 //每个实例最多监控文件数
4、inotify监控文件的命令格式
inotifywait|inotifywatch 参数选项 监控类型 监控的文件
- inotifywait:用于持续监控,实时输出结果
- inotifywatch:用于短期监控,任务完成后再输出结果
参数选项:
-m 持续进行监控
-r 递归监控所有子对象
-q 简化输出信息
-e 指定要监控哪些事件类型
监控类型
modify 监控更新的文件
create 监控新创建的文件
move 监控移动的文件
delete 监控移动的文件
5、编写出发自动同步的脚本
[root@localhost ~]# vim inotify.sh
#!/bin/bash
I="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
//监控/var/www/html目录发生改变时输出简要的改变信息
W="rsync -azH --password-file=/etc/mima /var/www/html/ [email protected]::woaita/"
//将自己的目录和同步源的目录同步
$I | while read DIRECTORY EVENT FILE //读取输出的监控记录
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then //如果rsync未在执行,则立即启动
$W //进行同步
fi
done
6、检验自动同步结果
- 执行同步脚本
[root@localhost ~]# ./inotify.sh //执行该脚本可以将脚本放到后台运行,也可以从新在开一个终端用于进行创建修改删除文件。
- 同步结果