作为一个运维工程师,经常可能会面对几十台、几百台甚至上千台服务器,除了批量操作外,环境同步、数据同步也是必不可少的技能。
说到“同步”,不得不提的利器就是rsync。rsync不但可以在本机进行文件同步,也可以作为远程同步工具。
前面提到了Rsync+Inotify实时同步方案部署,下面结合本人近几年运维工作中对这一工具使用的经验,简单在此梳理下:

rsync同步命令中常用的几个参数说明:

-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-v, --verbose 详细模式输出
-p, --perms 保持文件权限
-g, --group 保持文件属组信息
-o, --owner 保持文件属主信息
-r, --recursive 对子目录以递归模式处理。同步目录的时候要加上这个参数
-l, --links 保留软链结,加上这个参数,同步过来的文件会保持之前的软链接属性不变
-H, --hard-links 保留硬链结
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
-z, --compress 对备份的文件在传输时进行压缩处理
--stats 给出某些文件的传输状态
--progress 打印同步的过程
--timeout=TIME 同步过程中,IP超时时间,单位为秒
--delete 删除那些目标目录中有而源目录中没有的多余文件。这个是rsync做增量方式的全备份的最佳选择方案!!!!!!
--delete-before 接受者在输出之前进行删除操作。即先将目标目录中文件全部删除,再将源目录文件拷贝过去。这是rsync保持目标目录跟源目录一致的方案!!!
--delete-after 在同步操作之后做比较,删除那些目标目录中有而源目录中没有的多余文件
--delete-excluded 删除目标目录中那些被该选项指定排除的文件
--ignore-errors 即使出现IO错误也进行删除,忽略错误
--exclude 指定同步时需要过滤掉的文件或子目录(即不需要同步过去的),后面直接跟不需要同步的单个文件名或子目录(不需要跟路径) ,过滤多个文件或子目录,就使用多个--exclude
--exclude-from 指定同步时需要过滤掉的文件或子目录,后面跟文件(比如/root/exclue.txt),然后将不需要同步的文件和子目录放到/root/exclue.txt下。
--version 打印版本信息
--port=PORT 指定其他的rsync服务端口
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second

通常用到的rsync同步命令,如下:
25791是ssh端口
[root@bastion-IDC ~]# rsycn -e "ssh -p 25791" -avpgolr  php5.5.1 192.168.1.22:/Data/app/

==========================rsync常规错误=======================

rsync: failed to set times on "." (in test_upload): Permission denied (13)
rsync: opendir "." (in test_upload) failed: Permission denied (13) 原因是由于selinux没有关闭导致的,关闭它即可!
[root@test ~]# getenforce
Enforcing
[root@test ~]# setenforce 0
[root@test ~]# getenforce
Permissive
[root@test ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

rsync如何实现同步目标路径下的目录,不同步路径下的文件 ,只想同步目录结构
[root@bastion-IDC ~]# rsync -av --delete -f '+ */' -f '- *' SRC/ DEST/

rsync在远程同步的时候,要求目标目录要和源目录保持同步,目标目录中多余的文件都要删除
这就需要用到了参数--delete,如下:
[root@bastion-IDC ~]# /usr/bin/rsync -vlzrtogp --progress --delete root@192.168.1.120::test --password-file=/root/192.168.1.115 /root/2013/
但是这个--delete加上去就是一个危险的命令,因为它是在同步之前先将目标目录中的文件删除,然后再将源目录中的文件同步过去。
如果目标目录比较大,在删除过程中出现宕机事故就不好了。所以最好还是用--delete-before或--delete-after比较温柔点,靠谱点。

----------------------------------------------------------------------------------------------------------
rsync远程拷贝的时候,过滤某些某个文件或多个文件就用“--exclude 文件名”
要是过滤多个文件或子目录,就把过滤的文件或目录名的关键字放在一个文件里,如下的exclude_file文件
然后使用--exclude-from exclude—-file文件进行过滤

[root@bastion-IDC ~]# cat /root/lxp/exclude_file         //即rsync同步的时候,过滤掉含有下面字样名的文件

.svn
.git
.DS_Store
*.sql
*.bak
.project
main.php
environment.php
main/upload //这个过滤的是rsync同步目录下的main/upload目录
main/temp/runtime
fangff //过滤的目录
hqtime //过滤的目录
apiConfig.php
consoleConfig.php
tpl_c
consoleConfig.php

[root@bastion-IDC ~]# cat rsync_code.sh         //提前做本机与192.168.1.57的ssh无密码登陆的信任关系

#!/bin/sh
EXCLUDE_FILE="/root/lxp/exclude_file"
/usr/bin/rsync -avpgolr -e "ssh -p 25791" --exclude-from ${EXCLUDE_FILE} /var/www/vhosts/www.wangshibo.com/httpdocs/ root@192.168.1.57:/var/www/vhosts/www.wangshibo.com/httpdocs/
/usr/bin/rsync -avpgolr -e "ssh -p 25791" --exclude-from ${EXCLUDE_FILE} /var/www/vhosts/fanghu.xqshijie.com/httpdocs/ root@192.168.1.57:/var/www/vhosts/fanghu.xqshijie.com/httpdocs/
/usr/bin/rsync -avpgolr -e "ssh -p 25791" --exclude-from ${EXCLUDE_FILE} /Data/fanghu_temp/ root@192.168.1.57:/Data/fanghu_temp/

例如:同步本机目录到远程服务器上,过滤到同步目录中的个别文件
下面脚本说明:同步过程中,同步目录中凡是main-local.php和params-local.php文件都不覆盖!

[root@huanqiu ~]# cat /Data/webroot_svncode/exclude
main-local.php
params-local.php [root@huanqiu ~]# vim rsync.sh
#!/bin/bash
EXCLUDE_FILE="/Data/webroot_svncode/exclude"
SOURCE_DIR=/srv/apache-tomcat-7.0.67/webapps/jenkins/jobs/apihuanqiu}/workspace/
DEST_DIR=/var/www/vhosts/apihuanqiu/
REMOTE_IP=192.168.19.19 /usr/bin/rsync -e "ssh -p22" -avpgolr --exclude-from ${EXCLUDE_FILE} $SOURCE_DIR $REMOTE_IP:$DEST_DIR
/usr/bin/ssh -p22 $REMOTE_IP "chmod a+w -R /var/www/vhosts/apihuanqiu/frontend/web/assets/"
/usr/bin/ssh -p22 $REMOTE_IP "chmod a+w -R /var/www/vhosts/apihuanqiu/frontend/runtime/"

1)排除单独的文件夹和文件

比如要排除sources文件夹,我们可以添加 '--exclude' 选项:
--exclude 'sources'
命令是这样的:
[root@bastion-IDC ~]# rsync -e 'ssh -p 30000' -avl --delete --stats --progress --exclude 'sources' demo@192.168.1.120:/home/demo /backup/ 比如要排除 "public_html" 文件夹下的 "database.txt" 文件:
--exclude 'public_html/database.txt'
命令是这样的:
[root@bastion-IDC ~]# rsync -e 'ssh -p 30000' -avl --delete --stats --progress --exclude 'sources' --exclude 'public_html/database.txt' demo@192.168.1.120:/home/demo /backup/ 比如排除掉同步目录中的类似*-prod.properties文件(比如global-prod.properties等)
命令是这样的:
[root@bastion-IDC ~]# /usr/bin/rsync -av -e "/usr/bin/ssh -p25791" --rsync-path="/usr/bin/rsync" --exclude=*-prod.properties --progress /opt/tomcat/webapps/awaken_beta/ 192.168.1.20:/Data/app/apache-tomcat-8/awakenweb/ROOT/

2)使用 '--exclude-from' 排除多个文件夹和文件

建立文件:
[root@bastion-IDC ~]# touch /home/backup/exclude.txt 在里面定义要排除的文件夹和文件
[root@bastion-IDC ~]# vim /home/backup/exclude.txt
sources
public_html/database.*
downloads/test/* 使用指令:
--exclude-from '/home/backup/exclude.txt' 最后的命令如下:
[root@bastion-IDC ~]# rsync -e 'ssh -p 30000' -avl --delete --stats --progress --exclude-from '/home/backup/exclude.txt' demo@192.168.1.120:/home/demo /backup/

-------------------------------------------------用rsync命令和scp命令实现本机带进度条提示拷贝-----------------------------------

rsync和scp拷贝时显示进度条提示
1)rsync命令
[root@dbtest bak]# rsync -e "ssh -p22222" -avpgolr --progress db170630.tar.gz 192.168.1.198:/data/upload/
root@192.168.1.198's password:
sending incremental file list
db170630.tar.gz
702087168 4% 5.60MB/s 0:41:47

--progress 可以实现本机带进度条提示拷贝,可以实现不同机器带进度条提示拷贝,可以拷贝多个文件

2)scp命令
[root@dbtest bak]# scp -v /mnt/full20100526.tar.gz /usr/local/src/
[以上命令] 本机拷贝无法显示进度

[root@dbtest bak]# scp -v /mnt/full20100526.tar.gz root@192.168.1.1:/usr/local/src/
[以上命令] 不同机器拷贝可以显示进度条,即使不带"-v"参数也可以显示进度条

[root@dbtest bak]# scp -v /mnt/full20100526.tar.gz root@127.0.0.1:/usr/local/src/
[以上命令] 变相实现本机带进度条提示拷贝,可以不带"-v"参数

3) cp命令
暂时没有找到带进度条提示拷贝

----------------------------------------------------- rsync同步时候的限流操作----------------------------------------------------
# rsync -auvz --progress --delete --bwlimit=1000 远程文件 本地文件 //限制为1000kBytes/s
# rsync -auvz --progress --delete --bwlimit=2048 远程文件 本地文件 //限制为2M/s

--------scp同步时的限流(-l参数)--------
# scp -l 1024 file root@192.168.1.100 //限制为1M Bytes/s

常用rsync命令操作梳理的更多相关文章

  1. legend3---lavarel常用artisan命令操作

    legend3---lavarel常用artisan命令操作 一.总结 一句话总结: 帮助:php artisan可以调出帮助命令 1.npm安装后盾js? npm install hdjs node ...

  2. MML命令_华为TD-LTE后台常用MML命令操作

    MML命令 2013年12月09日 from:https://blog.csdn.net/koudaidai/article/details/17219821 设备 类别 操作 详细 RNC 小区状态 ...

  3. 项目中常用git命令操作指令(一般正常的话够用不够再看相关git命令)

    配置git1.首先在本地创建ssh key:ssh-keygen -t rsa -C "github上注册的邮箱" //(一路回车)2.进入c:/Users/xxxx_000/.s ...

  4. Mysql常用基础命令操作

    常见操作命令:1.连接Mysql (客户端工具NaviCat.phpMyAdmin.MySQL-Front)格式: mysql -h 主机地址 -u用户名 -p用户密码(1)连接到本机上的MYSQL. ...

  5. 常用shell命令操作

    1.找出系统中所有的*.c 和*.h 文件 (-o 或者) $find / -name "*.cpp" -o -name "*.h" 2.设定 eth0 的 I ...

  6. Git之常用的命令操作

    set LESSCHARSET=utf-8 git设置文件名大小写敏感 git branch -rgit checkout 'TestMaster'git checkout -b 'TestMaste ...

  7. Linux系统中常用的命令汇总

    日常开发,上线的服务器系统一般都是Linux系统,所以,熟练的掌握常用的命令操作就尤其的重要了 1) 查看某个服务的运行情况 (例如Redis) ps -ef | grep redis //e-显示程 ...

  8. 几个常用的linux命令(操作服务器时会用到)

    目录 tmux 背景 安装 使用 启动一个tmux session 暂时离开当前session 回到之前的session 重命名session 创建window 创建pane ps scp 参考 tm ...

  9. Jedis对Redis的常用命令操作

    本篇主要总结一些Jedis对Redis的常用命令操作: 1.对key操作命令 2.对String操作命令 3.对List操作命令 4.对Set操作命令 5.对Hash操作命令 6.排序操作指令 一.项 ...

随机推荐

  1. little kernel 小结

    其实几篇文章都是摘自freebuf安全的文章: 高通(Qualcomm)LK源码深度分析 高通(Qualcomm)LK源码深度分析(二) 高通(Qualcomm)LK源码深度分析(三) 将其整理为比较 ...

  2. webrtc 实时视频 .net websocket信令服务器

    这篇文章主要参考了 Webrtc WebSocket实现音视频通讯,非常感谢提供代码 前端部分完全是从这篇文章复制过来的,只是修改了webscket的url,还有加入了webrtc-adapterjs ...

  3. python最全学习资料:python基础进阶+人工智能+机器学习+神经网络(包括黑马程序员2017年12月python视频(百度云链接))

    首先用数据说话,看看资料大小,达到675G 承诺:真实资料.不加密,获取资料请加QQ:122317653 包含内容:1.python基础+进阶+应用项目实战 2.神经网络算法+python应用 3.人 ...

  4. javascript获取DOM对象三种方法

    1. getElementByID() getElementByID()方法可返回对拥有指定ID的第一个对象的引用 2. getElementByTagName() getElementByTagNa ...

  5. Hadoop2.7.6_04_HDFS的Shell操作与常见问题

    1. HDFS的shell操作 1.1. 支持的命令及参数 [yun@mini05 zhangliang]$ hadoop fs Usage: hadoop fs [generic options] ...

  6. Linux 小知识翻译 - 「packet」(网络数据包)

    用手机接收邮件或者访问网页的时候,一般会说有「packet费用」(这是日本的说法,在中国好像一般都说 “流量费”),即使对网络不太熟悉的人也知道「packet」这个词(这里也是日本的情况). 那么,「 ...

  7. NetCore开源项目集合

    具体见:https://github.com/thangchung/awesome-dotnet-core 半年前看到的,今天又看到了,记录下. 框架类: ZKWeb ABP General ASP. ...

  8. leetcode 44. Wildcard Matching(模糊匹配)

    搬运工了- - https://blog.csdn.net/jmspan/article/details/51460021

  9. js中Math之random,round,ceil,floor的用法总结

    1.Math.random(); 结果为0-1间的一个随机数(包括0,不包括1) 2.Math.floor(num); 参数num为一个数值,函数结果为num的整数部分(返回小于等于n的最大整数). ...

  10. ubuntu16.04安装配置nagios

    参考博文:https://www.howtoing.com/ubuntu-nagios/ 该博文真实有效可供参考,按照步骤,基本可以成功 一.安装的先决条件 sudo apt-get install ...