架构之Rsync备份服务

架构之Rsync备份服务

1、备份的场景

1.1什么情况下需要备份
	数据比较重要情况下(数据如果丢失就可能找不回来了)
1.2什么是备份
	原有的数据复制几份,存起来以备不时之需
1.3能不能不做备份
	不重要的可以不备份,数据丢失没有什么后果就可以不备份
1.4备份的工具
	本地:cp 
	远程:scp(全量备份)和rsync(增量备份)
	scp		:每一天把以前所有数据都备份
	rsync	:每天备份之前没有的(不会产生多余数据)
1.5scp的参数
	-p:保留原文件的修改时间,访问时间和访问权限。
					mtime  atime    
	-r: 递归复制整个目录。
	-l limit: 限定用户所能使用的带宽,以Kbit/s为单位。(限制网络不准,设置50kb  他会慢慢降下来 可能到20~30kb)
	-q: 不显示传输进度条。
	-v:详细方式显示输出。
	1.5.1推数据
		本机文件上传到其他服务器
		scp [参数] [本机文件路径][用户名]@[ip]:[远程主机的路径]
	1.5.2拉数据
		其他服务器文件下载到本机.
		scp [参数] [用户名]@[ip]:[远程主机的路径] [本机文件路径]
	1.5.3scp中参数
	案例1:将DB01服务器上etc目录中所有的普通文件打包,备份到rsync服务器的/tmp目录中  推数据
		[root@db01 tmp]# tar -czPf etc.tar.gz $(find /etc/ -type f) 先压缩
		[root@db01 tmp]# scp /tmp/etc.tar.gz root@172.16.1.41:/tmp/   传输过去
	案例2:要求rsync服务器主动备份db服务器的etc.tar.gz 拉数据
		[root@rsync tmp]# scp root@172.16.1.51:/tmp/etc.tar.gz /tmp
	案例3:要求备份etc.tar.gz文件,且时间尽可能不改变  推数据
		[root@db01 tmp]# scp -p /tmp/etc.tar.gz root@172.16.1.41:/tmp/
	案例4:要求将db01的/root目录上传到rsync的/opt目录中 推数据
		[root@db01 tmp]# scp -r /root/ root@172.16.1.41:/opt/

2、rsync服务介绍

2.1什么是rsync
	远程增量文件备份工具
    rsync英文称为remote synchronizetion,从软件的名称就可以看出来,rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似于ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令。但是同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。
    监听端口:873
    运行模式:c/s 客户端服务器
2.2rsync的特性
	支持拷贝特殊文件,如连接文件、设备等。
    可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。 (tar -P) 
    可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 –p。
    可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)。
    可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)。
    可以通过socket(进程方式)传输文件和数据(服务端和客户端)*****。
    支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像。
2.3场景
	cron+rsync 可以跟定时任务进行绑定
	rsync+innotify:以守护进程方式同步文件

3、Rsync的备份的架构

也是两种方式(推、拉数据)推数据或者拉数据  客户端多的情况 都会造成服务段压力过大
    一部分服务器被分到备份源1   一部分服务器被分到备份源2
    备份源1和备份源2备份到备份源3
灾备:自然灾害前做的准备 多个地方备份,那个有问题立即启动灾备,立即切换
容灾:


4、Rsync的传输模式

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

4.1本地传输
    rsync [OPTION]... SRC [SRC]... DEST
    命令   选项        源文件路径    目标地址
案例:将/tmp/etc.tar.gz上传到/mnt目录下
  	[root@rsync tmp]# rsync etc.tar.gz /mnt/
4.2远程传输
	#推数据
		rsync [参数]  [本地文件路径] [用户]@[ip]:[远程路径]
		将3.txt传输到db01服务器上的/opt目录	
			[root@rsync tmp]# rsync -avzP 3.txt root@172.16.1.51:/opt/
			先以隐藏方式传过来一个.Xnp的隐藏文件,然后传完改名
	#拉数据
		rsync [参数] [用户]@[ip]:[远程路径] [本地文件路径]
		[root@rsync tmp]# rsync -avzP root@172.16.1.51:/opt/3.txt /tmp/
3.以守护进程的方式
	3.1 为什么需要以守护进程方式来传输	
		3.1.1保证数据安全
		3.1.2数据归档(因为每个人传每个人的目录容易乱)
	3.2 步骤(服务端)
		3.2.1 编写rsync的守护进程配置文件
            /etc/人syncd.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]
            comment = welcome to oldboyedu backup!
            path = /backup

            
		3.2.2 编写rsync的守护进程的配置文件
			3.2.2.1创建启动用户,
				[root@rsync tmp]# useradd resync -r -M -s /sbin/nologin 
			3.2.2.2创建密码
				[root@rsync tmp]# touch /etc/rsync.passwd
			3.2.2.3创建用户(传输用的用户,传输文件用的,不是系统用户)和密码关联数据
				[root@rsync tmp]# echo 'rsync_backup:123456' > /etc/rsync.passwd 
			3.2.2.4 授权密码文件
				[root@rsync tmp]# chmod 600 /etc/rsync.passwd 
		3.2.3 创建备份的目录
			3.2.3.1 创建目录
				[root@rsync tmp]# mkdir /backup
			3.2.3.2 将目录的用户修改成rsync
				[root@rsync tmp]# chown rsync.rsync /backup/
		3.2.4 启动rsyncd服务
			[root@rsync tmp]# systemctl start rsyncd
		
	3.3 步骤(客户端)
		3.3.1 安装rsync
			[root@db01 tmp]# yum install rsync -y
		3.3.2 手动输入密码传输 第一种方式
																	backup是模块名
			[root@db01 tmp]# rsync -avzP /opt/2.txt rsync_backup@172.16.1.41::backup
		3.3.2 使用密码文件 第二种方式
			客户端先写入密码 只有123456,服务端有密码有用户
			[root@db01 ~]# echo "123456">/etc/rsync.passwd
			设置权限600
			[root@db01 ~]# chmod 600 /etc/rsync.passwd 
			通过 --password-file=来指定密码文件 传输数据
			[root@db01 ~]# rsync -avzP /opt/2.txt  rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd 
		3.3.2 使用变量 第三种方式
			[root@db01 opt]#  export RSYNC_PASSWORD=123456
			[root@db01 opt]# rsync -avzP /opt/2.txt rsync_backup@172.16.1.41::backup
  #配置文件详解
            uid = rsync                         #(操作系统用户)启动rsync服务的用户id(可以使用名称代替的)
            gid = rsync                         #启动服务用户的组id(可以使用名称代替的)
            port = 873                          #服务默认监听端口
            fake super = yes                    #无须使用root用户启动
            use chroot = no                     #安全机制
            max connections = 200               #最大连接数
            timeout = 600                       #超时时间
            ignore errors                       #忽略错误
            read only = false                   #只读权限
            list = false                        #不能查看模块列表
            auth users = rsync_backup            #定义虚拟用户名(rsync传输过程使用的用户)
            secrets file = /etc/rsync.passwd     #定义虚拟用户的密码  存放用户密码的文件(权限必须600,密码是明文,明文是没加密的密码)
            log file = /var/log/rsyncd.log       #日志文件
            #####################################
            [backup]                                #备份的模块(模块名称)
            comment = welcome to oldboyedu backup!     #模块的备注 欢饮语没啥实际作用
            path = /backup                          #备份的路径

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

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

5.rsync结合inotfy

#怎样可以实现rsync根据目录的变化去实时同步数据。
#inotify就是实时监控目录中文件的变化。

#参数
	-m 持续监控
    -r 递归
    -q 静默,仅打印时间信息
    --timefmt 指定输出时间格式
    --format 指定事件输出格式
        %Xe 事件
        %w 目录
        %f 文件
    -e 指定监控的事件
        access 访问
        modify 内容修改
        attrib 属性修改
        close_write 修改真实文件内容
        open 打开
        create 创建
        delete 删除
        umount 卸载

-------------------------------------------------------
1、安装inotify(客户端)
	装在客户端
	[root@db01 ~]# yum -y install inotify-tools
2、测试inotify监控目录
	inotifywait  -mr  --format "%Xe %w %f" -e modify,close_write,create,delete [监控的目录]
3、实时同步/opt目录
	#监控
	[root@db01 ~]# inotifywait -mr  --format "%Xe %w %f" -e modify,close_write,create,delete /opt/ |while read line;do rsync -avzP /opt/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd ; done
	#循环查看rsync里的backup
	[root@rsync backup]# while true ;do ll /backup/;sleep 1 ;clear ;done
	
4、文艺青年版
	#!/bin/bash

    DIR=/opt/
    USERNME=rsync_backup
    IP="127.16.1.41"
    MODULE=backup

    inotifywait -mr  --format "%Xe %w %f" -e modify,close_write,create,delete ${DIR} |while read line;do rsync -avzP ${DIR}${USERNAME}@${IP}::${MODULE} --password-file=/etc/rsync.passwd &>/dev/null ; done
    ~                               
	
posted @ 2021-10-19 23:08  迪迦张  阅读(37)  评论(0编辑  收藏  举报