rsync介绍
rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。 rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件。
RSYNC六种命令格式
Rsync的命令格式可以为以下六种:
rsync [OPTION]... SRC DEST |
对应于以上六种命令格式,rsync有六种不同的工作模式:
- 拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号”:”分隔符时就启动这种工作模式。如:rsync -a /data /backup
- 使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:”分隔符时启动该模式。如:rsync -avz *.c foo:src
- 使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:”分隔符时启动该模式。如:rsync -avz foo:src/bar /data
- 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。如:rsync -av root@172.16.78.192::www /databack
- 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::”分隔符时启动该模式。如:rsync -av /databack root@172.16.78.192::www
- 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://172.16.78.192/www
RSYNC安装
#注:在debian、ubuntu 等在线安装方法; |
RSYNC案例
在我们内部跳板机1:杭州节点(主)中,对应在“/etc/ssh/ssh_config.d”中配置了每个项目的ssh快捷登陆,所以后续我们只需要“ssh <主机名>”便能登陆到对应的目标服务器中。
但这里有个问题,我们在杭州节点(主)中,对应变更了“/etc/ssh/ssh_config.d”的配置,那其他跳板机怎么样同步更新呢?其实这里我们采用了rsync的方式来同步配置文件。
# rsync server配置 |
RSYNC参数
rsync参数的具体解释如下: |
应用场景-Linux系统下实现文件实时同步
在我们的日常场景中经常会经常碰到文件共享同步的问题,比如:
- 集群,提供高可用服务(需要网站代码或者目录实时同步,保证数据的一致性)
- 迁移数据 (实时增量传输)
- 文件备份(实时将数据备份到其他设备,防止数据丢失)
我们针对以上场景在 Linux 系统下实现文件实时同步
Server端配置
环境介绍
修改:调整了目录顺序
操作系统:CentOS 6.8 rsync: rsync-3.0.6 (yum 源默认安装) |
安装方式
安装方式
sudoapt-get ``installrsync#debian、ubuntu 等在线安装方法;``yum ``installrsync#Fedora、Redhat 等在线安装方法;``rpm -ivh ``rsync# Fedora、Redhat 等rpm包安装方法;``rpm -qa | ``greprsync# 查看安装的版本 |
配置
修改: 文件名缺少“d” 字符
chmod 600 /etc/rsync.d/rsyncd.conf |
创建相关配置目录和文件
mkdir-p ``/etc/rsync``.d ``# rsync 配置文件目录,默认没有touch/etc/rsync``.d``/rsyncd``.conf ``# rsync服务端配置文件touch/etc/rsync``.d``/rsyncd``.pass ``# 客户端拉取文件时使用的用户密码chmod600 ``/etc/rsync``.d``/rsyncd``.confchmod600 ``/etc/rsync``.d``/rsyncd``.pass |
编写主配置文件 rsyncd.conf
vim ``/etc/rsync``.d``/rsyncd``.conf |
(以下是配置文件)
log file=/var/log/rsyncd.log |
详细参数可参考官网 rsyncd.conf 介绍
编写用户认证文件
vim /etc/rsync.d/rsyncd.pass |
修改:将代码模式去除,并添加文字描述
输入以下内容:
rsync:cloudcare |
启动服务
rsync --daemon --config=/etc/rsync.d/rsyncd.conf |
修改: 添加了“确认服务启动” 标题,以及相关命令; 将 “注:rsync 服务默认端口是 873” 前移 确认服务启动
注:rsync 服务默认端口是 873
确认服务启动
ps -ef | greprsyncnetstat-nltp | grep7589 |
rsync客户端
客户端配置很简单,只需要安装 rsync
工具即可
安装方式
# debian、ubuntu 等在线安装方法; |
验证
修改:添加了“示例内容”
示例: 将192.168.1.176 服务器上的 handbook (这里是定义的项目名称,可以参考rsync server 端的配置)项目同步到 192.168.1.167 的 /tmp 下
rsync -avzP ``rsync``@192.168.1.176::handbook ``/tmp |
说明:
-a 参数,相当于-rlptgoD,
-r 是递归 -l 是链接文件,意思是拷贝链接文件;
-p 表示保持文件原有权限;
-t 保持文件原有时间;
-g 保持文件原有用户组;
-o 保持文件原有属主;
-D 相当于块设备文件;
-z 传输时压缩;
-P 传输进度;
-v 传输时的进度等信息
![](2020-05-20-tec-linux/05.png)
详细参数可以参考: [RSYNC 参数 ](https://confluence.jiagouyun.com/pages/viewpage.action?pageId=15503070)
如果想每隔一段时间同步一次,可以配合 crontab 来实现;但是如果想实时同步,那就需要用到inotify 工具了
## inotify
> inotify是Linux核心子系统之一,做为文件系统的附加功能,它可监控文件系统并将异动通知应用程序。摘自[维基百科](https://zh.wikipedia.org/wiki/Inotify) 可以配合rsync做实时同步,inotify 通过监控文件的变化,然后触发同步脚本,实现实时同步。
### 修改添加了“实验目地” 和“拓扑环境” 两个项目
### 实验目的
将 192.168.1.167 的 /handbook 目录下的内容实时同步到 192.168.1.176 定义的 “handbook” 目录下(实验环境依旧采用上面的老环境)
### 拓扑环境
![](2020-05-20-tec-linux/06.png)
### 安装
```bash
yum install-y inotify-tools
注:inotify 其实不需要任何的配置,安装好之后默认有两个命令;
inotifywait : 在被监控的文件或目录上等待特定文件系统事件(open close delete等)发生
inotifywatch :收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计
使用
检测创建事件
inotifywait -mrq ``/handbook/cd/handbook/touch1 |
检测删除事件
inotifywait -mrq /handbook --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事 件 息: %e" -e delete cd /handbook/ rm -rf 1 4 |
编写实时同步脚本
more rsync-handbook.sh |
#!/bin/bash |
注: 其中—password-file 是指定 handbook
模块认用户认证的密码文件