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

数据同步rsync

时间:2024-11-22 21:12:47浏览次数:1  
标签: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/18563746

相关文章

  • 最新版本的mmdetection2.0 (v2.0.0版本)环境搭建、训练自己的数据集、测试以及常见错误
    文章目录1mmdetection环境搭建1.1搭建虚拟环境1.2安装必要的库包1.3下载mmdetection1.4安装mmdetection依赖和编译mmdetection1.4.1安装mmdetection依赖1.4.2安装cocoapi1.4.3编译mmdetection环境2准备自己的数据集2.1数据标注2.2数据划分与存放2.2.1VOC20......
  • 计算机毕业设计推荐】基于SpringBoot+Vue的甜品店管理系统的设计与实现 【附源码+数据
    ✍✍计算机编程指导师⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java实战|SpringBoot/SSMPython实战项目|Django微信小程......
  • 缓存与主副本数据一致性系统设计方案(下篇)
    声明:为力求内容的准确性,为大家提供更优质的技术内容。如果您发现文章内容中任何不准确或遗漏的部分。非常希望您能评论指正,我将尽快修正疏漏。在上篇中我们整理分析了Cache-Aside模式中数据读取与变更的实现方式。提及数据变更场景下存在更新主副本数据后删除缓存和更新主......
  • SSM仓库员工管理系统88qro--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景与意义随着物流行业的快速发展,仓库作为物流链条中的重要环节,其管理效率直接影响到整个物流体系的运作。仓库员工作为仓库运营的核心力......
  • SSM殡仪馆管理系统s5n80(程序+源码+数据库+调试部署+开发环境)
    题目:殡仪馆管理系统进度安排:(1)2024年11月1日-2024年11月15日 确定选题,下达任务书,撰写开题报告;(2)2024年11月15日-2024年12月20日提交开题报告定稿;(3)2024年12月21日-2025年3月14日 完成选题的设计、论文大纲的撰写;(4)2025年3月15日-2025年3月21日  毕业(设计)论文中期检查......
  • SSM本地美食推荐平台evbxz(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景与意义在当今快节奏的生活中,人们对美食的需求日益增加,但往往难以找到真正符合口味和需求的餐厅。本地美食推荐平台的出现,旨在解决这一......
  • SSM安康学院新型冠状病毒肺炎疫情专题网53wrh--(程序+源码+数据库+调试部署+开发环境)
    题目:SSM安康学院新型冠状病毒肺炎疫情专题网53wrh进度安排:(1)2024年11月1日-2024年11月15日 确定选题,下达任务书,撰写开题报告;(2)2024年11月15日-2024年12月20日提交开题报告定稿;(3)2024年12月21日-2025年3月14日 完成选题的设计、论文大纲的撰写;(4)2025年3月15日-2025年3月2......
  • 基于PSO-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
    1.算法运行效果图预览(完整程序运行后无水印) pso优化SVM过程:  识别率对比:      2.算法运行软件版本matlab2022a 3.部分核心程序(完整版代码包含详细中文注释和操作步骤视频)x=rand(Num,D)/50;v=rand(Num,D)/50;%先计算各个粒子的适应度,并初......
  • golang两种数据库连接池实现
    Golang的连接池实现在标准库database/sql/sql.go下。当我们运行:db,err:=sql.Open("mysql","xxxx")的时候,就会打开一个连接池。我们可以看看返回的db的结构体:typeDBstruct{ waitDurationint64//Totaltimewaitedfornewconnections. musync.Mutex//......
  • 如何对Mysql数据库进行优化
    目录引言优化的时机优化策略1.索引优化2.查询优化3.架构优化4.事务和锁机制优化5.配置优化6.硬件优化7.性能监控与调优工具案例分析案例1:简化查询逻辑案例2:使用索引结语引言在现代应用中,数据库的性能至关重要。MySQL作为流行的开源关系型数据库管理......