> #### 本文由Zero小卒编写
### Rsync介绍
> 是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。软件适用于unix、linux、windows等多种操作系统平台。全称为Remote Rynchronization。
ssh带的scp,但优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。
Rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,类型cp命令。
Rsync还可以实现删除文件和目录的功能。
一个rsync相当于scp,cp,rm,但是还优于他们每一个命令。
### Rsync同步
> 在同步备份数据时,默认情况下,Rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录。也可以根据权限,属主等属性的变化同步,但需要制定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以能实现快速的同步备份数据。
版本区别:
version2版本会把要同步的文件加载和已有的文件比较,如果发生变化就同步过去。version3版本边比较边同步。
Rsync是文件系统之上,基于文件的同步;基于block的同步用drbd。
union双机互相同步,csync2多机同步。
### Rsync特性
- 支持拷贝特殊文件如链接文件、设备等。
- 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
- 可以做到保持源文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变-P。
- 可以实现增量同步,既只同步发生变化的数据,因此数据传输效率高。
- 可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)
- 可以通过socket(进程方式)传输文件和数据。(服务端与客户端)
- 支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。
### Rsync企业应用
- 两台服务器之间的数据同步
- 集群服务器的数据同步
- 定时同步(cron+rsync)与实时同步(rsync+inotify、rsync+sersync)
### Rsync工作方式
- 单个主机本地之间的数据传输(此时类似于cp命令的功能)
- 借助rcp、ssh等通道来传输数据(此时类似于scp命令的功能)
- 以守护进程(socket)的方式传输数据(这个是rsync自身的重要功能)
### Rsync优缺点
- 优点:增量备份同步、支持socket(daemon)、集中备份
- 缺点:大量小文件同步的时候比对时间较长,有的时候rsync进程会停止。解决方式可以打包同步或者通过drbd方式。同步大文件(10G)这样的大文件有时候也会有问题。(发生同步中断)未完成同步前,是隐藏文件。
### 常用参数
```
语法: rsync [option...] src... [dest]
说明:
[option]为同步时的参数选项 -avz
-z --compress 传输时进行压缩以提高传输效率,--compress-level=NUM可按级别压缩。
-v --verbose 详细模式输出,传输时的进度等信息。
-a --archive归档模式,表示以递归方式传输文件,并保持所有文件属性。等于-rtopgDl
-r --对子目录以递归模式,及目录下的所有目录都同样传输。
-t --保持文件时间信息。
-o --保持文件属主信息。
-p --保持文件权限。
-g --保持文件属组信息。
-P --显示同步的过程及传输时的进度信息。
-D --保持设备文件信息。
-l --保留软连接。
-e 使用的信道协议,指定替代rsh的shell。
--exclude=PATTERN 指定排除不需要传输的文件模式。
[src]为源,即需要拷贝的分区、文件或目录等。
[dest]为目的分区、文件或目录等。
```
### 常见使用方法
#### 单个主机本地之间的数据传输 本地传输模式(local-only mode)
```
rsync -avz /etc /tmp/ ---增量的拷贝方式
如果拷贝目录不带”/“,表示拷贝的内容包括本层目录,如果带"/"表示拷贝本层目录以下的内容。
删除(删除性的复制)--- 就是让/tmp和/data/null中的内容完全一致。
rsync -avz --delete /data/null/ /tmp/
rsync -r --delete /tmp/cc/ /tmp/data
```
#### 借助rsync命令,通过ssh通道来传输数据(此时类似于scp命令的功能)
```
推方式
rsync -avz /tools/httpd-2.2.27.tar.gz -e 'ssh -p 19527' root@192.168.119.20:/tools
/tools/libiconv-1.14.tar.gz ---本地文件
root@192.168.119.20:/tools ---远程主机的系统用户和地址、路径
拉方式
rsync -avz -e 'ssh -p 19527' root@192.168.119.20:/tools/xy /tmp/
```
### 无差异的同步
>从客户端推送内容时,客户端内容与服务器端内容一致,如果服务器端有其他内容,直接被删除与客户端内容保持一致。
从服务端拉取内容时,服务端内容与客户端内容一致,如果客户端有其他内容,直接被删除与服务端内容保持一致。
```shell
rsync -avz --delete /tmp/ rsync://rsync_backup@10.0.0.8/oldboy/ --password-file=/etc/rsync.password
```
本地目录内容会被清除:
```shell
rsync -avz --delete rsync://rsync_backup@10.0.0.8/oldboy/ /tmp --password-file=/etc/rsync.password
```
### 排除命令(只需要在一端进行配置)
```
排除单个文件(客户端)
rsync -avz --exclude=6.txt /tmp/ rsync://rsync_backup@192.168.106.135/backup --password-file=/etc/rsync.password
排除多个文件(客户端)
rsync -avz --exclude={1..5}.txt /tmp/ rsync://rsync_backup@192.168.106.135/backup --password-file=/etc/rsync.password
rsync -avz --exclude={1,2,3,4,5}.txt /tmp/ rsync://rsync_backup@192.168.106.135/backup --password-file=/etc/rsync.password
通过排除文件进行排除(客户端)
rsync -avz --exclude-from=paichu.log /tmp/ rsync://rsync_backup@192.168.106.135/backup --password-file=/etc/rsync.password
```
服务端排除(配置完成后,需要重启服务)
服务端配置文件中增加
```
exclude=a b --通过空格隔开
```
### 多个模块的配置(共享多个文件夹)
将相同性内容放在一起,创建不同的框
服务端配置文件中增加
```
[backup]
path = /oldboy/
ignore errors
[backup1]
path = /oldboy1/
```
- 献给乐于奉献的你
- 一、工作感悟
- 1.1 工作感悟
- 1.2 数据库工作总结
- 二、运维专题(非技术)
- 2.1 公有云运维
- 2.1.1 阿里云采坑记.md
- 三、运维专题(技术类)
- 3.1 Linux(操作系统)
- 3.1.1 常见工作总结
- 3.1.2 常见服务使用和部署
- 3.1.3 操作系统优化
- 3.1.4 常用命令(Centos8)
- 3.2 Docker & K8s(容器技术)
- 3.2.1 Docker
- 1. Docker
- 1-1 容器基础
- 1-2 部署和加速
- 1-3 常用命令
- 1-4 Dockerfile编写
- 1-5 容器网络
- 1-6 数据持久化
- 2. docker-compose
- 2-1 基础
- 3.2.2 kubernetes
- 1. 导读-请先看我
- 2. kubeadm部署集群
- 1-1 k8s-1.14-基于calico
- 1-2 k8s-1.17-基于flanne
- 3. 二进制部署集群
- 4. 日常工作及故障处理
- 4-1 常用命令
- 4-2 故障处理
- 3.2.3 依赖服务部署
- 1. Harbor(镜像仓库)
- 1-1 harbor-2.1.0(单节点)
- 3.3 CICD(持续集成/部署)
- 3.3.1 GitLab
- 1. 服务部署
- 1-1 Gitlab-CE-13.3.4(单节点)
- 2. Git基础
- 3.3.2 Ansible
- 1. 服务部署
- 1-2 ansible-2.5(pip部署)
- 3. ansible-playbook
- 3-1 基于Roles的Playbook
- 3-3 循环语法
- 3.3.3 Jnekins
- 1. Jenkins部署
- 1-1 Jenkins-2.65部署
- 1-2 Jenkins-2.249部署
- 2. Jenkins项目初始化
- 3. Jenkins集成
- 3-1 Jenkins-2.65集成Sonar
- 3.4 LB/HA(负载均衡,反向代理)
- 3.4.1 LVS+Keepalive
- 1. LVS为MySQL读提供负载均衡
- 3.4.2 Pacemaker(HA)
- 1. 常用命令(转)
- 3.5 Runtime(代码运行环境)
- 3.5.1 Tomcat(Web中间件)
- 1. Tomcat部署手册
- 1-1 Tomcat-7.0.76部署
- 2. Tomcat常用脚本
- 3.6 NoSQL(非关系型数据库)
- 3.6.1 redis(非关系数据库)
- 1. Redis 基础
- 2. Redis 4.0变化
- 3. Codis实现Redis的集群
- 4. Redis故障处理
- 5. redis安全第一步
- 6. Redis集群搭建
- 7. CacheCloud部署
- 3.6.1 Redis挑战
- 3.6.2 MongoDB(文档数据库)
- 1. Mongodb基础
- 1-1 Mongodb4.0新特性
- 1-2 支持多大数据量
- 2. Mongodb安装
- 2-1 Mac OS安装Mongodb
- 2-2 Yum安装Mongodb
- 2-3 二进制安装Mongodb
- 2-4 docker容器安装Mongodb
- 2-5 Mongodb 配置文件详解
- 2-6 Mongodb 生产安全清单
- 2-7 用户身份认证和授权
- 3. Mongodb副本集
- 3-1 副本集搭建
- 3-2 用户身份认证与授权
- 4. 日常维护工作
- 4-1 Mongodb磁盘回收
- 4-2 Mongodb备份恢复到任意时间点
- 4-3 Mongodb慢查询分析
- 4-4 Mongodb版本升级
- 4-5 Mongodb副本集成员状态
- 4-6 Mongodb备份恢复工具使用
- 4-7 Mongodb服务启动和停止
- 4-8 修改副本集成员oplog大小
- 4-9 Mongodb 副本集Oplog
- 3.7 MQ(消息队列)
- 3.7.1 Zookeeper(分布式协调系统)
- 1. ZooKeeper基础
- 2. ZooKeeper集群搭建
- 2-1 ZK-3.4.10部署
- 3.2 RabbitMQ(消息队列)
- 1. 服务部署
- 1-1 RabbitMQ-3.8部署
- 2. 常用命令
- 3.8 Monitor(数据收集,监控)
- 3.8.1 Zabbix(运维监控)
- 1. 服务部署
- 1-1 服务端部署
- 1-2 客户端部署
- 2. 监控服务
- 2-1 监控Apache
- 2-2 监控IIS
- 2-3 监控Ningx
- 2-4 监控Tomcat(6/7/8)
- 2-5 监控WebSphere 7
- 2-6 监控MySQL
- 2-7 监控Oracle
- 2-8 监控SQL Servre
- 2-9 监控Weblogic
- 2-10 监控Windows
- 2-11 自定义监控项
- 3. 告警推送
- 3-1 邮件告警
- 3-2 短信告警
- 3-3 告警推到Syslog
- 4. 日常工作
- 4-1 数据库优化(TokuDB)
- 4-2 数据库优化(分区表)
- 4-3 前端定制(Grafana)
- 5. 与Grafana结合
- 3.8.2 ELKBstack(日志收集展示)
- 1. 服务部署
- 1-1 ELK 5.5部署及配置
- 1-1-1 ELKBstack介绍
- 1-1-2 Elasticsearch部署
- 1-1-3 Logstash部署
- 1-1-4 Kibana部署
- 1-1-5 X-pack部署
- 1-1-6 Filebeat部署
- 2. ELK高级配置
- 1. Elasticsearch实战
- 2. Logstash实战
- 3. Filebeat实战
- 5. 引入队列
- 3.9 Virtualization(虚拟化)
- 3.10 Basic(基础服务)
- 3.10.1 Piwik-Matomo(用户行为分析)
- 1. Piwik前期分析
- 2. Piwik介绍和部署
- 2-1 Piwik-3.x版本(早期)
- 3. Piwik 功能配置
- 4. Piwik 模拟数据和压测
- 5. Piwik运转原理
- 6. Piwik数据库模式(一)
- 6-1 第一部分
- 6-2 第二部分
- 3.10.2 Cobbler(系统自动部署)
- 1. Cobbler 可以干什么?
- 2. Cobbler 基础原理
- 3. Cobbler 安装
- 3-1 Cobbler-2.8部署
- 4. Cobbler 基础配置
- 5. Cobbler 配置文件
- 6. 一键优化脚本
- 3.10.3 Rsync(数据同步服务)
- 1. Rsync基础
- 2. 案例:页面部署(服务端拉取)
- 3.10.4 NFS(共享存储)
- 1. NFS部署手册
- 2. 客户端NFS备份脚本
- 3.10.5 Grafana(可视化)
- 1. 安装(8.2.x)
- 3.11 Tools(软件工具)
- 3.11.1 基准测试
- 1. 基准测试方法论
- 2. 压测工具 - Siege
- 3. 压测工具 - http_load
- 3.12 DB(关系型数据库)
- 3.12.1 MySQL(关系数据库)
- 1. MySQL部署
- 1-1 MySQL-5.7部署
- 1-2 Percona-5.7 + TokuDB 部署
- 2. MySQL复制
- 2-1 MySQL异步复制
- 3. MySQL备份恢复
- 3-1 xtrabackup 备份恢复
- 4. MySQL 高可用
- 4-1 MHA(HA)
- 4-1-1 MHA 架构介绍和原理
- 4-1-2 MHA日常管理
- 4-1-3 MHA 自动Failover
- 4-1-4 MHA常用参数
- 4-1-5 MHA 报错
- 4-1-6 MHA相关配置文件和脚本
- 4-2 MyCAT
- 4-2-1 MyCAT 介绍和部署
- 4-1-3 MyCAT读写分离案例解析
- 5. MySQL 常用脚本
- 5-1 MySQL常用统计语句
- 5-2 MySQL性能分析脚本
- 6. MySQL 日常及故障处理
- 6-1 MySQL死锁排查
- 6-2 复制故障
- 6-3 MySQL 升级注意事项
- 6-3 MySQL授权
- 3.12.2 Oracle(关系数据库)
- 1. Oracle部署
- 1-1 Oracle11g单实例部署
- 1-2 Oracle12c单实例部署
- 2. Oracle常用脚本
- 3. Oracle 知识点
- 六、Ansible开源项目
- 6.1 项目初始化手册
- 6.1.1 Ansible错误处理
- 6.1.2 一种预先判断是否操作的方法
- 6.2 System初始化
- 6.3 Nginx/Tnginx部署
- 6.4 Python部署
- 6.5 PHP部署
- 6.6 MySQL部署
- 6.7 Docker部署
- 6.8 Haproxy部署
- 6.9 Redis部署
- 1. 变量和tags信息
- 3. Redis主从部署
- 4. Redis集群部署
- 5. 清理数据
- 6.10 Software软件部署
- 6.11 Zabbix部署
- 6.12 Elastic部署
- 6.13 Tomcat
- 6.14 Kafka部署
- 6.15 Zookeeper部署
- 6.16 Etcd集群部署
- 6.17 M3DB部署
- 6.18 Pormetheus部署
- 七、学习资源推荐
- 八、从瞎搞到放弃
- 8.1 CodeQL(语义代码分析引擎)
- 8.1.1 背景及计划
- 8.1.2 CodeQL概述
- 8.1.3 简单部署和使用
- 8.1.4 后续
- 8.2 dbdeployer(轻松部署MySQL)
- 归档笔记
- 三、常用服务部署(迁移中)
- 3.4 Nginx & PHP(Web服务)
- 3.4.1 Nginx(Web)
- 1. Nginx基础和部署
- 2. Nginx 我的一些思考
- 3. Nginx(Web)配置
- 4. Nginx(Proxy)配置
- 5. Nginx日常管理
- 3.4.3 PHP
- 1. PHP 7.1 部署
- 2. PHP5.6 部署
- 4. PHP原理
- 5. PHP 常用模块
- 二、运维项目实战(迁移中)
- 2.1 标准化 & 工具化项目
- 2.1.1 系统部署和优化
- 2.1.5 全网日志收集展示平台项目
- 1. 项目需求
- 2. 整体方案规划
- 3. 日志收集配置
- 4. 消息缓冲队列
- 5. 日志处理转发
- 6. 日志数据展示(待补充)
- 7. ELK安全配置(上)
- 8. ELK安全配置(下)
- 9. 项目总结
- 2.2 高性能Web项目
- 2.2.1 网站需求(完善中)