- 由 虚拟的现实创建于1月 25, 2024 需要 2 分钟阅读时间
简介
Rsync(Remote Synchronization)是一个非常强大的工具,它允许您进行快速的文件同步,通常用于备份和镜像。Rsync 服务器就是运行了 rsync 守护进程的服务器,使得其他机器可以通过 rsync 协议与之通信并同步文件。
- Rsync 的优势在于它使用了一种增量传输技术,这意味着当目标位置已经有一个较早版本的文件时,rsync 会仅传输改变了的部分。这种方法不仅速度快,而且节约带宽。
- Rsync 服务器配置灵活,您可以设置为匿名访问或者基于用户认证,还可以通过 SSH 进行加密传输,增加数据传输的安全性。
- 它同时支持推(push)和拉(pull)两种同步模式,可以非常方便的从一个中心点同步数据到多个目的地,或者将数据从多个源头汇总到一个中心服务器。
- Rsync 的使用场景非常广泛,从普通的文件备份到网站的镜像,再到大规模的数据分发,其稳定性和高效性都得到了广泛的认可。
- 在 Linux 和 Unix 系统中,rsync 几乎是标准配置,而在 Windows 系统中,也有多种方式可以使用 rsync。
Rsync Server 配置
在 docker-compose.yaml 文件中,会对重要的配置进行说明,因网络环境等不同,需要根据自身实际情况调整配置。 Docker 镜像相关配置说明参考: Docker Rsync Server
[root@demo rsync-server]# cat > docker-compose.yaml << \EOF version: '3' services: rsync-server: image: axiom/rsync-server container_name: rsync-server restart: always ports: - "1022:22" # 如果不使用SSH Key,可以不用配置 - "873:873" volumes: - /SSD/Demo/rsync-server/data/:/data # 将数据持久化至本地 environment: - USERNAME=xxx # 认证用户 - PASSWORD=xxx # 认证密码 - VOLUME=/data # 数据容器中的存储目录 - ALLOW=xxx.xxx.xxx.xxx/32 # 允许访问 Rsync 服务器IP EOF # 启动服务 [root@demo rsync-server]# docker-compose up -d # 查看服务是否启动正常 [root@demo rsync-server]# docker-compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS rsync-server axiom/rsync-server "/entrypoint.sh rsyn…" rsync-server About an hour ago Up About an hour 0.0.0.0:873->873/tcp, :::873->873/tcp, 0.0.0.0:1022->22/tcp, :::1022->22/tcp # 进入容器 [root@demo rsync-server]# docker-compose exec -it rsync-server bash # rsync server 文件主要包含两个 /etc/rsyncd.conf 和 /etc/rsyncd.secrets,其中 /etc/rsyncd.conf 为配置文件,/etc/rsyncd.secrets 为密钥管理文件。 root@64d9869fa91e:/# cat /etc/rsyncd.conf log file = /dev/stdout timeout = 300 max connections = 10 port = 873 # 端口 [volume] uid = root gid = root hosts deny = * hosts allow = xxx.xxx.xxx.xxx/32 # 允许访问 Rsync 服务器IP(IP白名单) read only = false path = /data # 数据挂载目录 comment = /data directory auth users = username # 认证用户 secrets file = /etc/rsyncd.secrets # 认证密码 root@64d9869fa91e:/# cat /etc/rsyncd.secrets # 密码文件 username:password # 密码文件格式
服务器端计划任务
因为我们不可能一直保存客户端备份过来的数据,一般会设置一个定时任务,删除多少天以前的数据,所以这里设置一个定时任务删除 90 天以前的数据。
# 创建清理 Rsync 备份脚本 cat > /root/del_rsync_backup.sh << \EOF # 定义要清理 Rsync 备份目录 Rsync_DIR="/SSD/Demo/rsync-server/data/" # 删除超过90天的备份 find "$Rsync_DIR" -type f -name "*.tar.bz2" -mtime +90 -exec rm -f {} \; EOF # 设置可执行权限 chmod +x /root/del_rsync_backup.sh # 配置计划任务 crontab -l 0 7 * * * /root/del_rsync_backup.sh > /dev/null 2>&1 &
这里详细解释一下 find "$Rsync_DIR" -type f -name "*.tar.bz2" -mtime +90 -exec rm -f {} \; 命令,这条命令用于在 Unix 或类 Unix 系统中查找并删除特定目录下所有 90 天前的 .tar.bz2 压缩文件。
下面是命令各部分的详细解释:
- find: 这是一个常用的命令行工具,用于在文件系统中搜索符合条件的文件和目录。
- "$Rsync_DIR": 这是一个变量,用于存储您要搜索的目录的路径。假设这个变量已经被定义并包含了正确的路径。
- -type f: 这个选项告诉 find 命令只搜索文件(file),而不是目录或其他类型的文件系统对象。
- -name "*.tar.bz2": 这个选项指定搜索的文件名模式。在这里,它会匹配所有以 .tar.bz2 结尾的文件。
- -mtime +90: 这个选项用于匹配文件修改时间。+90 表示搜索最后修改时间在 90 天之前的文件。
- -exec rm -f {} \;: 这个选项告诉 find 命令对每个匹配到的文件执行后续的命令。花括号 是一个占位符,对于每个匹配的文件,find 命令都会将这个占位符替换为文件的路径。\; 是一个终结符,用于告诉 find 命令 -exec 参数到此结束。
Rsync Client 配置
客户端配置,因为我们这里是备份 wordpress 页面代码和数据库,所以需要在 Web 服务器端配置。涉及数据库备份,会引用到另外两个新命令 mysqldump 和 gzip,在下面的 shell 脚本中会一一说明其作用。
cat > /root/backup_wordpress.sh << \EOF #!/bin/bash DBUSER="xxx" DBPASS="xxx" DBNAME="xxx" # 备份数据库 DBFILE=${DBNAME}-`date +\%Y\%m\%d\%H\%M\%S`.sql.gz # 因为我们的数据库部署在 Docker 中,所以这条命令通过 docker exec 进入容器备份,备份目录: /bitnami/mariadb/ 为单独挂载宿主机目录 docker exec <容器ID> bash -c "mysqldump -u${DBUSER} -p\"${DBPASS}\" ${DBNAME} | gzip > /bitnami/mariadb/${DBFILE}" # 备份配置文件 Wordpress 代码 FILEBAK=DockerConfig-`date +\%Y\%m\%d\%H\%M\%S`.tar.bz2 tar -cjvf /root/${FILEBAK} /root/DockerConfig # 备份同步 export RSYNC_PASSWORD='d8c4b9aadufyedf9cbd#5091830bf004' rsync -av --progress /root/${FILEBAK} rsync://superadminjia@sync.rockylinux.cn:873/volume/ unset RSYNC_PASSWORD # 删除服务器端数据库备份 rm -rf /root/DockerConfig/rockylinux/mariadb_data/*.tar.bz2 rm -rf /root/${FILEBAK} EOF # 设置可执行权限 chmod +x /root/backup_wordpress.sh
在使用 tar 命令进行备份时,可以启用高压缩选项以减少生成的备份文件大小。tar 命令通常与压缩工具结合使用,例如 gzip、bzip2、xz 等,每种工具都提供了不同级别的压缩效率。
- 使用 gzip 压缩(常规压缩),使用 tar -czvf 选项启用 gzip 压缩。
- 使用 bzip2 压缩(更高的压缩率),使用 tar -cjvf 选项启用 bzip2 压缩。
- 使用 xz 压缩(通常提供最高的压缩率),使用 tar -cJvf 选项启用 xz 压缩。
如果想要在压缩过程中使用 xz 压缩且希望使用最高压缩率,可以这样做:
tar -cJvf --options='xz:compression-level=9' backup.tar.xz /data
其中 --options='xz:compression-level=9' 告诉 tar 命令使用 xz 压缩的最高压缩级别(9)。这会花费更多的时间和 CPU 资源,但通常会得到更小的文件。选择哪种压缩工具以及压缩级别取决于您的具体需求,包括备份文件大小、压缩时间、CPU 使用率和存储成本。
客户端计划任务
# crontab -l 查看 # crontab -e 编辑 crontab -l 0 6 * * * /root/backup_wordpress.sh > /dev/null 2>&1 &
/dev/null 2>&1 & 是一种重定向表达式,用来处理命令的输出。这个表达式通常添加在 cron 作业的命令行末尾,以确保命令的标准输出(stdout)和标准错误输出(stderr)不会发送邮件给用户或记录到日志中。
- /dev/null:这是一个特殊的设备文件,用作数据的"黑洞"。写入到 /dev/null 的任何内容都会被丢弃,读取 /dev/null 会立即返回文件结束(EOF)。不希望保留命令的输出时,可以将输出重定向到 /dev/null。
- 2>&1:这是 shell 的另一种重定向方式。2 表示标准错误(Standard Error,简称 stderr),1 表示标准输出(Standard Output,简称 stdout),0 表示标准输入(Standard Input,简称 stdin)。
- 2>&1 表示将标准错误重定向到标准输出的当前位置。由于标准输出已经被重定向到 /dev/null,这意味着标准错误也会被重定向到 /dev/null。将这两部分组合起来,> /dev/null 2>&1 的意思是将标准输出重定向到 /dev/null,然后将标准错误也重定向到与标准输出相同的位置(即 /dev/null)。这样,无论标准输出还是标准错误产生的任何内容都会被丢弃。
- &:放在命令末尾的单独的 & 字符是告诉 shell 在后台执行该命令。这意味着命令将会在一个子进程中运行,而不会阻塞当前的 shell 或终端。您可以继续在同一个 shell 中执行其他命令,而后台命令将独立运行。
在 crontab 作业中使用这种重定向通常是为了避免产生邮件通知。默认情况下,如果 cron 作业有输出,cron 守护进程会尝试将这些输出通过邮件发送给用户。通过将输出重定向到 /dev/null,可以防止这种邮件发送行为。
- 无标签