文章目录
一、rsync
- rsync简介:
rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。 rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件。
1.1、rsync 包括如下的一些特性
- 能更新整个目录和树和文件系统;
- 有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;
- 对于安装来说,无任何特殊权限要求;
- 对于多个文件来说,内部流水线减少文件等待的延时;
- 能用rsh、ssh 或直接端口做为传输入端口;
- 支持匿名rsync 同步文件,是理想的镜像工具;
1.2、常用选项
-a :包含-rtplgoD,a选项后面可以跟–no-OPTION这个表示关闭-rlptgoD中的某一个例如 -a–no-l 等同于-rptgoD
-r :同步目录时要加上,类似cp时的-r选项
-v :同步时显示-些信息,让我们知道同步的过程
-l :保留软连接
-L :加上该选项后,同步软连接时会把源文件给同步
-p :保持文件的权限属性
-o :保持文件的属主
-g :保持文件的属组
-D :保持设备文件信息
-t :保持文件的时间属性
–delete :删除DEST中SRC没有的文件
–exclude :过滤指定文件,如–exclude “logs”会把文件名含logs的文件或者目录过滤掉,不同步
-P :显示同步过程,比如速率,比-v更加详细
-u :加上该选项后,如果DEST中的文件比SRC新,则不同步
-z :传输时压缩
1.3、命令语法格式(6种)
rsync [OPTION]… SRC DEST
rsync [OPTION]… SRC [USER@]host:DEST
rsync [OPTION]… [USER@]HOST:SRC DEST
rsync [OPTION]… [USER@]HOST::SRC DEST
rsync [OPTION]… SRC [USER@]HOST::DEST
rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]
1.3、语法说明
1、拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":“分隔符时就启动这种工作模式。如:rsync -a /etc/passwd /tmp/passwd_bak
2、使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:“分隔符时启动该模式。如:rsync -av /etc/passwd 192.168.204.129:/tmp/passwd_bak
3、使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:“分隔符时启动该模式。如:rsync -av 192.168.204.129:/tmp/passwd_bak /etc/passwd
4、从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::“分隔符时启动该模式。如:rsync -av root@192.168.204.128::test /etc/passwd
5、从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::"分隔符时启动该模式。如:rsync -av /etc/passwd root@192.168.78.192::test tmp/passwd_bak
6、列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://192.168.78.192/www
二、同步实验
1.实验环境
- 关闭防火墙
- 关闭核心防护
- 两台centos虚拟机
1.1源服务器
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install rsync
[root@localhost ~]# vi /etc/rsyncd.conf
添加以下内容
uid = nobody ##开启uid
gid = nobody ##开启gid
use chroot = yes ####禁锢家目录
address = 20.0.0.35 #####主机监听地址
port 873 #####端口号
log file = /var/log/rsyncd.log ######指定日志文件位置
pid file = /var/run/rsyncd.pid ######指定pid文件
hosts allow = 20.0.0.0/24 ######白名单
[fff] ######开启的共享模块,名称可以自己定
path = /var/www/html ###httpd的html文件位置作为rsync的共享目录使用
comment = www.kgc.cn ###定义名称
read only = yes ###只读
dont comperss = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 ###格式
auth users = backuper ###身份认证账号
secrets file = /etc/rsyncd_users.db ###存放密码位置
##################保存退出###########
[root@localhost ~]# chmod 600 /etc/rsyncd_users.db ##文件授权
[root@localhost ~]# rsync --daemon #####启动rsync
[root@localhost ~]# netstat -apnt | grep rsync ###过滤看看端口是否开启
tcp 0 0 20.0.0.35:873 0.0.0.0:* LISTEN 18733/rsync
[root@localhost ~]# yum -y install httpd ###不安装httpd,下面这个文件就没有
[root@localhost etc]# cd /var/www/html/
[root@localhost html]# touch 222.txt
[root@localhost html]# ll
total 4
-rw-r--r-- 1 root root 16 Oct 23 11:55 123.txt
-rw-r--r-- 1 root root 0 Oct 23 12:03 222.txt
1.2客户端
[root@localhost ~]# yum -y install rsync
[root@localhost ~]# rsync -avz backuper@20.0.0.35::fff /opt/ ###拉取源服务器文件到opt下
Password: ###这里输入我们设置的密码(abc123)
receiving incremental file list
./
123.txt
[root@localhost ~]# cd /opt
[root@localhost opt]# ll ###拉取成功
总用量 0
-rw-r--r--. 1 root root 0 10月 23 12:03 222.txt
#########################这是第一种拉取方式###########
免交互方式
[root@localhost opt]# vi /etc/server.pass ####在etc下建立这个文件,放密码的
添加
abc123
###保存退出###
[root@localhost opt]# chmod 600 /etc/server.pass ###给文件提权
[root@localhost opt]# rsync -az --delete --password-file=/etc/server.pass backuper@20.0.0.35::fff /opt/
####这里没有跳出输入密码界面,没有报错,直接去opt下查询#########
[root@localhost opt]# ll
总用量 4
-rw-r--r--. 1 root root 0 10月 23 12:03 222.txt #######免交互拉取成功
2.rsync+inotify实时同步
2.1 客户端配置
[root@localhost html]# vi /etc/sysctl.conf
添加这个在内核参数
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
####保存退出###
[root@localhost html]# sysctl -p ####刷新以下会显示添加的参数
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
将inotify-tools-3.14.tar放入在opt目录下
[root@localhost ~]# cd /opt
[root@localhost opt]# tar zxvf inotify-tools-3.14.tar.gz
[root@localhost opt]# cd inotify-tools-3.14/
[root@localhost inotify-tools-3.14]# ./configure
[root@localhost inotify-tools-3.14]# make && make install
开启监控
[root@localhost ~]# inotifywait -mrq -e modify,create,move,delete /var/www/html/
2.2、测试监控
- 重新在开启一个20.0.0.38的客户机连接端
创建一个文件在删除,同时看监控显示
- 监控正常
[root@localhost ~]# cd /opt
[root@localhost opt]# vi inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -az --delete --password-file=/etc/server.pass /var/www/html/ backuper@20.0.0.35::fff/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgerp rsync | wc -l) -le 0 ];then
$RSYNC_CMD
fi
done
##########保存退出#########
[root@localhost opt]# chmod +x inotify.sh ###赋予执行权限
2.3、源服务器配置
[root@localhost www]# vi /etc/rsyncd.conf ###修改配置文件,将原本只读进行修改
、、、、、省略、、、、
read only = yes ########将这里改为 no
、、、、、省略、、、、
#####保存退出#######
[root@localhost www]# netstat -napt | grep rsync
tcp 0 0 20.0.0.35:873 0.0.0.0:* LISTEN 18733/rsync
#####这里可以看到rsync时开启的所以实际修改配置文件是没有生效,需要重新开启让它生效#####
[root@localhost www]# kill -9 18733 ####关闭进程
[root@localhost www]# netstat -napt | grep rsync ####过滤一下发现没有
[root@localhost www]# rsync --daemon ####重启发现报错了
failed to create pid file /var/run/rsyncd.pid: File exists ###这里说的是有进程号存在
[root@localhost www]# cd /var/run/
[root@localhost run]# ll
[root@localhost run]# rm -rf rsyncd.pid
[root@localhost run]# rsync --daemon
[root@localhost run]#
[root@localhost run]# netstat -napt | grep rsync
tcp 0 0 20.0.0.35:873 0.0.0.0:* LISTEN 19385/rsync
rsync+inotify实时同步
3.1开启监控
./inotify.sh
3.2发起端创建和删除后原机是否同步
echo "this is ok" > test.txt
3.3监控显示
3.4源服务器
完成!!