使用rsync构建镜像网站

news2025/1/12 13:37:44

实验环境

某公司在深圳、北京两地各放置了一台网站服务器,分别应对南北大区内不断增长的客户访问需求,两台服务器的网站文档必须保持一致,如图12.3所示,同步链路已通过VPN专用线路实现。

需求描述

> 服务器 A(北京)作为rsync发起端,目录/var/www/html作为原始位置。

> 服务器B(深圳)作为远程rsync 服务器,目录/var/www/html 作为目标位置。

> 结合 inotify机制实现触发式的上行同步,保持两个站点的网页文档一致。

推荐步骤

配置rsync服务器(深圳,服务器B)。

通过 inotify 机制实现实时同步(北京,服务器 A)。

12.1配置rsync源服务器

本章以CentOS7.3系统中的rsync-3.1.2-4.el7.x86_64为例。

[root@node01 ~]# rpm -q rsync

      在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客户机的 rsync同步操作的服务器称为同步源。在同步过程中,同步源负责提供文档的原始位置,发起端应对 该位置具有读取权限,如图12.1所示。

(1)建立/etc/rsyncd.conf 配置文件。

     配置文件rsyncd.conf位于/etc目录下。下面将以源目录/var/www/html、备份账号backuper为例,介绍其配置方法。

[root@node01 ~]# vim /etc/rsyncd.conf

use chroot = yes                 //禁锢在源目录
address = 192.168.184.101        //监听地址
port 873                         //监听端口
log file = /var/log/rsyncd.log   //日志文件位置
pid file = /var/run/rsyncd.pid   //存放进程ID的文件位置
hosts allow = 192.168.184.0/24   //允许访问的客户机地址

[wwwroot]                        //共享模块名称
    path = /var/www/html         //源目录实际路径
    comment = Document Root of www1.bdqn.com  //描述信息,可自定义
    read only = yes                           //是否为只读
    dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z  //同步时不再压缩的文件类型
    auth users = backuper                             //授权账户
    secrets file = /etc/rsyncd_users.db               //存放账户信息的数据文件

      基于安全性考虑,对于rsync的同步源最好仅允许以只读方式做同步,另外,同步可以采用匿名 的方式,只要将其中的“auth users”和‘secrets file”配置记录去掉就可以了。

(2)为备份账户创建数据文件。

        根据上一步的设置,创建账号数据文件,添加一行用户记录,以冒号分隔,用户名称为“backuper" 密码为“pwd123”。由于账号信息采用明文存放,因此应调整文件权限,避免账号信息泄露。

[root@node01 ~]# vim /etc/rsyncd_users.db

backuper:pwd123    //无须建立同名系统用户

[root@node01 ~]# chmod 600 /etc/rsyncd_users.db

      备份用户backuper需要对源目录/var/www/html有相应的读取权限,实际上只要other组有读取 权限,则备份用户backuper和运行用户nobody也就有读取权限了。

[root@node01 ~]# ls -ld /var/www/html/  //如没有这个目录需自行创建

(3)启动rsync服务程序,运行参数为“--daemon”。

      上述操作完成以后.执行“rsync--deemon”命令就可以启动rsync服务,以独立监听服务的方式运行。若要关闭rsync服务,可以采取kill进程的方式,如kill $(cat/var/run/rsyncd.pid)。

[root@node01 ~]# rsync --daemon
[root@node01 ~]# netstat -anpt | grep rsync

12.2 使用rsync备份工具

       有了同步源服务器之后,就可以使用rsync工具来执行远程同步了,本节介绍的备份操作均在客 户机(发起端)执行,如服务器B(图12.1),实际上,同步源与发起端可以是同一台主机(当然这 种情况不常见),其效果相当于本地备份而不是异地备份。

1.rsync命令的基本用法

       绝大多数的备份程序要求指定原始位置、目标位置,rsync命令也一样。最简单的rsync用法类 似于cp命令。例如,可以将文件/etc/fstab、目录/boot/grub同步备份到/opt目录下,其中,“-r” 选项表示递归整个目录树,“-l”选项用来备份链接文件。

[root@node01 ~]# rsync /etc/fstab /opt/
[root@node01 ~]# rsync -rl /etc/fstab /boot/grub /opt

1)命令格式及常用备份选项

      从以上操作可以看出,备份的基本格式为“rsync[选项]原始位置 目标位置”,其中常用的一些 命令选项如下所示,具体应根据实际需求选择(如-avz)。

> -r:递归模式,包含目录及子目录中的所有文件。

> -l:对于符号链接文件仍然复制为符号链接文件。

> -v:显示同步过程的详细(verbose)信息。

> -a:归档模式,保留文件的权限、属性等信息,等同于组合选项“-rlptgoD”。

> -z:在传输文件时进行压缩(compress)。

> -p:保留文件的权限标记。

> -t:保留文件的时间标记。

> -g:保留文件的属组标记(仅超级用户使用)。

> -o:保留文件的属主标记(仅超级用户使用)。

> -H:保留硬连接文件。

> -A:保留ACL属性信息。

> -D:保留设备文件及其他特殊文件。

--delete:删除目标位置有而原始位置没有的文件。

--checksum:根据校验和(而不是文件大小、修改时间)来决定是否跳过文件。

2)配置源的表示方法

      在执行远程同步任务时,rsync命令需要指定同步源服务器中的资源位置。rsync同步源的资源表 示方式为“用户名@主机地址 :: 共享模块名”或者“rsync://用户名@主机地址/共享模块名”,前 者为两个冒号分隔形式,后者为URL地址形式。例如,执行以下操作将访问rsync同步源,将指定的资源下载到本地/root目录下进行备份。

[root@node02 ~]# rsync -avz backuper@192.168.184.101::wwwroot /root

或 两个方法都行,可选其一使用

[root@node02 ~]# rsync -avz rsync://backuper@192.168.184.101/wwwroot /root

2. rsync备份操作示例

执行以下操作将访问源服务器中的wwwroot共享模块,并下载到本地的/myweb目录下。

[root@node02 ~]# mkdir /mywed
[root@node02 ~]# rsync -avzH --delete backuper@192.168.184.101::wwwroot /mywed 
                        
                        加上-H:保留硬链接文件

 

       实际生产环境中的备份工作通常是按计划重复执行的。例如,每天晚上22:30对服务器的网站 目录做一次同步,定期任务可以交给crond服务来完成。

       为了在同步过程中不用输入密码,需要创建一个密码文件,保存backuper用户的密码,如 /etc/server.pass。在执行rsync同步时使用选项“--password-file=/etc/server.pass”指定即可。

[root@node02 ~]# vim /etc/server.pass

pwd123

[root@node02 ~]# crontab -e

30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass \
backuper@192.168.184.101::wwwroot /myweb  //每天22:30执行脚本


[root@node02 ~]# systemctl restart crond
[root@node02 ~]# systemctl enable crond

12.3 配置inotify+rsync实时同步

       将 inotify机制与rsync 工具相结合,可以实现触发式备份(实时同步)——只要原始位置的文档 发生变化,则立即启动增量备份操作,否则处于静默等待状态,如图12.2所示。这样,就避免了按 固定周期备份时存在的延迟性,周期过密等问题。

       正因为inotify通知机制由Linux内核提供,因此主要做本机监控,在触发式备份中应用时更适合 上行同步,下面依次介绍其配置过程。

1. 调整inotify内核参数

     在Linux内核中.默认的inotify机制提供了三个调控参数:max_queue_events、max_user_instances、 max_user_watches,分别表示监控事件队列(16384)、最多监控实例数(128)、每个实例最多监控文 件数(8192)。

[root@node02 ~]# cat /proc/sys/fs/inotify/max_queued_events 

[root@node02 ~]# cat /proc/sys/fs/inotify/max_user_instances 

[root@node02 ~]# cat /proc/sys/fs/inotify/max_user_watches 

      当要监控的目录,文件数量较多或者变化较频繁时,建议加大这三个参数的值。例如,可直接 修改/etc/sysctl.conf配置文件,将管理队列设为32768,实例数设为1024,监控数设为1048576, 通常情况下,监控数所设的值建议大于监控目标的总文件数。

2. 安装inotify-tools(在源安装,需要备份的主机)

       使用 inotify 机制还需要安装 inotify-tools.以便提供 inotifywait.inotifywatch 辅助工具程序,用 来监控,汇总改动情况。inotify-tools可从网站http://inotify-tools.sourceforge.net/下载,版本为3.14。

 

本实验在FTP服务器下载的inotify-tools-3.14.tar.gz

[root@node01 ~]# mount /dev/cdrom /mnt/
[root@node01 ~]# rpm -ivh /mnt/Packages/ftp-0.17-67.el7.x86_64.rpm
[root@node01 ~]# ftp 172.16.37.13


ftp> get inotify-tools-3.14.tar.gz

解包等等

[root@node01 ~]# tar zxf inotify-tools-3.14.tar.gz 
[root@node01 ~]# cd inotify-tools-3.14
[root@node01 inotify-tools-3.14]# ./configure
[root@node01 inotify-tools-3.14]# make
[root@node01 inotify-tools-3.14]# make install

      以监控网站目录/var/www/html为例,可以先执行“inotifywait命令,然后在另一个终端向 /var/www/html目录下添加文件,移动文件,跟踪屏幕输出结果,其中,选项‘-e”用来指定要监控哪些事件,选项‘-m”表示持续监控,选项“-r”表示递归整个目录,选项“-q”简化输出信息。

[root@node01 ~]# inotifywait -mrq -e modify,create,move,delete /var/www/html/

       inotifywait可监控modify(修改)、create(创建)、move(移动)、delete(删除)、attrib(属性更改)等各种事件,一有变动立即输出结果:inotifywatch 可用来收集文件系统变动情况,并在运行结束后输出汇总的变化情况。关于这两个命令的详细用法可以参考其man手册页,配置触发备份任务时只要用到inotifywait就可以了。

3.编写触发式同步脚本(需配置ssh密钥对认证)

      使用inotifywait输出的监控结果中,每行记录中依次包括目录、事件,文件,据此可以识别变 动情况。为了简单,只要检测到变动时执行rsync上行同步操作即可,需要注意的是,当更新较频繁时,应避免并发执行rsync备份——若rsync进程已经存在,则忽略本次同步,或者根据rsync进程数量(取决于实际任务)来决定是否同步.

[root@node01 ~]# vim /opt/inotify_rsync.sh

#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,move,delete /var/www/html/"
RSYNC_CMD="rsync -rav /var/www/html root@192.168.184.110:/myweb"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    $RSYNC_CMD
done


[root@node01 ~]# chmod +x /opt/inotify_rsync.sh
[root@node01 ~]# echo '/opt/inotify_rsync.sh' >> /etc/rc.local

     上述脚本用来检测本机/var/www/htrl 目录的变动情况,一旦有更新触发rsync同步操作,上 传备份至服务器192.168.8.110的/var/www/html目录下。

触发式上行同步的验证过程如下所述,具体操作不再赘述。

(1)在本机运行/opt/inotify_rsync.sh脚本程序。

(2)切换到本机的/var/www/html目录,执行增加、删除、修改文件等操作。

(3)查看服务器中的/var/www/html 目录下的变化情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1341324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

每日一题:LeetCode-LCR 179. 查找总价格为目标值的两个商品

每日一题系列(day 16) 前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 &#x1f50e…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取相机当前实时帧率(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用UserSet功能保存和载入相机的各类参数(C#) Baumer工业相机Baumer工业相机的帧率的技术背景Baumer工业相机的帧率获取方式CameraExplorer如何查看相机帧率信息在NEOAPI SDK里通过函数获取相机帧率 Baume…

连接GaussDB(DWS)报错:Invalid or unsupported by client SCRAM mechanisms

用postgres方式连接GaussDB(DWS)报错:Invalid or unsupported by client SCRAM mechanisms 报错内容 [2023-12-27 21:43:35] Invalid or unsupported by client SCRAM mechanisms org.postgresql.util.PSQLException: Invalid or unsupported by client SCRAM mec…

算法学习系列(十四):并查集

目录 引言一、并查集概念二、并查集模板三、例题1.合并集合2.连通块中点的数量 引言 这个并查集以代码短小并且精悍的特点,在算法竞赛和面试中特别容易出,对于面试而言,肯定不会让你去写一两百行的代码,一般出的都是那种比较短的…

table表格中使用el-popover 无效问题解决

实例只针对单个的按钮管用在表格里每一列都有el-popover相当于是v-for遍历了 所以我们在触发按钮的时候并不是单个的触发某一个 主要执行 代码 <el-popover placement"left" :ref"popover-${scope.$index}"> 动态绑定了ref 关闭弹窗 执行deltask…

基于Wenet长音频分割降噪识别

Wenet是一个流行的语音处理工具&#xff0c;它专注于长音频的处理&#xff0c;具备分割、降噪和识别功能。它的长音频分割降噪识别功能允许对长时间录制的音频进行分段处理&#xff0c;首先对音频进行分割&#xff0c;将其分解成更小的段落或语音片段。接着进行降噪处理&#x…

开源轻量级分布式文件系统FastDFS本地部署并实现远程访问服务器

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

【力扣题解】P94-二叉树的中序遍历-Java题解

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P94-二叉树的中序遍历-Java题解&#x1f30f;题目描述&#x1f4a1;题解&#x1f30f…

微软发布安卓版Copilot,可免费使用GPT-4、DALL-E 3

12月27日&#xff0c;微软的Copilot助手&#xff0c;可在谷歌应用商店下载。目前&#xff0c;只有安卓版&#xff0c;ios还无法使用。 Copilot是一款类ChatGPT助手支持中文&#xff0c;可生成文本/代码/图片、分析图片、总结内容等&#xff0c;二者的功能几乎没太大差别。 值…

华为鸿蒙应用--登录页:网络请求、自定义Loading、MD5密码加密、emitter订阅状态变化、持久化登录状态、隐藏软键盘-ArkTs

HarmonyOS系列 华为鸿蒙应用--底部导航栏Tabs&#xff08;自适应手机和平板&#xff09;-ArkTs_华为鸿蒙应用 csdn 底部导航栏-CSDN博客 华为鸿蒙应用--欢迎页SplashPage倒计时跳过&#xff08;自适应手机和平板&#xff09;-ArkTs_app.media.ic_splash_page_background-CSDN…

云手机引领社交平台运营新潮流

在网络高度发展的今天&#xff0c;社交平台已经成为企业宣传推广的关键渠道之一。传统的社交运营方式已经无法满足效率的要求&#xff0c;云手机因而开始引领社交平台运营的新潮流。本文将深入探讨云手机如何重新定义社交平台运营&#xff0c;为用户和企业带来更为便捷、智能的…

GoLang学习之路,对Elasticsearch的使用,一文足以(包括泛型使用思想)(二)

书写上回&#xff0c;上回讲到&#xff0c;Elasticsearch的使用前提即&#xff1a;语法&#xff0c;表结构&#xff0c;使用类型结构等。要学这个必须要看前面这个&#xff1a;GoLang学习之路&#xff0c;对Elasticsearch的使用&#xff0c;一文足以&#xff08;包括泛型使用思…

腾讯云服务器和轻量服务器选哪个好(各自的优势区别)

腾讯云轻量服务器和云服务器CVM该怎么选&#xff1f;不差钱选云服务器CVM&#xff0c;追求性价比选择轻量应用服务器&#xff0c;轻量真优惠呀&#xff0c;活动 https://curl.qcloud.com/oRMoSucP 轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三…

2023.12.27 关于 Redis 数据类型 List 常用命令

目录 List 类型基本概念 List 类型特点 List 操作命令 LPUSH LPUSHX RPUSH RPUSHX LRANGE LPOP RPOP LINDEX LINSERT LREM LTRIM LSET 阻塞版本的命令 阻塞版本 和 非阻塞版本的区别 BLPOP & BRPOP List 类型基本概念 Redis 中的列表&#xff08;list&am…

适用于各种危险区域的火焰识别摄像机,实时监测、火灾预防、安全监控,为安全保驾护航

火灾是一种极具破坏力的灾难&#xff0c;对人们的生命和财产造成了严重的威胁。为了更好地预防和防范火灾&#xff0c;火焰识别摄像机作为一种先进的监控设备&#xff0c;正逐渐受到人们的重视和应用。本文将介绍火焰识别摄像机在安全监控和火灾预防方面的全面应用方案。 一、火…

django之drf框架(排序、过滤、分页、异常处理)

排序 排序的快速使用 1.必须是继承GenericAPIView及其子类才能是用排序 导入OrderingFilter类&#xff0c;from rest_framework.filters import OrderingFilter 2.在类中配置类属性 filter_backends[OrderingFilter] 3.类中写属性 ordering_fields [price,id] # 必须是表的…

华为云CCE-集群内访问-根据ip访问同个pod

华为云CCE-集群内访问-根据ip访问同个pod 问题描述&#xff1a;架构如下&#xff1a;解决方法&#xff1a; 问题描述&#xff1a; 使用service集群内访问时&#xff0c;由于启用了两个pod&#xff0c;导致请求轮询在两个pod之间&#xff0c;无法返回正确的结果。 架构如下&am…

Appium+python自动化(七)- 初识琵琶女Appium(千呼万唤始出来,犹抱琵琶半遮面)- 上(超详解)

简介 “千呼万唤始出来&#xff0c;犹抱琵琶半遮面”&#xff0c;经过前边的各项准备工作&#xff0c;终于才把appium这位琵琶女请出来。那么下边就由宏哥给各位看官、小伙伴们和童鞋们来引荐这位美女&#xff08;帅哥&#xff09;。这一篇主要是对前边的内容做一个小小的总结&…

功能测试知识超详细总结

一、测试项目启动与研读需求文档 &#xff08;一&#xff09; 组建测试团队 1、测试团队中的角色 2、测试团队的基本责任 尽早地发现软件程序、系统或产品中所有的问题。督促和协助开发人员尽快地解决程序中的缺陷。帮助项目管理人员制定合理的开发和测试计划。对缺陷进行跟…

远程桌面的3389端口如何修改

远程桌面是windows的一个功能组件&#xff0c;通过这个组件可以远程控制某台电脑的电脑桌面&#xff0c;使用过windows远程桌面的人都清楚&#xff0c;大家都知道3389是远程桌面的默认端口号&#xff0c;如果将这个端口在路由器中映射出去&#xff0c;将极大的增加服务器的风险…