当前位置: 首页 > news >正文

系统运维Day02_数据同步服务

1. 数据同步服务基本介绍

        在Ubuntu20.04中,数据同步服务Rsync是一个开源的多功能的用于在本地和远程系统之间高效同步和备份文件的工具,通过只传输变化的数据来节省带宽和时间。

主要特点

  • 支持增量同步:只传输发生变化的数据部分。
  • 支持 SSH 加密传输。
  • 可保持文件权限、时间戳、连接和等元数据。

核心原理:

        Rsync的基本原理是通过使用 “差异算法” 来仅同步源文件和目标文件之间的差异部分,而不是重新传输整个文件

这一过程的核心是:
1:分块比较:Rsync将文件分为多个小块(通常是固定大小的块),然后对比源文件和目标文件中每个块的内容
2:校验和计算:对于每个块,Rsync计算出一个校验和(checksum),然后将源文件和目标文件的校验和进行比较,判断哪些块发生了变化
3:传输差异部分:如果某块在源文件和目标文件中不同,则只传输这一部分的差异数据,而不是整个文件
4:优化:Rsync还支持压缩(通过-z选项)和增量传输,使得同步过程更加高效,尤其在带宽有限的情况下

通过这种机制,Rsync大大减少了传输的数据量,从而提高了文件同步的效率,特别是在大文件和大规模目录结构中

数据同步任务背景:

  • 数据同步的重要性:
  • 确保多台服务器之间数据一致性。
  • 实现快速备份与恢复。
  • 提升运维效率,减少人为干预。
  • 常见应用场景:
  • 网站内容同步。
  • 配置文件备份。
  • 数据迁移与灾备。

同步方式:定时同步实时同步

2. 安装数据同步服务

apt apt install rsync -y

注意: 需要数据同步双方均安装rsync,同时配置了SSH密钥(否则需要输入密码)

rsync --version

3. RSYNC基本语法

rsync [选项] 源路径... 目标路径

常用选项

  • -v:详细模式输出,显示传输过程中的文件信息。
  • -a:归档模式,表示递归传输文件,并保持所有文件属性。
  • -z:对备份的文件在传输时进行压缩处理。
  • -P:显示进度条。
  • --delete:删除目标目录中源目录中没有的文件(可选,用于实现双向同步)
  • -e :用于指定用于传输文件的远程 shell 程序  默认为 ssh,也可以选择其他如rsh或者自定义的ssh端口

常见用户示例:

本地同步:
        rsync -av /src/directory/ /dest/directory/

远程同步:
        rsync -avz /src/directory/ root@192.168.132.101:/dest/directory/

拉取远程数据到本地:
        rsync -avz user@192.168.132.101:/src/directory/ /dest/directory/

案例说明:

  • 本地同步操作:

准备工作
1- 在master节点的 /usr/local目录下,创建一个nginx-1.8.0目录,并在此目录下构建一个html目录
2- 在html目录下,创建index.html、favicon.ico、logo.png文件,以及assets目录
3- 在assets目录下,创建index.js、index.css文件
4- 给各个文件随机写入一些内容

cd /usr/local
mkdir -p ./nginx-1.8.0/htmlcd /usr/local/nginx-1.8.0/html
touch ./index.html ./favicon.ico ./logo.png
mkdir ./assetscd ./assets
touch index.js index.csscd /usr/local/nginx-1.8.0/html
echo "11111 index.html" >> ./index.html
echo "22222 favicon.ico" >> ./favicon.ico
echo "33333 logo.png" >> ./logo.pngcd /usr/local/nginx-1.8.0/html/assets
echo "44444 index.js" >> ./index.js
echo "55555 index.css" >> ./index.css
# 校验:
tree /usr/local/nginx-1.8.0/nginx-1.8.0/
└── html├── assets│   ├── index.css│   └── index.js├── favicon.ico├── index.html└── logo.png
注意: 如果提示 tree命令 不存在, 需要进行下载 (comment not find 命令找不到)
执行:dnf -y install tree

需求:对html目录进行同步操作。 将其同步到 /usr/local/nginx-1.8.0/backup/ 下,并且如果源目录下已经删除的,在目标目录下也应该被删除

分析:
数据源是什么:/usr/local/nginx-1.8.0/html
目的地是什么:/usr/local/nginx-1.8.0/backup/

发现, 目标路径是不存在的, 所以先在master创建目标路径
mkdir -p /usr/local/nginx-1.8.0/backup/
rsync -av --delete /usr/local/nginx-1.8.0/html /usr/local/nginx-1.8.0/backup/

# 校验:
tree /usr/local/nginx-1.8.0/backup/
结果:
backup/├── assets│   ├── index.css│   └── index.js├── favicon.ico├── index.html└── logo.png

说明: 部分在演示的时候, 发现没有html目录 直接就是html目录里面的内容
可能看到的是这个结果
backup/
├── assets
│   ├── index.css
│   └── index.js
├── favicon.ico
├── index.html
└── logo.png

问题:什么原因导致的呢?

答:其实是因为在写数据源路径的时候, 目录最后面带了一个 / 导致, 一旦携带了斜杠, 相当于同步是该目录下的所有内容, 并不是该目录

  • 远程同步操作:

需求:对/usr/local/nginx-1.8.0/html目录进行操作,将其同步到node1的家目录的backup的目录中
注意: 需要双方均安装rsync,同时配置了SSH密钥(否则需要输入密码)
分析:
数据源是什么:本地  /usr/local/nginx-1.8.0/html
目的地是什么:远端  root@192.168132.101:~/backup/

目标路径是否存在呢? 需要创建

# 方式一: 直接在node1执行
mkdir -p ~/backup
ll ~# 方式二: 在master通过远程执行命令的方式
ssh root@192.168.132.101 "mkdir -p ~/backup; ls -l ~"编写同步代码:
rsync -avz /usr/local/nginx-1.8.0/html root@192.168.132.101:~/backup/
校验:master执行
ssh root@192.168.132.101 "tree ~/backup"
结果为:
/root/backup
└── html
├── assets
│   ├── index.css
│   └── index.js
├── favicon.ico
├── index.html
└── logo.png

4. 【综合案例】实现定时与增量备份

需求说明:

        在ubuntu20.04的 /var/log 目录下, 存储了大量的关于系统的日志:如messages文件存储大量的系统日志信息,secure日志文件存储了大量的与系统安全的日志。请对此目录中的messages、secure日志文件进行定时的备份到master节点的/export/data/master_backup_system_log目录中, 要求每日凌晨2点进行备份一次。

数据同步
数据源:master本地
/var/log/messages
/var/log/secure
目的地:远端 node1
root@192.168.132.101:/export/data/master_backup_system_log

确认目的地路径是否存在:没有就创建
在master远程执行命令
ssh root@192.168.132.101 "mkdir -p /export/data/master_backup_system_log;tree /export"

同步命令:

rsync -avz /var/log/syslog root@192.168.132.101:/export/data/master_backup_system_log

定时操作:
技术点: crontab

回顾: crontab 基本使用格式
格式: crontab [选项]
选项:
-l  查看当前有哪些定时的任务
-e  打开定时任务编辑窗口, 设置定时任务
如何编写定时任务:
分 时 日 月 周 执行的命令(命令建议是绝对路径)

取值范围:
分: 0~59
时: 0~23
日: 1~31
月: 1~12
周: 0~7  其中0 和 7 表示周日
相关符号:
*: 任意
/:  每搁多少时间
-:  一段连接的周期
,:   表示某个时间内的多个值

如何获取命令的绝对路径: which 命令

执行定时操作:

在master执行,编写定时任务:要求每日凌晨2点进行备份一次
方式一:

cat > /tmp/mycron.bak << "EOF"
0 2 * * * /usr/bin/rsync -avz /var/log/messages /var/log/secure root@192.168.132.101:/export/data/master_backup_system_log

EOF

crontab /tmp/mycron.bak

方式二:

crontab -e
输入 i 进入插入模式, 填写以下内容
0 2 * * * /usr/bin/rsync -avz /var/log/messages /var/log/secure root@192.168.132.101:/export/data/master_backup_system_log

输入完成后, 按下 ecs键, 输入:x 保存退出

Ubuntu 20.04 实现实时同步(inotify + rsync)

1. 需求说明

  • 主节点(master):日志源目录 /export/data/logs

  • 副节点(node1):备份目录 /export/data/master_exe_backup_log

  • 要求:主节点日志实时同步到副节点

2. 数据准备

在master上:

sudo mkdir -p /export/data/logs

node1 上:

sudo mkdir -p /export/data/master_exe_backup_log

3. 手动同步测试

master 节点执行:

rsync -avz --delete /export/data/logs/ root@192.168.132.101:/export/data/master_exe_backup_log

注意:请确认 node1 的 IP 是 192.168.132.101,且可通过 SSH 登录。

如果同步正常,则说明基础环境没问题。

4. 实时同步方案思路

rsync 本身只是同步工具,不具备实时触发功能。
要实现实时同步,需要借助 Linux 的 inotify 机制(文件系统事件监控)。

Ubuntu 中对应的软件包是 inotify-tools

5. 安装 Inotify 工具

master 上执行:

sudo apt update 
sudo apt install -y inotify-tools rsync

inotify-tools 提供命令:

  • inotifywait(实时监控文件变化)

  • inotifywatch(统计文件变化)

6. inotify 基本用法复习

inotifywait -m -r -e create,modify,delete,move /export/data/logs

  • -m:持续监听

  • -r:递归子目录

  • -e:指定事件类型

通过新开一个会话,mkdir /export/data/logs/test 可以看到 /export/data/logs/ CREATE,ISDIR test

7. 实时同步脚本(SSH 模式)

在 master 上创建脚本:

sudo vim /root/real_time_sync.sh

内容如下:

#!/bin/bash
# Ubuntu 20.04 实时同步脚本 (master -> node1)SOURCE_DIR="/export/data/logs"
TARGET_DIR="root@192.168.132.101:/export/data/master_exe_backup_log"
LOG_FILE="/var/log/rsync_realtime_sync.log"inotifywait -m -r -e modify,create,delete,move "${SOURCE_DIR}" | while read path action file; doecho "$(date '+%F %T') - Detected ${action} on ${file} in ${path}, triggering rsync..." >> "$LOG_FILE"rsync -avz --delete -e ssh "${SOURCE_DIR}/" "${TARGET_DIR}" >> "$LOG_FILE" 2>&1echo "$(date '+%F %T') - Sync completed for ${file} in ${path}." >> "$LOG_FILE"
done

授权执行:

sudo chmod +x /root/real_time_sync.sh

8. 测试实时同步

在 master 启动脚本:

sudo /root/real_time_sync.sh

打开另一终端,在 master 上创建文件:

echo "test log" > /export/data/logs/test.log

观察 node1 的 /export/data/master_exe_backup_log/ 是否实时出现文件。

成功后可使用:

nohup /root/real_time_sync.sh &

后台运行脚本。

9. 设置开机自启(systemd 方式)

创建 systemd 服务:

sudo vim /etc/systemd/system/rsync_inotify.service

内容:

[Unit]
Description=Real-time Rsync Sync with Inotify (master -> node1)
After=network.target[Service]
ExecStart=/root/real_time_sync.sh
Restart=always
User=root
Group=root[Install]
WantedBy=multi-user.target

启动与启用:

sudo systemctl daemon-reload
sudo systemctl enable rsync_inotify
sudo systemctl start rsync_inotify
sudo systemctl status rsync_inotify

10. 改进方案:基于 Rsync 服务端(daemon 模式)

node1 配置 rsync 守护进程

安装 rsync:

sudo apt install -y rsync

编辑配置文件:

sudo vim /etc/rsyncd.conf

内容:

uid = rsync
gid = rsync
use chroot = no
port = 873
max connections = 200
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
transfer logging = yes
ignore nonreadable = yes[master_logs]path = /export/data/master_exe_backup_logcomment = Backup Directoryread only = nosecrets file = /etc/rsyncd.passwdhosts allow = 192.168.88.0/24hosts deny = *auth users = backup_user

创建用户与密码文件:

sudo useradd -m -s /usr/sbin/nologin rsync
sudo useradd -m -s /usr/sbin/nologin backup_user
echo "backup_user:123456" | sudo tee /etc/rsyncd.passwd
sudo chmod 600 /etc/rsyncd.passwd

权限调整:

sudo chown -R rsync:rsync /export/data/master_exe_backup_log

启动 rsync 服务:

sudo rsync --daemon

开机自启:

sudo vim /etc/systemd/system/rsyncd.service
[Unit]
Description=Rsync Daemon
After=network.target[Service]
ExecStart=/usr/bin/rsync --daemon --config=/etc/rsyncd.conf --no-detach
ExecReload=/bin/kill -HUP $MAINPID
Restart=always[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable rsyncd
sudo systemctl start rsyncd
sudo systemctl status rsyncd

11. master 端使用 RSYNC 服务实时同步脚本

sudo vi /root/real_time_sync.sh
#!/bin/bash
SOURCE_DIR="/export/data/logs"
TARGET_DIR="backup_user@192.168.88.102::master_logs"
LOG_FILE="/var/log/rsync_realtime_sync.log"inotifywait -m -r -e modify,create,delete,move "${SOURCE_DIR}" | while read path action file; doecho "$(date '+%F %T') - Detected ${action} on ${file} in ${path}" >> "$LOG_FILE"rsync -avz --port=873 --delete --password-file=/etc/rsync.password "${SOURCE_DIR}/" "${TARGET_DIR}" >> "$LOG_FILE" 2>&1
done

密码文件配置:

echo "123456" | sudo tee /etc/rsync.password
sudo chmod 600 /etc/rsync.password

12. 验证

  • master 上新建或删除文件:
    /export/data/logs/xxx.log

  • node1 对应目录:
    /export/data/master_exe_backup_log
    会自动同步。

13. 清空环境(还原)

master 清理:

sudo systemctl stop rsync_inotify
sudo systemctl disable rsync_inotify
sudo rm -f /etc/systemd/system/rsync_inotify.service
sudo systemctl daemon-reloadsudo rm -f /root/real_time_sync.sh
sudo rm -rf /export/data/*
sudo apt purge -y rsync inotify-tools
sudo apt autoremove -y
sudo rm -f /etc/rsync.password
sudo crontab -r

node1 清理:

sudo systemctl stop rsyncd
sudo systemctl disable rsyncd
sudo rm -f /etc/systemd/system/rsyncd.service
sudo systemctl daemon-reloadsudo rm -rf /export/data/*
sudo apt purge -y rsync
sudo apt autoremove -y
sudo rm -f /etc/rsyncd.conf /etc/rsyncd.passwd
sudo userdel -rf rsync
sudo userdel -rf backup_user

http://www.dtcms.com/a/582848.html

相关文章:

  • 与设计行业相关的网站四川省住房与城乡建设厅网站
  • 深圳市设计网站缪斯设计网站
  • 现在还有做系统的网站吗wordpress摄影主题 lens
  • OLEDB连接对象介绍(一)
  • 【申论】申论基础知识
  • 商务网站建设调研host wordpress
  • 一款AB实验分析智能体是如何诞生的
  • 你的MES系统,是在“记录过去”还是在“指挥未来”?
  • FPGA教程系列-Vivado中串行FIR设计(非FIR核)
  • I2C接口(2):IIC多主设备仲裁机制详解--从原理到Verilog实现
  • 技术网站推广范例怎么建立自己公司的网站
  • 网站的设计公司网咖活动营销方案
  • 北京市朝阳区网站开发公司中国建设监理网站
  • 多语言网站是怎么做的交互设计网站有哪些
  • iis部署网站浏览报404建设网站公司塞尼铁克
  • 使用 PyTorch来构建线性回归的实现
  • 营销型网站设计公司企业网站模板下载服务哪家好
  • 对接物联网使用netty通信与MQTT之间的区别
  • 重塑城市公共安全管理的“智慧之眼”
  • 临海建设局官方网站plc编程入门基础知识
  • 有教做衣服的网站吗免费签名logo设计
  • 2.2.STM32-新建工程
  • 怎么做提卡密网站开发高端市场应该注意
  • 无锡网知名网站教做香肠的网站
  • 做酒招代理的网站江门网红打卡景点蓬江区
  • 双牌网站建设购物网站建设市场调查论文
  • 对象住哪里?——深入剖析 JVM 内存结构与对象分配机制
  • 站长工具高清有吗网推获客平台
  • 网站做流量的论坛贴吧广东广东网站建设工作
  • 中国机械加工网下载番禺seo