Rsync(Remote Synchronization)是一个非常强大的工具,它允许您进行快速的文件同步,通常用于备份和镜像。Rsync 服务器就是运行了 rsync 守护进程的服务器,使得其他机器可以通过 rsync 协议与之通信并同步文件。
在 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 压缩文件。
下面是命令各部分的详细解释:
客户端配置,因为我们这里是备份 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 等,每种工具都提供了不同级别的压缩效率。
需要注意,高压缩率通常会导致更高的 CPU 使用率和更长的压缩时间。如果您备份的数据量很大,或者您的服务器资源有限,可能需要权衡压缩时间和文件大小。 |
如果想要在压缩过程中使用 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)不会发送邮件给用户或记录到日志中。
在 crontab 作业中使用这种重定向通常是为了避免产生邮件通知。默认情况下,如果 cron 作业有输出,cron 守护进程会尝试将这些输出通过邮件发送给用户。通过将输出重定向到 /dev/null,可以防止这种邮件发送行为。