rsync
scp
## 远程copy,scp
scp 源文件 目标
# 推文件
scp /tmp/yum.log root@10.0.0.41:/root
# 推目录
scp -r /etc root@10.0.0.41:/root
# 拉文件
scp root@10.0.0.41:/root /tmp/yum.log
# 拉目录
scp -r root@10.0.0.41:/root /etc
ssh:22
ftp:21
rsync:873
C/S 架构:
Client/Server
B/S
Browser/Server
端口的范围:1-65535
rsync
rsync 同步工具,把一台机器上的文件传输到另一台。
# 特性 rsync可以实现删除文件和目录的功能,相当于rm命令+scp命令+cp命令,但是优于他们的每一个命令相加。
# 选项:
-a #归档模式传输, 等于-tropgDl
-v #详细模式输出, 打印速率, 文件数量等
-z #传输时进行压缩以提高效率
--delete #让目标目录和源目录数据保持一致
--password-file=xxx #使用密码文件
------------------- -a 包含 ------------------
-r #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t #保持文件时间信息
-o #保持文件属主信息
-p #保持文件权限
-g #保持文件属组信息
-l #保留软连接
-D #保持设备文件信息
----------------------------------------------
-L #保留软连接指向的目标文件
-e #使用的信道协议,指定替代rsh的shell程序
--exclude=PATTERN #指定排除不需要传输的文件模式
--exclude-from=file #文件名所在的目录文件
rsync备份类型
- 全量备份(支持)
# 全部备份一遍
- 增量备份(支持)
# 相对上次备份增加的部分
- 差异备份(不支持差异备份)
# 相对上次全量备份增加的部分
Rsync的传输模式
- 本地传输模式(命令cp)
# 语法
Local: rsync [OPTION...] SRC... [DEST]
- 远程传输模式(命令scp)
# 这种模式是借助SSH的通道进行传输(ssh端口)
# 拉文件:rsync [选项...] 用户名@主机IP:路径 本地文件或目录
# 推文件:rsync [选项...] 本地文件或目录 用户名@主机IP:路径
- 守护进程模式(服务)
# 以服务的形式使用rsync,配置配置文件
# 拉文件:rsync [-avz] zls_bak@10.0.0.41::[模块] 源文件 目标
# 推文件:rsync [-avz] 源文件 zls_bak@10.0.0.41::[模块] 目标
守护进程模式详解
主机名 wanIP lanIP 角色 web01 10.0.0.7 172.16.1.7 客户端 backup 10.0.0.41 172.16.1.41 服务端
######### 安装服务端
# 服务端:把备份的文件放在谁的磁盘上,谁就是服务端
1. 安装rsync
yum install -y rsync
2.修改配置文件(一般来说是以.conf 或 .cnf 或 .cfg结尾)
vim /etc/rsyncd.conf
## 指定进程启动uid
uid = rsync
## 指定进程启动gid
gid = rsync
## rsync服务的端口
port = 873
## 无需让rsync以root身份运行,允许接收文件的完整属性
fake super = yes
## 禁锢指定的目录
use chroot = no
## 最大连接数
max connections = 200
## 超时时间
timeout = 600
## 忽略错误
ignore errors
## 不只读(可读可写)
read only = false
## 不允许别人查看模块名
list = false
## 传输文件的用户
auth users = rsync_backup
## 传输文件的用户和密码文件
secrets file = /etc/rsync.passwd
## 日志文件
log file = /var/log/rsyncd.log
#####################################
## 模块名
[zls]
## 注释,没啥用
comment = 123
## 备份的目录
path = /backup
3.根据配置文件内容,创建出来需要的用户,目录,密码文件...
# 3.1 创建用户
useradd rsync -s /sbin/nologin -M
# 3.2 创建备份目录
mkdir /backup
# 3.3 修改属组和属主
chown -R rsync.rsync /backup/
# 3.4 创建用户名和密码存放的文件
vim /etc/rsync.passwd
zls_bak:123
或
echo 'zls_bak:123' > /etc/rsync.passwd
# 3.5 修改密码文件的权限为600
chmod 600 /etc/rsync.passwd
4.启动服务并且加入开机自启
systemctl start rsyncd
systemctl enable rsyncd
5.检测端口
netstat -lntup | grep 873
6.检测进程
ps -ef | grep [r]sync
######## 安装客户端
# rsync 客户端不用修改配置文件
1.安装rsync
yum install -y rsync
2.客户端需要创建一个密码文件
vim /etc/rsync.pass
123
3.修改密码文件的权限为600
chmod 600 /etc/rsync.pass
## 二三步在写脚本时可以省略 换为给变量赋值
# export RSYNC_PASSWORD=密码
4.从客户端往服务端推送重要备份文件
rsync [-avz] 源文件 zls_bak@10.0.0.41::[模块]
rsync -avz /etc/shadow zls_bak@10.0.0.41::zls --password-file=/etc/rsync.pass
# rsync 无差异同步
--delete
- 拉取方式:
1.远端有什么,本地就有什么,远端没有的本地有也要删处。
2.客户端目录数据可能丢失
- 推送方式:
1.本地有什么,远程就有什么,本地没有的远端有也要删除。
2.服务器端的目录数据可能丢失。
# rsync 限速
--bwlimit=
sending incremental file list
# 限制了磁盘的I/O 吞吐量
inotify
yum install -y inotify-tools
# inotifywait 监控命令
# 选项:
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
%Xe 事件
%w 目录
%f 文件
-e 指定监控的事件
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载
# 例:
inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write + 文件或目录
rsync 守护进程模式工作流程
当执行`rsync -avz /etc/passwd zls_bak@10.0.0.41::zls`的一瞬间
# 网络是否可以通讯,客户端是否能连接服务端的IP和端口(通过)
1. 网络
2. 端口
3. 防火墙
4. selinux
# 验证用户名和密码(通过)
1. 检查配置文件的用户名
2. 检查密码文件里的内容
3. 检查密码文件的权限是不是600
4. 检查模块名:配置文件中指定的[模块名]
# 检查机器上是否有配置文件中的uid指定的用户
# 检查对应模块名下面指定的path目录,是否有权限(uid指定用户的权限)
sersync配置文件
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="true"/>
<modify start="true"/>
</inotify>
<sersync>
<!-- 客户端需要监控的目录 -->
<localpath watch="/user_upload">
<!-- rsync服务端的IP 和 name:模块 -->
<remote ip="10.0.0.41" name="nfs"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<!-- rsync命令执行的参数 -->
<commonParams params="-az"/>
<!-- rsync认证start="true" users="rsync指定的匿名用户" passwordfile="指定一个密码文件的位置权限必须600" -->
<auth start="true" users="nfs_bak" passwordfile="/etc/rsync.pas"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>
<plugin name="command">
<param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin>
<plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
</head>