# rsync操作和部署
## 1 基础知识
### 1.1 Rsync简介
可实现全量及增量、本地或远程的数据同步备份的工具
官网:https://www.samba.org/ftp/rsync/rsync.html
相当于cp(本地复制)、scp(远程复制)、rm(删除)命令的合体但比这三个命令更优秀
既能够备份数据内容,也能够备份属性信息
### 1.2 Rsync优缺点:
1) 优点:
* 支持拷贝特殊文件如链接文件,设备等
* 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能
* 可以做到保持元文件或目录的权限、时间、软硬链接、属主、组等所有属性均不变
* 可时间增量同步、即只同步发生变化的数据,因此数据的效率很高
* 可以使用rcp,rsh,ssh等方式来配合传输文件达到加密传输
* 可以通过socket(守护进程方式)传输文件和数据(服务端和客户端)
* 支持匿名的、认证的(无需系统用户)进程模式传输,可方便安全的进行数据备份及镜像
2) 缺点:
* 大量小文件同步的时候,时间较长,有时候rsync进程可能会停止
* 同步10G这样的大文时时,可能会中断,未完整同步前,是隐藏文件
* rsync本身不对数据加密,需配合ssh等实现加密
### 1.3 Rsync的工作方式
* 单个主机本地之间的数据传输(类似于cp)
* 借助rcp,ssh等通道来传输数据(类似于scp)
* 以守护进程(socket)的方式来传输数据(服务端和客户端)
## 2 普通用法
### 2.1 基本参数
常用参数:avz或az
```sh
-v 详细模式输出,传输时的进度等信息
-z 传输时进行压缩以提高传输效率。--compress-level=NUM可按级别压缩
-a 归档模式,表示以递归方式传输文件,并保持文件说有属性,等于rtopgDI
-r 对子目录以递归传递,即目录下的所有目录都同样传输,注意是小写r
-t 保持稳健时间信息
-o 保持文件属主信息
-p 保持文件权限
-g 保持文件属组信息
-P 显示同步的过程及传输的进度等信息
-D 保持设备文件信息
-l 保留软链接
-e 使用指定的shell程序替代传输用的rsh管道,如ssh
--exclude=PATTERN 指定排除不需要传输的文件模式(和tar参数一样)
--exclude-from=file 指定排除某个目录中的某个文件(和tar参数一样)
--bwlimit=RATE 限制传输时的带宽(避免全部占用完带宽)
--partial 断点续传
--delete 让目标目录和源目录数据保持一致(不一致会删除)
```
>说明,rsync备份时,如果备份/tmp,表示备份目录名和目录下的内容,如果备份/tmp/,表示只备份目录下的内容
### 2.2 普通模式
1) 本地模式语法:
```sh
rsync [OPTION...] 源路径 目的路径
```
2) 远程模式语法:
```sh
拉: rsync [OPTION...] [远端用户@]主机名或IP:源路径 目标路径
推: rsync [OPTION...] 源路径 [远端用户@]主机名或IP:目标路径
```
>PS1:前面的是原路径,后面的是目标路径,推和拉的区别仅仅是远端地址所在的位置
>PS2:远端用户名可省略,省略代表用本机当前用户去连接
3) 应用举例
* 备份本机hosts文件到到tmp目录
```sh
rsync -avz /etc/hosts /tmp
```
* 推送本机hosts文件到另外一台主机tmp目录
```sh
rsync -avz /etc/hosts root@172.16.1.31:/tmp/
```
* 拉取远端主机hosts文件本机tmp目录
```sh
rsync -avz root@172.16.1.31:/etc/hosts /tmp/
```
* 配合ssh加密传输数据[-e]
```sh
rsync -avz -e 'ssh -p 22' /etc/hosts root@172.16.1.31:/tmp/
```
* 同步时排除某些文件[--exclude]
```sh
rsync -avz --exclude=a.txt /backup/ root@172.16.1.41:/tmp/
rsync -avz --exclude-from=paichu.txt /backup/ root@172.16.1.41:/tmp/
--exclude参数使用相对路径,可以排除单个和多个文件
也可以用--exclude-from=paichu.txt,排除这个文件中指定的文件
```
* 无差异同步[--delete]
```sh
rsync -avz --delete /backup/ root@172.16.1.41:/tmp/
--delete会把服务器上有而本地没有的数据全部删除,非常危险,慎用慎用
```
* 限速[--bwlimit]
```sh
sync -avz --bwlimit=100 /backup/ root@172.16.1.41:/tmp/
```
## 3. **守护进程模式(重点)**
### 3.1 基础说明
搭建服务端启动守护进程(873端口),然后在客户端推或拉数据进行备份,比普通远程模式好的地方在于,免交互的备份数据,配合定时任务食用更加.
**语法**
```
拉: rsync [OPTION...] [USER@]HOST::SRC DEST
推: rsync [OPTION...] SRC [USER@]HOST::DEST
```
>PS:推拉的区别同普通模式,用的更多的是推模式,因为拉的模式客户端数量很大时,会非常消耗服务端资源,而推模式请求由客户端发起,不占用服务端资源
### 3.2 服务器端配置过程:
1) 检查和安装rsync
```sh
rpm -qa rsync
yum install rsync -y
```
先检查是否有安装,如果有则安装
2) 添加rsync服务的用户
```sh
useradd -s /sbin/nologin -M rsync
id rsync
```
3) 生成rsyncd.conf配置文件并写入内容
```sh
cat >/etc/rsyncd.conf <<"EOF"
##rsyncd.conf start##
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
list = false
hosts allow = 172.16.1.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by noah"
path = /backup
read only = false
##rsync_conf_____end##
EOF
```
关于配置文件各行的说明见文档最后
4) 创建共享目录并授权rsync服务管理
```sh
mkdir /backup -p
chown -R rsync.rsync /backup/
```
5) 创建认证文件并修改权限
```sh
echo "rsync_backup:noah123" >/etc/rsync.password
cat /etc/rsync.password
chmod 600 /etc/rsync.password
ls -l /etc/rsync.password
```
此处的用户和密码,非系统中的用户和密码
6) 启动rsync服务加入开机启动
```sh
rsync --daemon
netstat -lntup|grep 873
echo "/usr/bin/rsync --daemon" >>/etc/rc.local
tail -1 /etc/rc.local
```
### 3.3 客户端配置
1) 检查和安装rsync
```sh
rpm -qa rsync
yum install rsync -y
```
2) 生成链接服务器需要的密码文件
```sh
echo "noah123" >/etc/rsync.password
chmod 600 /etc/rsync.password
```
#只需要密码不需要用户名
3) 同步数据(推送)
```sh
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
```
提示:ip后面跟的backup是服务器配置文件中的模块名,不是备份路径
## 4 配置文件说明
1) 配置文件整体说明
```sh
uid = rsync #用户,远端的客户机使用rsync用户来访问共享目录
gid = rsync #用户组
use chroot = no #安全相关
max connections = 200 #最大连接数
timeout = 300 #超时时间
pid file = /var/run/rsyncd.pid #进程对应的进程号文件
lock file = /var/run/rsync.lock #锁文件,防止文件不一致
log file = /var/log/rsyncd.log #日志文件
ignore errors #忽略错误
list = false #不允许列表(ls)
hosts allow = 172.16.1.0/24 #白名单,允许的网段
#hosts deny = 0.0.0.0/32 #黑名单,拒绝的网段
auth users = rsync_backup #链接的虚拟用户,非系统用户
secrets file = /etc/rsync.password #虚拟用户的账号密码文件
[backup] #模块名称,可以有多个,称为多模块
comment = "backup dir by noah" 模块描述信息
path = /backup #服务器提供的共享目录
read only = false #可写
```
注意不要在配置文件中某一行后面用#号写注释,识别不了的,注释用的#号必须写在行首
2) 黑白名单三种情况说明:
* 只有白名单,白名单网段或主机信息允许。其余阻止
* 只有黑名单,黑名单网段或主机信息阻止,其余允许
* 黑白名单都有,相当于只有黑名单的方式
建议使用白名单方式
- shell编程
- 变量1-规范-环境变量-普通变量
- 变量2-位置-状态-特殊变量
- 变量3-变量子串
- 变量4-变量赋值三种方法
- 变量5-数组相关
- 计算1-数值计算命令和案例
- 计算2-expr命令举例
- 计算3-条件表达式和各种操作符
- 计算4-条件表达式和操作符案例
- 循环1-函数的概念与作用
- 循环2-if与case语法
- 循环3-while语法
- 循环4-for循环
- 其他1-判断传入的参数为0或整数的多种思路
- 其他2-while+read按行读取文件
- 其他3-给输出内容加颜色
- 其他4-shell脚本后台运行知识
- 其他5-6种产生随机数的方法
- 其他6-break,continue,exit,return区别
- if语法案例
- case语法案例
- 函数语法案例
- WEB服务软件
- nginx相关
- 01-简介与对比
- 02-日志说明
- 03-配置文件和虚拟主机
- 04-location模块和访问控制
- 05-status状态模块
- 06-rewrite重写模块
- 07-负载均衡和反向代理
- 08-反向代理监控虚拟IP地址
- nginx与https自签发证书
- php-nginx-mysql联动
- Nginx编译安装[1.12.2]
- 案例
- 不同客户端显示不同信息
- 上传和访问资源池分离
- 配置文件
- nginx转发解决跨域问题
- 反向代理典型配置
- php相关
- C6编译安装php.5.5.32
- C7编译php5
- C6/7yum安装PHP指定版本
- tomcxat相关
- 01-jkd与tomcat部署
- 02-目录-日志-配置文件介绍
- 03-tomcat配置文件详解
- 04-tomcat多实例和集群
- 05-tomcat监控和调优
- 06-Tomcat安全管理规范
- show-busy-java-threads脚本
- LVS与keepalived
- keepalived
- keepalived介绍和部署
- keepalived脑裂控制
- keepalived与nginx联动-监控
- keepalived与nginx联动-双主
- LVS负载均衡
- 01-LVS相关概念
- 02-LVS部署实践-ipvsadm
- 03-LVS+keepalived部署实践
- 04-LVS的一些问题和思路
- mysql数据库
- 配置和脚本
- 5.6基础my.cnf
- 5.7基础my.cnf
- 多种安装方式
- 详细用法和命令
- 高可用和读写分离
- 优化和压测
- docker与k8s
- docker容器技术
- 1-容器和docker基础知识
- 2-docker软件部署
- 3-docker基础操作命令
- 4-数据的持久化和共享互连
- 5-docker镜像构建
- 6-docker镜像仓库和标签tag
- 7-docker容器的网络通信
- 9-企业级私有仓库harbor
- docker单机编排技术
- 1-docker-compose快速入门
- 2-compose命令和yaml模板
- 3-docker-compose命令
- 4-compose/stack/swarm集群
- 5-命令补全和资源限制
- k8s容器编排工具
- mvn的dockerfile打包插件
- openstack与KVM
- kvm虚拟化
- 1-KVM基础与快速部署
- 2-KVM日常管理命令
- 3-磁盘格式-快照和克隆
- 4-桥接网络-热添加与热迁移
- openstack云平台
- 1-openstack基础知识
- 2-搭建环境准备
- 3-keystone认证服务部署
- 4-glance镜像服务部署
- 5-nova计算服务部署
- 6-neutron网络服务部署
- 7-horizon仪表盘服务部署
- 8-启动openstack实例
- 9-添加计算节点流程
- 10-迁移glance镜像服务
- 11-cinder块存储服务部署
- 12-cinder服务支持NFS存储
- 13-新增一个网络类型
- 14-云主机冷迁移前提设置
- 15-VXALN网络类型配置
- 未分类杂项
- 部署环境准备
- 监控
- https证书
- python3.6编译安装
- 编译安装curl[7.59.0]
- 修改Redhat7默认yum源为阿里云
- 升级glibc至2.17
- rabbitmq安装和启动
- rabbitmq多实例部署[命令方式]
- mysql5.6基础my.cnf
- centos6[upstart]/7[systemd]创建守护进程
- Java启动参数详解
- 权限控制方案
- app发包仓库
- 版本发布流程
- elk日志系统
- rsyslog日志统一收集系统
- ELK系统介绍及YUM源
- 快速安装部署ELK
- Filebeat模块讲解
- logstash的in/output模块
- logstash的filter模块
- Elasticsearch相关操作
- ES6.X集群及head插件
- elk收集nginx日志(json格式)
- kibana说明-汉化-安全
- ES安装IK分词器
- zabbix监控
- zabbix自动注册模板实现监控项自动注册
- hadoop大数据集群
- hadoop部署
- https证书
- certbot网站
- jenkins与CI/CD
- 01-Jenkins部署和初始化
- 02-Jenkins三种插件安装方式
- 03-Jenkins目录说明和备份
- 04-git与gitlab项目准备
- 05-构建自由风格项目和相关知识
- 06-构建html静态网页项目
- 07-gitlab自动触发项目构建
- 08-pipelinel流水线构建项目
- 09-用maven构建java项目
- iptables
- 01-知识概念
- 02-常规命令实战
- 03-企业应用模板
- 04-企业应用模板[1键脚本]
- 05-企业案例-共享上网和端口映射
- SSH与VPN
- 常用VPN
- VPN概念和常用软件
- VPN之PPTP部署[6.x][7.x]
- 使用docker部署softether vpn
- softEther-vpn静态路由表推送
- SSH服务
- SSH介绍和部署
- SSH批量分发脚本
- 开启sftp日志并限制sftp访问目录
- sftp账号权限分离-开发平台
- ssh配置文件最佳实践
- git-github-gitlab
- git安装部署
- git详细用法
- github使用说明
- gitlab部署和使用
- 缓存数据库
- zookeeper草稿
- mongodb数据库系列
- mongodb基本使用
- mongodb常用命令
- MongoDB配置文件详解
- mongodb用户认证管理
- mongodb备份与恢复
- mongodb复制集群
- mongodb分片集群
- docker部署mongodb
- memcached
- memcached基本概念
- memcached部署[6.x][7.x]
- memcached参数和命令
- memcached状态和监控
- 会话共享和集群-优化-持久化
- memcached客户端-web端
- PHP测试代码
- redis
- 1安装和使用
- 2持久化-事务-锁
- 3数据类型和发布订阅
- 4主从复制和高可用
- 5redis集群
- 6工具-安全-pythonl连接
- redis配置文件详解
- 磁盘管理和存储
- Glusterfs分布式存储
- GlusterFS 4.1 版本选择和部署
- Glusterfs常用命令整理
- GlusterFS 4.1 深入使用
- NFS文件存储
- NFS操作和部署
- NFS文件系统-挂载和优化
- sersync与inotify
- rsync同步服务
- rsyncd.conf
- rsync操作和部署文档
- rsync常见错误处理
- inotify+sersync同步服务
- inotify安装部署
- inotify最佳脚本
- sersync安装部署
- 时间服务ntp和chrony
- 时间服务器部署
- 修改utc时间为cst时间
- 批量操作与自动化
- cobbler与kickstart
- KS+COBBLER文件
- cobbler部署[7.x]
- kickstart部署[7.x]
- kickstar-KS文件和语法解析
- kickstart-PXE配置文件解析
- 自动化之ansible
- ansible部署和实践
- ansible剧本编写规范
- 配置文件示例
- 内网DNS服务
- 压力测试
- 压测工具-qpefr测试带宽和延时