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

day033-备份服务rsync

文章目录

  • 1. rsync
    • 1.1 增量同步
    • 1.2 rsync 指定目录
  • 2. rsync应用场景
  • 3. rsync服务端(守护进程模式)
    • 3.1 检查网络连通性
    • 3.2 查看rsync软件包
    • 3.3 修改配置文件
    • 3.4 启动服务
    • 3.5 准备环境
      • 3.5.1 添加rsync虚拟用户
      • 3.5.2 创建rsync_backup用户的密码文件
      • 3.5.3 创建模块对应目录
    • 3.5 服务端本地测试
    • 3.6 客户端测试
      • 3.6.1 非交互式备份文件
  • 4. 案例-书写客户端定时备份/etc脚本
    • 4.1 为服务端配置文件添加新模块
    • 4.2 代码
    • 4.3 添加cron任务
  • 5. 思维导图

1. rsync

rsync(Remote Sync),是 Linux/Unix 下的 远程增量文件同步工具,支持本地和远程文件传输,以 高效、低带宽占用 著称。

1.1 增量同步

同步文件方式说明
增量同步仅同步新增的或修改的文件
全量同步无论文件是否变化,全部重新传输(scp)

1.2 rsync 指定目录

在rsync命令中,

/etc/表示目录下的内容

/etc表示该目录及目录下内容

  • 与创建软连接一样,/etc表示为目录创建软连接,/etc/表示该目录下的文件
  • 与ls -ld也相同,原理一样
[root@nfs01 ~]# ll -d /sbin/
dr-xr-xr-x 2 root root 20480  611 19:10 /sbin/
[root@nfs01 ~]# ll -d /sbin
lrwxrwxrwx 1 root root 8  36  2021 /sbin -> usr/sbin

2. rsync应用场景

rsync应用场景目标针对机器
rsync+cron实现定时备份配置文件、代码、日志、数据,不需要实时备份内容绝大部分机器、服务都能使用
rsync+lscynd/sersync实现实时同步针对数据相关的服务:存储(nfs)、数据库存储(nfs)
异地容灾(本质也是定时或实时同步)看公司是否需要异地备份

3. rsync服务端(守护进程模式)

3.1 检查网络连通性

# ping本机
[root@backup ~]# ping 172.16.1.41
PING 172.16.1.41 (172.16.1.41) 56(84) bytes of data.
64 bytes from 172.16.1.41: icmp_seq=1 ttl=64 time=0.023 ms
64 bytes from 172.16.1.41: icmp_seq=2 ttl=64 time=0.024 ms
^C
--- 172.16.1.41 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1063ms
rtt min/avg/max/mdev = 0.023/0.023/0.024/0.000 ms
[root@backup ~]# ping backup
PING backup (172.16.1.41) 56(84) bytes of data.
64 bytes from backup (172.16.1.41): icmp_seq=1 ttl=64 time=0.017 ms
64 bytes from backup (172.16.1.41): icmp_seq=2 ttl=64 time=0.023 ms
^C
--- backup ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1047ms
rtt min/avg/max/mdev = 0.017/0.020/0.023/0.003 ms# ping rsync客户端
[root@backup ~]# ping 172.16.1.31
PING 172.16.1.31 (172.16.1.31) 56(84) bytes of data.
64 bytes from 172.16.1.31: icmp_seq=1 ttl=64 time=0.866 ms
64 bytes from 172.16.1.31: icmp_seq=2 ttl=64 time=0.310 ms
^C
--- 172.16.1.31 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1014ms
rtt min/avg/max/mdev = 0.310/0.588/0.866/0.278 ms
[root@backup ~]# ping nfs01
PING nfs01 (172.16.1.31) 56(84) bytes of data.
64 bytes from nfs01 (172.16.1.31): icmp_seq=1 ttl=64 time=0.440 ms
64 bytes from nfs01 (172.16.1.31): icmp_seq=2 ttl=64 time=0.354 ms
64 bytes from nfs01 (172.16.1.31): icmp_seq=3 ttl=64 time=0.330 ms
^C
--- nfs01 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2076ms
rtt min/avg/max/mdev = 0.330/0.374/0.440/0.047 ms

3.2 查看rsync软件包

  • 默认系统自带rsync
[root@backup ~]# rpm -qa |grep 'rsync'
rsync-3.1.3-7.ky10.x86_64
rsync-help-3.1.3-7.ky10.noarch
[root@backup ~]# rpm -ql rsync
/etc/rsyncd.conf # rsync服务端的配置文件
/etc/sysconfig/rsyncd
/usr/bin/rsync
……

3.3 修改配置文件

  • 路径:/etc/rsyncd.conf

在这里插入图片描述

[root@backup ~]# cat /etc/rsyncd.conf 
#created by oldboy 15:01 2009-6-5
##rsyncd.conf start##
fake super =yes 
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
#hosts allow = 10.0.0.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#####################################
[data]
comment = www by old0boy 14:18 2012-1-13
path = /data
[backup]
comment = www by old0boy 14:18 2012-1-13
path = /backup

3.4 启动服务

[root@backup ~]# systemctl start rsyncd.service 
[root@backup ~]# systemctl enable rsyncd.service 
[root@backup ~]# ps -ef |grep [r]sync
root        2106       1  0 18:53 ?        00:00:00 /usr/bin/rsync --daemon --no-detach
[root@backup ~]# ss -lntip |grep [r]sync
LISTEN    0         5                  0.0.0.0:873              0.0.0.0:*        users:(("rsync",pid=2106,fd=5))
LISTEN    0         5                     [::]:873                 [::]:*        users:(("rsync",pid=2106,fd=6))

3.5 准备环境

3.5.1 添加rsync虚拟用户

[root@backup ~]# id rsync
id: “rsync”:无此用户
[root@backup ~]# useradd -s /sbin/nologin -M rsync
[root@backup ~]# tail -1 /etc/passwd
rsync:x:1000:1000::/home/rsync:/sbin/nologin

3.5.2 创建rsync_backup用户的密码文件

  • 密码文件所有者必须是root用户,而且只能被root用户读写
echo "rsync_backup:1" >/etc/rsync.password
chmod 600 /etc/rsync.password

3.5.3 创建模块对应目录

  • rsync程序需要读写目标目录,所以要设置目录的所属用户和所属组
[root@backup ~]# mkdir /data
[root@backup ~]# chown rsync:rsync /data/
[root@backup ~]# ll /data/ -d
drwxr-xr-x 2 rsync rsync 86  612 11:46 /data/

3.5 服务端本地测试

  • rsync -avz 需要备份的文件/目录 rsync用户名@服务器ip或主机名::模块名称
    • -a:相当于-rlptgoD

      • -r:递归传输目录及文件
      • -l:传输软连接
      • -p:保持文件权限
      • -o:保持文件所有者
      • -g:保持文件所属用户组
      • -t:保持修改时间不变
      • -D:–devices 保持设备文件信息
    • -v:显示传输过程

    • -z:在传输过程中压缩数据,减少宽带占用和提高传输速度

[root@backup ~]# rsync -avz /etc/passwd rsync_backup@backup::data
Password:  # 输出该用户名的密码
sending incremental file list
passwdsent 859 bytes  received 43 bytes  360.80 bytes/sec
total size is 1,890  speedup is 2.10
[root@backup ~]# ll /data/
-rw-r--r-- 1 rsync rsync 1890  612 10:07 passwd

3.6 客户端测试

[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@backup::data
Password: 
sending incremental file listsent 48 bytes  received 20 bytes  15.11 bytes/sec
total size is 311  speedup is 4.57

3.6.1 非交互式备份文件

# 创建密码文件
[root@nfs01 ~]# echo "1" >/etc/rsync-client.password 
# 密码文件只能被root读写
[root@nfs01 ~]# chmod 600 /etc/rsync-client.password 
# 备份文件时指定密码文件
[root@nfs01 ~]# rsync -avz /etc/hostname rsync_backup@backup::data --password-file=/etc/rsync-client.password
sending incremental file listsent 51 bytes  received 20 bytes  142.00 bytes/sec
total size is 6  speedup is 0.08

4. 案例-书写客户端定时备份/etc脚本

  • 客户端将目标目录打包
  • rsync备份数据
  • 客户端清理旧的打包文件(保留7天)

4.1 为服务端配置文件添加新模块

……
[backup]
comment = www by old0boy 14:18 2012-1-13
path = /backup
  • 备份的数据会存放到/backup目录下

4.2 代码

[root@nfs01 ~]# cat /server/scripts/rsync_backup.sh 
#!/bin/bash
##############################################################
# File Name:rsync_backup.sh
# Version:V1.0
# Author:SunKexu
# Organization:www.oldboyedu.com
# Desc:定时备份
##############################################################
export LANG=en_US.UTF-8
# vars
date=`date +%F_%w` # 时间
ip=`hostname -I |awk '{print $2}'` # 获取客户端ip
bak_dir=/backup/ # 压缩包存放目录
# vars rsync 服务端变量
user=rsync_backup # rsync用户名
rsync_server_ip=172.16.1.41 # rsync服务器ip
module_name=backup # rsync的模块名称
pass_file=/etc/rsync-client.password # 客户端的密码文件路径# 打包
function package(){# 确定压缩包存放目录,若不存在则创建[ ! -d "${bak_dir}${ip}" ] && mkdir -p "${bak_dir}${ip}"# 打包压缩tar zcf "${bak_dir}${ip}/etc-${date}.tar.gz" /etc/[ $? -eq 0 ] || { # 如果压缩失败则退出echo "tar failed"exit 1}
}
# rsync备份数据
function rsync_backup(){# rsync传输到服务器rsync -avz "${bak_dir}" "${user}@${rsync_server_ip}::${module_name}" --password-file=${pass_file}[ $? -eq 0 ] || { # 如果传输失败则退出echo "rsync failed"exit 2}
}
# 清理旧的压缩包
function clean_tar(){# 清理旧的备份find $bak_dir -type f -name "*.tar.gz" -mtime +7 |xargs rm -f
}
# main函数
function main(){packagersync_backupclean_tar
}# command
main
[root@nfs01 ~]# bash /server/scripts/rsync_backup.sh
tar: Removing leading `/' from member names
sending incremental file list
172.16.1.31/etc-2025-06-12_4.tar.gzsent 163 bytes  received 13,928 bytes  28,182.00 bytes/sec
total size is 5,349,099  speedup is 379.61
[root@nfs01 ~]# ll /backup/172.16.1.31/
总用量 5224
-rw-r--r-- 1 root root 5349099  612 20:05 etc-2025-06-12_4.tar.gz
  • 再查看服务端是否有压缩包
[root@backup ~]# ll /backup/172.16.1.31/
总用量 5224
-rw-r--r-- 1 rsync rsync 5349099  612 20:05 etc-2025-06-12_4.tar.gz
  • 服务端和客户端的压缩包时间一致,代码运行成功

4.3 添加cron任务

crontab -e
0  0 * * * bash /server/scripts/rsync_backup.sh >/dev/null  2>&1

5. 思维导图

【金山文档】 思维导图 https://www.kdocs.cn/l/co3I7PtpTYQX

相关文章:

  • [Linux] -- 大文件拆分、合并与校验全解析:处理 GB/TB 级文件
  • 将python脚本打包进docker
  • ThreadLocal为什么会导致内存泄漏(详细讲解)
  • 模拟电路的知识
  • wordpress首页调用指定ID页面内的相册
  • CSS 外边距合并(Margin Collapsing)问题研究
  • Python 流程控制语句(return、break、continue)
  • 安全有效的 C 盘清理方法
  • 水库大坝安全监测之渗流监测
  • glibc
  • ESP32-CAM识别解析QR二维码输出数据
  • SiteAzure:信箱写信提交报错
  • 已连接(connected)UDP和未连接(unconnected)UDP的区别
  • Day52 Python打卡训练营
  • JMeter + 命令行服务器端压测全流程详解
  • ARM SMMUv3命令和事件队列分析(四)
  • 确认连接的是 Redis 主节点(master),使用 SLAVEOF NO ONE 切换
  • 【ubuntu驱动安装】安装nvidia驱动和cuda环境
  • 【C语言】*与深层理解
  • JavaScript原型,原型链。
  • 网站开发培训多少钱/网络销售面试问题有哪些
  • 百度做的网站字体侵权吗/一份完整的市场调查方案
  • 整合营销是做什么的/百度系优化
  • 肥西做网站/网站怎么优化seo
  • 手机网站列表 教程/无锡seo
  • 泉州网站公司/网络广告营销案例有哪些