欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

架构--Rsync

程序员文章站 2022-05-31 19:56:30
...

一. 备份 Rsync

   1.下载:服务端与客户端都下载  rsync 
   2.配置:
   vim /etc/rsync.conf
   uid = rsync                      # 运行进程的用户
   gid = rsync                      # 运行进程的用户组
   port = 873                       # 监听端口
   fake super = yes                 # 不需要rsync已root身份运行,就可以存储文件的完整属性
   use chroot = no                  # 禁锢推送的数据至某个目录, 不允许跳出该目录
   max connections = 200            # 最大连接数
   timeout = 600                    # 超时时间
   ignore errors                    # 忽略错误信息
   read only = false                # 对备份数据可读写
   list = false                     # 不允许查看模块信息
   auth users = rsync_backup        # 定义虚拟用户,作为连接认证用户
   secrets file = /etc/rsync.passwd # 定义rsync服务用户连接认证密码文件路径
     
   [backup]                		 # 定义模块信息
   path = /backup         		 	 # 定义接收备份数据目录
   3.创建傀儡用户 --- 用户执行程序
useradd  rsync -M -s /sbin/nologin
   4.创建虚拟用户以及虚拟用户的密码 vim /etc/rsync.passwd
	 格式: Username:Password
[[email protected] ~]# vim /etc/rsync.passwd 
				rsync_backup:1
[[email protected] ~]# chmod 600 /etc/rsync.passwd
   5.创建一个接收备份数据目录      
[[email protected] ~]# mkdir /backup
[[email protected] ~]# chown -R rsync.rsync /backup/
   3.启动
[[email protected] ~]# systemctl start rsyncd
[[email protected] ~]# systemctl enable rsyncd
  4.检查
[[email protected] ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
			tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      22463/rsync
  5.#将本地的某个文件,推送到服务端backup目录,使用的是虚拟的用户名和密码

Push:

[[email protected] ~]# rsync -avz 31.txt [email protected]::backup

Pull:

[[email protected] ~]# rsync -avz  [email protected]::backup ./

参数

--bwlimit限速 (默认单位为兆  -->  兆  换算为带宽  * 8 = )
    [[email protected] ~]# rsync -avzP --bwlimit=10 size_1G  [email protected]::backup

--delete 强制同步
	1.在推送时添加--delete, 强制让服务端与客户端保持一致
   	2.在拉取时添加--delete, 强制让客户端与服务端保持一致 

--exclude   --exclude-from   排除
   	1.重要的不希望别人看见
   	2.文件太大,无法移动
   	排除单个文件或多个文件
   	# rsync -avz --exclude=origin/all.txt ./origin  [email protected]::backup 
   	# rsync -avz --exclude=origin/3.txt --exclude=origin/all.txt ./origin  [email protected]::backup 
   	
   	排除多个文件 (  准备一个文件, 将要排除的内容写入文件中, 最后指定排除的文件即可)=
   	[[email protected] ~]# cat pc.txt 
   	origin/5.txt
   	origin/8.txt
   	origin/9.txt
   	
   	[[email protected] ~]# rsync -avz --exclude-from=pc.txt  ./origin  [email protected]::backup

5.免交互
   	1.选项 --password-file=
   	2.设定环境变量
   	
   	第一种方式:
   	[[email protected] ~]# echo "1" > /etc/rsync.pass
   	[[email protected] ~]# chmod 600 /etc/rsync.pass 
   	[[email protected] ~]# rsync -avz --exclude-from=pc.txt  ./origin  [email protected]::backup --password-file=/etc/rsync.pass
   	

   	第二种方式:
   	[[email protected] ~]# export RSYNC_PASSWORD=1
   	[[email protected] ~]# rsync -avz --exclude-from=pc.txt  ./origin  [email protected]::backup

例题

客户端需求

1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
5.客户端每天凌晨1点定时执行该脚本

服务端需求

1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员 (邮件)
4.服务端仅保留6个月的备份数据,其余的全部删除 flag

客户端

$() : 小括号里面加的是命令
${}:花括号里面加的是变量

  #!/bin/bash
  Path=/backup
  Host=$(hostname)
  Addr=$(ipconfig | awk '/inet /{ print $2 }')
  Date=$(date +%F)
  Dest=${Path}/${Host}_${Addr}_${Date}

  #1.创建备份的目录
  [ -d $Dest ]mkdir -p $Dest
  #2.打包备份文件 拷贝至 cd / && \
  [ -f $Dest/sys.tar.gz ] || tar czf $Dest/sys.tar.gz  etc/passwd etc/fstab  etc/hosts && \
  [ -f $Dest/other.tar.gz ] || tar czf $Dest/other.tar.gz var/spool/cron scripts
  #3.添加标记
  [ -f $Dest/flag_${Date} ] ||  md5sum $Dest/*.tar.gz > $Dest/flag_${Date}
  #4.推送至备份服务器
  rsync -avz $Path/ [email protected]::backup

  #5.删除七天以前数据
  find $Path -type f -mtime "-7" | xargs rm -rf
  

服务端

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Path=/backup
Date=$(date +%F)

#1.推送来的flag进行校验
md5sum -c $Path/*/flag_${Date} > $Path/result_${Date}

#2.通知管理人员
mail -s "备份校验结果${Date}" "[email protected]" < $Path/result_${Date}

下载 mailx 配置 vim /etc/mail.rc

set [email protected]
set smtp=smtps://smtp.qq.com:465
set [email protected]
set smtp-auth-password=随机码(从qq邮箱获得)
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

其中出现的问题

1.防火墙
	selinux		 
	firewalld	 No route to host (113)
2.密码文件不是复制,而是手写
3.模块找不到, 粘贴时使用的vim
相关标签: 架构