rsync远程同步

rsync:是一个开源的快速备份工具,可以在不同主机之间同步整个目录

在远程同步任务中,一个叫源端,一个是发起端。

rsync的特点

在同步中,源端负责文件的原始位置,发起端和源端的文件同步

拷贝文件,链接文件也可也拷贝,拷贝设备

可以保持源文件或者目录的权限不变。包括时间、软硬连接、所有者、所在组等均可以保持不变。

可以实现增量同步,只同步发生变化的数据,数据传输的效率很高。

支持匿名认证

rsync的同步方式

1、 第一次同步都是完整备份

2、 往后的同步都是增量备份(差异备份),只同步变化的数据。

rsync命令的选项

rsync -r:递归模式,目录包含子目录里面所有文件

rsync -l:复制链接文件,软连接

rsync -v:显示同步过程中的详细信息

rsync -z:传输时进行压缩

rsync -a:归档模式,可以保留文件的权限、属性等等

rsync -p:保留文件的权限标记(所有者和所在组)

rsync -t:保留时间标记(时间戳)

rsync -g:保留文件的所在组(必须是管理员才能操作)

rsync -o:保留文件的所有者(必须是管理员才能操作)

rsync -H:保留硬连接

rsync -D:保留设备文件和其他特殊文件

rsync --delete:可以删除目标位置有,但是原始位置没有的文件

rsync的配置方法

下行同步:从源端同步到客户端

上行同步:从客户端同步到源端

源端:20.0.0.20

发起端:20.0.0.30

下行同步

bash 复制代码
源端配置:
vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = yes
#禁锢在源目录
address = 20.0.0.20
#设置监听地址
port 873
#监听端口
log file = /var/log/rsyncd.log
#指定日志文件的位置
hosts allow = 20.0.0.0/24
#指定可以访问服务端的地址
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
#以上述后缀名结尾的文件,同步时不再压缩

#配置共享模块目录以及用户名密码
[test]
path = /opt/test
comment = test
read only = no
#是否是只读模式
auth users = backuper
#用户名
secrets file = /etc/rsyncd_users,db
#保存密码的位置

vim /etc/rsyncd_users.db
backuper:123456
#声明用户名和密码

chmod 600 /etc/rsyncd_users.db
#赋权

mkdir test
chmod 777 test/

rsync --daemon
netstat -antp | grep rsync

kill $(cat /var/run/rsyncd.pid)
#杀死进程文件

如果删除pid文件需要使用kill -9杀进程号

开始下行同步:
cd test/
touch 123 456 456
echo 123 > 123
echo 456 > 456
echo 789 > 789

到客户端
rsync -avz backuper@20.0.0.20::test /opt
#rsync:开头。发起同步的命令
#-avz:a保留文件权限,v显示详细过程,z同步过程中对文件进行压缩
#backuper@20.0.0.20::test:test是模块名称
#/opt:本机的目录
ls查看一下
文件都已经同步
回到主机在创建一个文件000
再回到客户端查看

在客户端声明
echo "123456" > /etc/server.pass
chmod 600 /etc/server.pass

echo 456 >> 123
rsync -avz --password-file=/etc/server.pass backuper@20.0.0.20::test /opt
#免密交换

上行同步:
cat /proc/sys/fs/inotify/max_queued_events
#监控事件队列
cat /proc/sys/fs/inotify/max_user_instances
#最多监控的实例数
cat /proc/sys/fs/inotify/max_user_watches
#每个实例最多监控的文件数
vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
sysctl -p
#立即生效

cd /inotify
./configure
make && make install
inotify通知接口,可以用来监控文件系统的各种变化情况。文件存取、删除、移动、修改。都可以被监控
inotify机制和rsync配合在使用,既可以通知变化,也可也实现同步

测试监控事件
mkdir test 
inotifywait -mrq -e modify,create,move,delete /opt/test/
#-m表示持续监控
#-r:递归整个目录
#-q:信息提示
#-q:指定监控的事件。多个事件使用逗号隔开
cd /opt/test
touch 123
echo 123 > 123
mv 123 456
rm -rf 456
#监控事件

mkdir data
cd data/
touch gq wdf wh yst
cd /opt
chmod 777 data/
rsync -azH --delete --password-file=/etc/server.pass /opt/data backuper@20.0.0.20::test/
#实现上行同步
可以写一个上行同步和监控的脚本让他们一起执行
vim inotify.sh
#!/bin/bash
CMD="inotifywait -mrq -e modify,create,move,delete /opt/data/"
rsync -azH --delete --password-file=/etc/server.pass /opt/data backuper@20.0.0.20::test/
$CMD | while read DIRECTORY EVENT FILE
do
  if [ $(pgrep rsync | wc-l) -le 0 ]
  then
    $rsync_cmd
  fi
done

chmod 777 inotify.sh
chmod +x /etc/rc.d/re.local
echo '/opt/inotify.sh' >> /etc/rc.d/re.local
crontab -u root -e
* * */2 * * /opt/inotify.sh
#一般设置两天到三天
到这里就已经实现了既实现了监控又实现了同步

在文件数量较多的情况下,比如百万和千万级别的文件,rm -rf*速度很慢
此时rsync可以实现快速删除大量文件
mkidr /home/blank
rsync --delete-before -a -H -v --progress --stats /home/blank /opt/test1
#--delete-before:在传输过程中进行删除。
#-a:归档模式
#-H:硬连接
#-v:输出过程信息
#--progress:在传输时显示传输过程
#--stats:给出文件的传输状态
源端和客户端必须一模一样
相关推荐
叫我龙翔26 分钟前
【Linux】进程间关系与守护进程
linux·运维·服务器·计算机网络
小诸葛的博客28 分钟前
Ubuntu如何如何安装tcpdump
linux·ubuntu·tcpdump
S hh1 小时前
【Linux】进程地址空间
java·linux·运维·服务器·学习
康熙38bdc2 小时前
Linux 进程优先级
linux·运维·服务器
hhzz3 小时前
Linux Shell编程快速入门以及案例(Linux一键批量启动、停止、重启Jar包Shell脚本)
android·linux·jar
只是有点小怂3 小时前
parted是 Linux 系统中用于管理磁盘分区的命令行工具
linux·运维·服务器
三枪一个麻辣烫3 小时前
linux基础命令
linux·运维·服务器
cuisidong19974 小时前
如何在 Kali Linux 上安装 Google Chrome 浏览器
linux·运维·chrome
光通信学徒4 小时前
ubuntu图形界面右上角网络图标找回解决办法
linux·服务器·ubuntu·信息与通信·模块测试
南种北李4 小时前
Linux自动化构建工具Make/Makefile
linux·运维·自动化