首页 > 其他分享 >数据同步rsync

数据同步rsync

时间:2024-11-06 18:57:04浏览次数:2  
标签:rsync 同步 backup -- 数据 00 sh root

数据同步rsync

Rsync本地模式和远程模式

1.安装

yum install -y rsync

2.命令语法

  • 本地模式
rsync 参数 src  dest

1.对文件同步
[root@backup yum.repos.d]# rsync -avzP /var/log/messages /tmp/
sending incremental file list
messages
      3,311,285 100%   84.50MB/s    0:00:00 (xfr#1, to-chk=0/1)

sent 343,213 bytes  received 35 bytes  686,496.00 bytes/sec
total size is 3,311,285  speedup is 9.65


2.对目录同步
拷贝整个目录
[root@backup yum.repos.d]# rsync -avzP /opt/sh /tmp/
sending incremental file list
sh/
sh/1.sh
              1 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=4/6)
sh/backup.sh
            628 100%  613.28kB/s    0:00:00 (xfr#2, to-chk=3/6)
sh/cp.sh
            624 100%  609.38kB/s    0:00:00 (xfr#3, to-chk=2/6)
sh/ping.sh
            347 100%  338.87kB/s    0:00:00 (xfr#4, to-chk=1/6)
sh/tips.sh
            472 100%  460.94kB/s    0:00:00 (xfr#5, to-chk=0/6)

sent 1,795 bytes  received 115 bytes  3,820.00 bytes/sec
total size is 2,072  speedup is 1.08
[root@backup yum.repos.d]# ls /tmp/
messages  sh


拷贝目录下文件
[root@backup yum.repos.d]# rsync -avzP /opt/sh/  /tmp/
sending incremental file list
./
1.sh
              1 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=4/6)
backup.sh
            628 100%  613.28kB/s    0:00:00 (xfr#2, to-chk=3/6)
cp.sh
            624 100%  609.38kB/s    0:00:00 (xfr#3, to-chk=2/6)
ping.sh
            347 100%  338.87kB/s    0:00:00 (xfr#4, to-chk=1/6)
tips.sh
            472 100%  460.94kB/s    0:00:00 (xfr#5, to-chk=0/6)

sent 1,780 bytes  received 114 bytes  3,788.00 bytes/sec
total size is 2,072  speedup is 1.09
[root@backup yum.repos.d]# ls /tmp/
1.sh  backup.sh  cp.sh  messages  ping.sh  sh  tips.sh


  • 远程模式
rsync 参数 src user@ip:dest
#推送模式
[root@backup ~]# ls /root/
1.txt  Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
[root@backup ~]# rsync -avzP /root/ root@web01:/tmp/
[root@web01 ~]# ls /tmp/
1.txt  Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos

#拉取模式
[root@web01 ~]# ls /tmp/
[root@web01 ~]# 
[root@backup ~]# rsync -az  --delete  root@web01:/tmp/ /tmp/
[root@backup ~]# ls /tmp/
[root@backup ~]# 


-a 保持文件原有属性
-z 对传输数据压缩
-P 显示文件传输进度
-v 显示传输细节情况  
--bwlimit  传输时限速
--delete 无差异化拷贝,保证目标和源目录一致,将目标中和源目录中不一样的s

rsync服务端

为什么需要服务模式

Rsync借助ssh协议同步数据存在的缺陷

1.使用系统用户(不安全)

2.使用普通用户(权限不足)

3.守护进程传输方式(不使用系统用户,更安全)


简化配置:通过守护进程模式,可以更容易地设置和管理多个用户和模块,适合需要定期备份或同步的场景。

性能优化:rsync通过增量传输的方式,只同步变化的数据,能够有效减少带宽使用和传输时间。

灵活的访问控制:可以在配置文件中设置不同模块的访问权限,允许或限制特定用户对特定数据的访问。

易于使用:客户端可以直接连接到rsync服务端,不需要每次都输入SSH凭证,适合自动化任务或脚本。

支持多种传输方式:可以配置使用TCP/IP进行传输,而不是依赖于SSH,适合一些特定的网络环境。

适合大规模部署:在大型网络或企业环境中,rsync服务端能够集中管理数据同步,方便多台机器的备份和更新。

rsync服务端部署

1.安装rsync
yum install -y rsync 
2.修改配置文件
cat > /etc/rsyncd.conf <<EOF
uid = www      
gid = www
port = 873  #监听端口
fake super = yes  #无需让rsync以root身份运行,允许接受文件的完整属性
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
-----
[backup] #定义模块信息
comment = 123 #定义注释信息
path = /backup #定义接受备份数据目录

3.创建用户
useradd -u 1100 -M -s /sbin/nologin www -M 没有家目录

4.创建backup文件夹
mkdir /backup
chown -R www:www /backup

5.创建rsync专用账户密码
echo rsync_backup:111> /etc/rsync.passwd
chmod 600 /etc/rsync.passwd

6.用systemctl管理rsync服务
创建一个配置文件

[root@localhost conf]# vi /etc/sysconfig/rsyncd
OPTIONS=""
这个文件用于设置环境变量。OPTIONS 变量可以用来定义启动 rsync 守护进程时的额外参数。这里初始为空,意味着没有额外参数。
创建service文件

[root@localhost conf]# vi /lib/systemd/system/rsyncd.service
[Unit]
Description=fast remote file copy program daemon
ConditionPathExists=/etc/rsyncd.conf

[Service]
EnvironmentFile=/etc/sysconfig/rsyncd
ExecStart=/usr/bin/rsync --daemon --no-detach "$OPTIONS"

[Install]
WantedBy=multi-user.target

[Unit]
Description: 这行描述了服务的作用,这里是“快速远程文件复制程序守护进程”。
ConditionPathExists: 这个条件检查 /etc/rsyncd.conf 文件是否存在,如果不存在,服务不会启动。
[Service]
EnvironmentFile: 指定一个环境文件,这里是 /etc/sysconfig/rsyncd,会加载里面定义的环境变量。
ExecStart: 定义了服务启动时执行的命令。这里是调用 rsync 以守护进程模式运行,并且使用 --no-detach 选项保持在前台运行。"$OPTIONS" 是从环境文件中读取的选项。
[Install]
WantedBy: 指定该服务应该在什么目标下启动,这里是 multi-user.target,意味着在多用户模式下启动。








脚本部署
#!/bin/bash
# 环境检查
echo "开始进行初始环境检查..."

# 检查rsync是否安装
if ! command -v rsync &>/dev/null; then
    echo "rsync未安装,正在安装..."
    # 在CentOS系统上安装rsync
    yum install -y rsync
else
    echo "rsync已安装"
fi

# 检查防火墙是否开启
if systemctl is-active --quiet firewalld; then
    echo "防火墙已开启,正在配置开放端口..."
    # 配置防火墙开放rsync端口(873)
    firewall-cmd --permanent --add-port=873/tcp
    firewall-cmd --reload
else
    echo "防火墙未开启或未使用firewalld,跳过防火墙配置"
fi

# 检查SELinux是否关闭
selinux_status=$(sestatus | grep "SELinux status" | awk '{print $3}')
if [ "$selinux_status" != "disabled" ]; then
    echo "SELinux未关闭,正在禁用SELinux..."
    # 临时关闭SELinux(重启后需要再次禁用)
    setenforce 0
    # 永久禁用
    sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
else
    echo "SELinux已关闭"
fi

# 生成rsync服务端配置文件
echo "生成rsyncd.conf配置文件..."
cat > /etc/rsyncd.conf <<EOF
uid = www
gid = www
port = 873  
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  
-----

[backup]  
comment = 123  
path = /backup  
EOF

# 创建rsync服务专用用户
echo "创建rsync服务专用用户..."
useradd -u 1100 -M -s /sbin/nologin www

# 创建备份目录并设置权限
echo "创建/backup目录并设置权限..."
mkdir -p /backup
chown -R www:www /backup

# 创建rsync密码文件
echo "创建rsync服务密码文件..."
echo "rsync_backup:111" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd

# 配置日志目录
mkdir -p /var/log
touch /var/log/rsyncd.log
chown www:www /var/log/rsyncd.log

# 启用并启动rsync服务
echo "启用并启动rsync服务..."
# CentOS通常使用`rsyncd`作为服务名
systemctl enable rsyncd
systemctl start rsyncd

# 打印服务状态
echo "rsync服务状态:"
systemctl status rsyncd

echo "rsync服务部署完成!"

rsync客户端

安装rsync
yum install -y rsync
推送模式
[root@web01 yum.repos.d]# rsync -avzP /root/ [email protected]::backup
Password: 这里需要输入密码
sending incremental file list
./
非交互式密码的两种操作
1.生成密码文件
[root@web01 yum.repos.d]# echo 111 > /etc/rsync.pwd
[root@web01 yum.repos.d]# chmod 600 /etc/rsync.pwd

[root@web01 yum.repos.d]# rsync -avzP --password-file=/etc/rsync.pwd /root/ [email protected]::backup
sending incremental file list
./
1.txt
         81,659 100%   46.63MB/s    0:00:00 (xfr#1, to-chk=19/30)
anaconda-ks.cfg
          1,190 100%    1.13MB/s    0:00:00 (xfr#2, to-chk=18/30)
initial-setup-ks.cfg
          1,574 100%    1.50MB/s    0:00:00 (xfr#3, to-chk=17/30)
logs_20241031103922_backupd_storaged_1730342418.tar
     58,852,864 100%   40.67MB/s    0:00:01 (xfr#4, to-chk=16/30)

sent 39,137,738 bytes  received 112 bytes  26,091,900.00 bytes/sec
total size is 60,255,520  speedup is 1.54

2.环境变量
export RSYNC_PASSWORD='111'
[root@web01 yum.repos.d]# export RSYNC_PASSWORD='111'
[root@web01 yum.repos.d]#  rsync -avzP /root/ [email protected]::backup
sending incremental file list
./
1.txt
         81,659 100%   46.63MB/s    0:00:00 (xfr#1, to-chk=19/30)
anaconda-ks.cfg
          1,190 100%    1.13MB/s    0:00:00 (xfr#2, to-chk=18/30)
initial-setup-ks.cfg
          1,574 100%  768.55kB/s    0:00:00 (xfr#3, to-chk=17/30)
logs_20241031103922_backupd_storaged_1730342418.tar
     58,852,864 100%   39.53MB/s    0:00:01 (xfr#4, to-chk=16/30)

sent 39,137,738 bytes  received 112 bytes  15,655,140.00 bytes/sec
total size is 60,255,520  speedup is 1.54


下载模式
[root@web01 yum.repos.d]# rsync -avzP [email protected]::backup /tmp/
skipping directory .

sent 8 bytes  received 38 bytes  92.00 bytes/sec
total size is 0  speedup is 0.00
[root@web01 yum.repos.d]# ls /tmp
1.txt  anaconda-ks.cfg  initial-setup-ks.cfg  logs_20241031103922_backupd_storaged_1730342418.tar

inotify-tools +rsync

1.配置epel源
2.安装inotify-tools
[root@backup ~]# yum install -y inotify-tools
[root@backup ~]# ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r--. 1 root root 0 Nov  2 09:02 max_queued_events
-rw-r--r--. 1 root root 0 Nov  2 09:02 max_user_instances
-rw-r--r--. 1 root root 0 Nov  2 09:02 max_user_watches
能看到三个文件就代表内核支持inotify机制
3.如何使用
inotifywait 是一个常用的命令行工具,可以用于监视文件和目录的变化。
-m 或 --monitor: 持续监视指定的文件或目录,直到手动停止。
-e 或 --event: 指定要监视的事件类型,可以指定多个事件。常见的事件包括:
access (IN_ACCESS)
modify (IN_MODIFY)
attrib (IN_ATTRIB)
close_write (IN_CLOSE_WRITE)
close_nowrite (IN_CLOSE_NOWRITE)
open (IN_OPEN)
moved_to (IN_MOVED_TO)
moved_from (IN_MOVED_FROM)
create (IN_CREATE)
delete (IN_DELETE)
delete_self (IN_DELETE_SELF)
move_self (IN_MOVE_SELF)
unmount (IN_UNMOUNT)
-r 或 --recursive: 递归监视指定目录中的所有子目录。
-q 或 --quiet: 仅显示事件,不输出额外的提示信息。
--format: 自定义输出格式。例如,可以指定只输出文件名或事件类型


[root@backup ~]# inotifywait -mqr --timefmt '%T' --format "%T %w %f: %e" /backup
09:13:26 /backup/ 1: DELETE
09:13:26 /backup/ 1.txt: DELETE
09:13:26 /backup/ anaconda-ks.cfg: DELETE
09:13:26 /backup/ initial-setup-ks.cfg: DELETE
09:13:26 /backup/ logs_20241031103922_backupd_storaged_1730342418.tar: DELETE
--timefmt '%T': 设置时间格式,用于输出事件发生的时间。
--format "%T %w %f: %e": 自定义输出格式。具体来说:
%T:事件发生的时间(根据 --timefmt 设置)。
%w:监视的目录路径。
%f:发生变化的文件名。
%e:事件类型(如创建、修改、删除等)。
/backup: 指定要监视的目录路径。

lsyncd

一般lsyncd部署在rsync客户端
关闭selinxu

1.安装lsyncd
[root@backup ~]# yum install -y lsyncd
2.修改配置文件
(只监测一个目录)
settings {
    logfile = "/var/log/lsyncd.log",
    statusFile = "/var/run/lsyncd.status",
    inotifyMode = "CloseWrite",
    maxProcesses = 8
}

sync {
    default.rsync,
    source = "/tmp",
    target = "rsync_backup@backup:backup", 
    delete = true,
    exclude = {".*"},
    delay = 1,
    rsync = {
        binary = "usr/bin/rsync",   
        archive = true,
        compress = true,
        verbose = true,
        password_file = "/etc/rsync.pwd",
        _extra = {"--bwlimit=200"}
    }
}

logfile: 指定 lsyncd 的日志文件路径,所有日志信息将记录在此文件中。
statusFile: 指定状态文件的路径,用于存储 lsyncd 的运行状态信息。
inotifyMode: 设置 inotify 的模式为 CloseWrite,这意味着只有在文件关闭后写入时才触发事件。这可以减少频繁写入时的不必要触发。
MaxProcesses: 设置允许的最大并发进程数。这里设为 8,意味着可以同时处理最多 8 个文件同步进程。

default.rsync: 指定使用 rsync 作为同步方式。
source: 定义要监视和同步的源目录路径。
target: 定义目标路径,通常是一个远程服务器的目录,使用 SSH 进行连接。
delete: 设置为 true,表示在目标中删除源目录中不存在的文件,以保持同步的一致性。
exclude: 这是一个排除模式,定义要排除的文件或目录。在这里,".*" 表示排除所有以点开头的文件(通常是隐藏文件)。
delay: 设置在检测到文件变化后,实际执行同步的延迟时间(以秒为单位)。这里设为 1 秒,意味着在事件发生后的 1 秒内不会进行同步。

binary: 指定 rsync 的可执行文件路径。在这里的路径应为 /usr/bin/rsync(请注意可能缺少前导 /)。
archive: 设置为 true,表示使用归档模式,这会保持文件的权限、时间戳等属性。
compress: 设置为 true,在同步过程中压缩数据以节省带宽。
verbose: 设置为 true,表示输出详细的同步过程信息。
password_file: 指定一个文件路径,该文件包含用于 SSH 连接的 rsync 密码。确保该文件的权限设置为安全,以防止未授权访问。
_extra: 传递给 rsync 的额外参数,这里使用 --delete 来确保目标中不在源中的文件被删除。

标签:rsync,同步,backup,--,数据,00,sh,root
From: https://www.cnblogs.com/cloudwangsa/p/18530858

相关文章

  • SpringBoot小小主持人网站7q3we(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景随着社会对儿童综合素质培养的重视,特别是在语言表达和公众演讲能力方面,小小主持人课程受到越来越多家长和孩子的青睐。为满足这一市场......
  • SpringBoot小区物业管理系统3248a--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景与意义随着城市化进程的加速,小区物业管理面临着越来越复杂和多元的挑战。传统的人工管理方式不仅效率低下,还难以满足业主日益增长的多......
  • SpringBoot线上评分分享平台s7103(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景随着互联网技术的飞速发展,线上消费和在线评价已成为人们日常生活的重要组成部分。然而,现有的线上评分系统往往局限于特定领域,无法满足......
  • SpringBoot响应式博客的设计与实现5g6a7(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、课题背景随着互联网技术的不断进步,博客作为个人表达、知识分享的重要平台,其用户体验和访问便捷性受到越来越多的关注。随着移动设备的普及,用户......
  • 如何使用YOLOv5来训练——建筑工地安全图像数据集,并附上详细的训练代码和步骤。这个数
    如何使用YOLOv5来训练——建筑工地安全图像数据集,并附上详细的训练代码和步骤。这个数据集包含10个类别,标注为YOLO格式。安全帽面罩安全锥等数据集进行检测建筑工地安全行为图像数据集yolo格式0:“安全帽”,1:“面罩”,2:“无安全帽”、3:“无面罩”、4:“无安全背心”、5:“......
  • 如何使用深度学习框架(PyTorch)来训练——147913张图像的超大超详细垃圾分类数据集,并附
    超大超详细垃圾分类数据集(分类,分类),共4大类,345小类,147913张图,已全部分类标注完成,共12GB。厨余垃圾76小类35058张可回收物195类86116张其他垃圾53类16156张有害垃圾18小类10583张 如何使用深度学习框架(如PyTorch)来训练一个包含147913张图像的超大超详细垃圾分类......
  • 使用YOLOv5来训练——井盖状态检测数据集,并使用训练好的模型进行预测井盖状态检测数据
    井盖状态检测数据集yolo格式五种类别:broke(井盖破损),good(完好),circle(边圈破损),lose(井盖丢失),uncovered(井盖位移/未覆盖全)训练数据已划分,配置文件稍做路径改动即可训练。训练集:1217验证集:108 使用YOLOv5来训练一个包含1217张训练图像和108张验证图像的井盖状态检......
  • 数据结构树与二叉树
    语雀链接:https://www.yuque.com/g/wushi-ls7km/ga9rkw/qw8kwzxigbx61kxy/collaborator/join?token=2vdSjDBgJyJb0VSL&source=doc_collaborator#《树与二叉树》......
  • python球探数据分析
    Python球探数据分析入门指南作为一名刚入行的小白,你可能会对如何使用Python进行球探数据分析感到困惑。不用担心,这篇文章将为你提供一份详细的入门指南,帮助你逐步掌握这项技能。流程概览首先,让我们通过一个表格来了解整个数据分析的流程:步骤描述1获取数据2数据......
  • FPGA实现复杂状态机的跳转-判断标准数据帧
    填补之前的状态机跳转挖的坑;数据源对比标准帧:第一步:ROM当做数据源:使能开启,使用地址addr控制其输出。(使用状态机写入RAM时的控制选用addr)RAM作为标准帧的缓存,使用addr_ram作为RAM的写入地址。此时ROM的地址比RAM的地址延迟了一个节拍;(addr_ram<=addr;)第二步:RAM缓存写满之......