Kylin系统的rsync服务

rsync服务

服务器准备

web01:

  1. 从模板机克隆一台虚拟机
  2. 更改服务器公网IP为10.0.0.7,内网IP为172.16.1.7
  3. 更改主机名为web01
  4. 制作快照

backup:

  1. 从模板机克隆一台虚拟机
  2. 更改服务器公网IP为10.0.0.41,内网IP为172.16.1.41
  3. 更改主机名为backup
  4. 制作快照

全量拷贝和增量拷贝

  • 全量拷贝scp:每次拷贝都会将目录中的所有文件拷贝到指定目录
  • 增量拷贝rsync:每次拷贝只会将目标目录没有的文件拷贝进去

rsync的参数选项

-a           #归档模式传输, 等于-tropgDl
-v           #详细模式输出, 打印速率, 文件数量等
-z           #传输时进行压缩以提高效率
-P           #显示同步的过程及传输时的进度等信息
-----------------------------------------------------------
-r           #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t           #保持文件时间信息
-o           #保持文件属主信息
-p           #保持文件权限
-g           #保持文件属组信息
-l           #保留软连接
-D           #保持设备文件信息
-L           #保留软连接指向的目标文件
-e           #使用的信道协议,指定替代rsh的shell程序
--exclude=PATTERN   #指定排除不需要传输的文件模式(支持{})
--exclude-from=file #文件名所在的目录文件(将要排除的文件名写入一个文件中即可)
--bwlimit=100       #限速传输(默认单位为M)
--partial           #断点续传
--delete            #让目标目录和源目录数据保持一致(常写在avz后)
--password-file=xxx #使用密码文件

三种工作模式

本地模式

  • 本地的备份,类似于cp命令,实际意义不大
  • 语法格式
[root@backup ~]# rsync -avz [源文件] [目标地址]

远程模式

  • 远程的拷贝,类似于scp命令,实际意义不大,属于增量备份
  • 语法格式
拉取:
	rsync -avz [用户名]@[目标地址IP]:[目标文件] [源地址保存路径]
推送:
	rsync -avz [源文件] [用户名]@[目标地址IP]:[目标保存路径]
  • 示例:
#拉取web01中的/etc/hosts文件存储到backup的家目录中
[root@backup ~]# rsync -avz root@10.0.0.7:/etc/hosts /root
[root@backup ~]# ls
hosts
#推送backup中的/etc/hosts文件到web01的家目录
[root@backup ~]# rsync -avz /etc/hosts root@10.0.0.7:/root
[root@web01 ~]# ls
hosts
  • 注意:
1.源文件的书写方式
	假设有一目录为test:
	目录后不加/(test):拷贝目录及目录下的所有内容;
	目录后加/(test/):只拷贝目录下的文件;
2.当不书写[用户名]时,会默认使用当前系统当前登录的用户进行登录传输;
	若推送/拉取地址无该用户,则无法进行推送/拉取;
3.更换用户、更改推送或拉取路径时,注意相关权限。

守护进程模式

  • 持续不断的在后台运行,接收客户端发送的重要数据
  • 语法格式
拉取:
	rsync -avz [用户名]@[目标地址IP]::[目标文件] [源地址保存路径]
推送:
	rsync -avz [源文件] [用户名]@[目标地址IP]::[目标保存路径]

服务配置过程

02-rsync服务配置流程图

主机信息
主机角色 外网IP 内网IP 主机名
rsync服务端 10.0.0.41 176.16.1.41 backup
rsync 10.0.0.7 176.16.1.7 web01
服务端配置

1.安装rsync服务

[root@backup ~]# yum install -y rsync

2.配置rsync服务

#查询rsync服务的配置文件
[root@backup ~]# rpm -qc rsync 
/etc/rsyncd.conf
#编辑配置文件
vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log

[backup]
path = /backup

#若客户端需要将数据推送到不同的目录中,在该文件中添加新模块并创建对应的必要信息即可,如:
[testnew]
path = /test

[root@backup ~]# mkdir /test
[root@backup ~]# chown rsync.rsync /backup
#注意:更改配置文件后,需要重新启动配置文件才能生效

3.根据配置文件创建必要的数据信息

#创建运行此服务的虚拟用户
[root@backup ~]# useradd -M -s /sbin/nologin rsync
[root@backup ~]# id rsync 
uid=1000(rsync) gid=1000(rsync) groups=1000(rsync)
#创建匿名用户的密码文件,并赋权为600
[root@backup ~]# echo rsync_backup:123 > /etc/rsync.passwd
[root@backup ~]# chmod 600 /etc/rsync.passwd
#创建数据目录,由于此服务是由rsync执行,由rsync写入数据,所以要将数据目录属主属组权限更改为rsync
[root@backup ~]# mkdir /backup
[root@backup ~]# chown rsync.rsync /backup
#检查两个目录的权限
[root@backup ~]# ll -d /backup /etc/rsync.passwd 
drwxr-xr-x 2 rsync rsync  6 Dec  3 14:44 /backup
-rw------- 1 root  root  17 Dec  3 14:43 /etc/rsync.passwd

4.启动rsync服务

[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
#查看运行端口确保服务启动
[root@backup ~]# netstat -tnulp | grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*        LISTEN     3019/rsync 
客户端测试
[root@web01 ~]# touch 1.txt
[root@web01 ~]# rsync -avz /root/1.txt rsync_backup@172.16.1.41::backup
Password: 
sending incremental file list
1.txt

sent 88 bytes  received 43 bytes  37.43 bytes/sec
total size is 0  speedup is 0.00
  • 实现非交互式登录推送拉取文件
第一种方法:创建密码文件,使用--password-file 参数
[root@web01 ~]# echo 123456 > /etc/rsync.pw
[root@web01 ~]# chmod 600 /etc/rsync.pw 
[root@web01 ~]# rsync -avz /root/1.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.pw
第二种方法:设置rsync的内置变量
[root@web01 ~]# export RSYNC_PASSWORD=123456
[root@web01 ~]# rsync -avz /root/1.txt rsync_backup@172.16.1.41::backup

案例

  • 客户端需求
1.客户端提前准备存放的备份的目录,目录规则如下:/backup/web01_172.16.1.7_2018-09-02 date +%F
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/web01_172.16.1.7_2018-09-02
3.客户端最后将备份的数据进行推送至备份服务器 守护进程
4.客户端每天凌晨1点定时执行该脚本
5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
  • 解决方案
#编写脚本文件
[root@web01 ~]# vim /backup.sh
export RSYNC_PASSWORD=123456
IP=`hostname -I | awk {print $1}`
date=`date +%F`
name=`hostname`

#需求1
mkdir /backup/$name_$IP_$date
#需求2
tar zcvf /backup/$name_$IP_$date/etc.tar.gz  /etc/hosts /etc/passwd
#需求3
rsync -avz /backup/$name_$IP_$date rsync_backup@10.0.0.41::backup
#需求5
find /backup -mtime +7 | xargs rm -rf

[root@web01 ~]# chmod +x /backup.sh

#需求4
[root@web01 ~]# vim /etc/crontab
00 01 * * * root backup.sh
  • 服务端需求
shell编程在盘它 zabbix 微信接收校验结果。
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其余的全部删除
  • 解决方案

posted @ 2025-03-20 15:44  丁志岩  阅读(95)  评论(0)    收藏  举报