系统学习Linux-Rsync远程数据同步服务(三)

一、概述

rsync是linux 下一个远程数据同步工具

他可通过LAN/WAN快速同步多台主机间的文件和目录,并适当利用rsync 算法减少数据的传输

会对比两个文件的不同部分,传输差异部分,因此传输速度相当快

rsync可拷贝、显示目录属性,以及拷贝文件,并选择性的压缩及递归拷贝

二、特性

快速

第一次传输全部,下一次传输差异

rsync在传输过程中可以实行压缩和解压缩,使用更少的带宽

安全

可以使用scp、ssh等方式传输

直接通过socket连接

支持匿名传输、方便进行网站镜像

三、应用场景

增量同步

备份迁移

四、数据的同步方式

数据备份:拉取(下载) pull

数据恢复:推送(上传) push

五、rsync传输模式

本地传输 本地同步数据,类似于cp

远程传输 远程同步数据,类似于scp

守护进程 通过模块化的方式实现批量传输

六、rsync应用

安装

yum -y install rsync

如果已经安装,直接启动

systemctl start rsyncd

监听端口号

TCP/873

七、rsync命令

格式

rsync [选项] 原始位置 目标位置

作为远程命令

拉取 rsync [OPTION...] [USER@]HOST:SRC... [DEST]

推送 rsync [OPTION...] SRC... [USER@]HOST:DEST

作为rsync服务

拉取 rsync [OPTION...] [USER@]HOST::SRC... [DEST]

rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]

推送 rsync [OPTION...] SRC... [USER@]HOST::DEST

rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

选项

-a 归档模式,递归并保留对象属性,等同于-rlptgoD

-v -verbose 显示同步过程的详细信息

-z 在传输文件时进行压缩

举例

本地 rsync -avz /abc /opt

rsync -avz abc/ /opt

远程 rsync -avz root@192.168.2.7:/etc/hostname /root/

rsync -avz /root/hostname root@192.168.2.7:/etc/hostname

配置文件

/etc/rsyncd.conf

全局配置

|-----------------|------------------------------------|
| address | 独立运行时,用于指定服务器运行的 IP 地址,默认本地所有IP |
| port | 指定 rsync 守护进程监听的端口号,默认 873 |
| pid file | rsync 的守护进程将其 PID 写入指定的文件 |
| log file | 指定 rsync 守护进程的日志文件,而不将日志发送给 syslog |
| syslog facility | 指定 rsync 发送日志消息给 syslog 时的消息级别 |
| socket options | 指定自定义 TCP 选项 |
| lockfile | 指定rsync的锁文件存放路径 |
| timeout | 超时时间 |

模块配置

|--------------------|-------------------------------------------------|
| path | 指定当前模块的同步路径,该参数是必须指定的 |
| comment | 给模块指定一个描述 |
| use chroot | 在服务运行时要不要把他锁定在家目录,默认为 true |
| uid和gid | 指定rsync运行用户和用户组,默认nobody |
| max connections | 最大并发连接数,0为不限制 |
| lock file | 指定支持 max connections的锁文件。默认/var/run/rsyncd.lock |
| list | 指定列出模块列表时,该模块是否被列出。默认为 true |
| read only | 只读选择,默认true |
| write only | 只写选择,不让客户端从服务器上下载文件。默认false |
| ignore errors | 忽略IO错误,默认true |
| ignore nonreadable | 指定 rysnc 服务器完全忽略那些用户没有访问权限的文件。 |
| dont compress | 用来指定那些在传输之前不进行压缩处理的文件。 |
| hosts allow | 指定哪些主机客户允许连接该模块。默认值为 * |
| hosts deny | 指定哪些主机客户不允许连接该模块 |
| auth users | 指定用于上传的用户名 |
| secrets files | 指定密码文件 |

守护进程传输

配置

|--------------------------------|-------------------------|
| uid=rsync | |
| gid=rsync | |
| fake super=yes | # 用于允许非root用户,在备份目录创建文件 |
| list=false | # 默认true,允许查看本机有哪些模块 |
| auth users=rsync_backup | # 用于指定认证用户 |
| secrets file=/etc/rsync.passwd | # 指定认证用户密码 |
| read only = false | |
| max connections=4 | # 允许最大连接数 |
| read only=false | 默认yes,模块目录只读权限 |
| ignore errors | # 屏蔽错误报错 |
| timeout=900 | # 指定rsync传输超时时间 |
| [backup] | |
| path=/backup | |

创建用户

useradd rsync -s /sbin/nologin -M

创建认证用户的密码

echo 'rsync_backup:123456' >/etc/rsync.passwd

chmod 600 /etc/rsync.passwd

准备模块目录

mkdir /backup

chown rsync.rsync /backup

重启服务

systemctl restart rsyncd

客户端远程传输

rsync -avz /etc/hosts rsync_backup@192.168.2.62::backup

通过密码文件实现免密传输

vim /etc/rsync.passwd

chmod 600 /etc/rsync.passwd

rsync -avz /etc/hosts rsync_backup@192.168.2.62::backup --password-file /etc/rsync.passwd

实验练习

1.使用认证用户为jx_名字缩写,认证密码为班级编号

2.模块名称为juexing

3.自行修改文件内容,在服务器上实现同步

vim /etc/rsyncd.conf 写入红框内容

useradd rsync -s /sbin/nologin -M 创建rsync用户并给到命令权限

echo 'jx_lwj:2305' >/etc/rsync.passwd 给认证用户设置密码

chmod 600 /etc/rsync.passwd 并设置权限

mkdir /juexing 准备模块目录

chown rsync.rsync /juexing 目录属组属主要是给到sbin命令权限的用户与组

systemctl restart rsyncd 重启服务

打开客户端

rsync -avz /etc/hosts jx_lwj@192.168.1.1::juexing

测试成功后设置通过密码文件实现免密传输

vim /etc/rsync.passwd 写入刚才设置的密码2305

chmod 600 /etc/rsync.passwd 设置密码文件权限

rsync -avz /etc/hosts jx_lwj@192.168.1.1::juexing --password-file /etc/rsync.passwd 自动读取密码文件在/etc/rsync.passwd


rsync+inotfy实时同步

服务器端

安装网站服务,启动,但是不写首页文件

修改主配置文件

vim /etc/rsync.config

uid = root

gid = root

wwwroot

path = /var/www/html

comment = backup export area

read only = false

hosts allow = 192.168.1.0/24

开发客户端

安装inotify工具

inotify-tools

tar xf inotify-tools-3.14.tar.gz

./configure && make && make install

配置内核参数

vim /etc/sysctl.conf

fs.inotify.max_user_instances = 1024

fs.inotify.max_queued_events = 16384

fs.inotify.max_user_watches=1048576

sysctl -P

inotifywait -mrq -e modify,create,move,delete /var/www/html

这条命令输入后 可以实时观察写入、删除等

编写脚本

vim /opt/inotify_rsync.sh

#!/bin/bash

INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"

RSYNC_CMD="rsync -azH --delete /var/www/html/192.168.1.1::wwwroot"

$INOTIFY_CMD | while read DIRECTORY EVENT FILE

do

$RSYNC_CMD

done

赋予执行权限

chmod +x inotify_rsync.sh

写入文件(开机自启)

vim /etc/rc.local

/root/inotify_rsync.sh

相关推荐
ROCKY_8173 小时前
计算机网络考试考点——应用层
服务器·网络·计算机网络
('-')3 小时前
《从根上理解MySQL是怎样运行的》第十章学习笔记
笔记·学习·mysql
e***74953 小时前
Modbus报文详解
服务器·开发语言·php
hd51cc3 小时前
MFC学习笔记 对话框
笔记·学习·mfc
java_logo3 小时前
MySQL Server Docker 容器化部署指南
linux·运维·数据库·docker·容器
运维管理3 小时前
anolis openeuler 文件复制上用命令-学习篇
服务器
I***t7163 小时前
自己编译RustDesk,并将自建ID服务器和key信息写入客户端
运维·服务器
誰能久伴不乏3 小时前
Linux文件套接字AF_UNIX
linux·服务器·c语言·c++·unix
Radan小哥3 小时前
Docker学习笔记—day0010
笔记·学习·docker
im_AMBER3 小时前
Canvas架构手记 05 鼠标事件监听 | 原生事件封装 | ctx 结构化对象
前端·笔记·学习·架构