rsync--备份服务

版权声明:原创作品,谢绝转载!否则将追究法律责任。 ————— 作者:kirin

一、rsync是什么??

1. 用于将数据信息进行恢复
2. 用于出现问题进行文件信息对比
 
3. 备份服务优缺点 
    优势:
	1)可以实现增量备份
	2)具有守护进程模式(服务端)
	   认证管理控制
	   实现白名单黑名单安全访问控制
	   密码文件信息,可以实现免交互传输数据
	   网络连接数量进行限制
	3)实现数据的加密传输 -e  
	缺点:
	1)比较擅长传输大文件,传输大量小文件,出问题 (打包)
	2)传输大文件,有可能会传输中断  --partial

二、如何实现备份服务部署--rsync

1. rsync软件是一个快速,多功能,远程和本地文件备份工具
2. rsync软件可以实现全量和增量备份    (优势)
3. 增量备份是如何实现的
两种方式:数学算法--数据比对
第一种:比对文件数据属性信息(默认)
第二种:比对文件md5数值    
	rsync软件 cp scp rm ls 1v4
	rsync替换cp:
	cp /etc/hosts /tmp/      --- 备份文件
	rsync /etc/hosts /tmp/   --- 备份文件
	rsync -a /kirin /tmp    --- 备份目录
PS:rsync备份目录时
	目录后面有/    kirin/   将目录下面的数据信息进行备份
	目录后面没有/  kirin    将目录下面的内容以及目录备份都进行备份
rsync替换scp:远程备份
	scp -rp /etc/hosts  172.16.1.31:/tmp   --- 远程传输备份文件
	rsync -rp /etc/hosts  172.16.1.31:/tmp
 rsync替换rm:
    mkdir /null
    rsync -avz --delete /null/ /tmp   --- 将目录中的数据进行删除或者清空
	--delete 无差异同步参数
rsync替换ls:
	rsync /etc/hosts
    -rw-r-xr-x            391 2019/06/11 09:36:15 hosts

三、 rsync命令详细用法说明

 实现本地数据备份:等价于cp
    Local:  rsync [OPTION...] SRC... [DEST]
	src:需要备份的数据信息
	dest:备份到什么路径中
 
	实现远程的方式备份:类似scp(全量备份)
    Access via remote shell:
    Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
	[USER@]: 以什么用户身份登录到远程主机,默认以当前登录用户身份登录远程主机
	HOST:    远程主机IP地址或者主机名称信息
	SRC:     需要拉取的远程主机数据信息
	dest:    数据保存到本地主机的路径信息
    Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
	SRC:     需要推送的本地主机数据信息
	[USER@]   以什么用户身份登录到远程主机,默认以当前登录用户身份登录远程主机
	HOST:    远程主机IP地址或者主机名称信息
	DEST:    数据保存到远程主机的路径信息
 
	采用守护进程方式进行数据传输(远程方式)
    Access via rsync daemon:
    Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
          rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
    Push: rsync [OPTION...] SRC...         [USER@]HOST::DEST
	      src:  需要推送的本地主机数据信息
		  [USER@]: 输入正确认证用户信息
		  HOST:   远程主机IP地址或者主机名称信息
		  ::DEST   指定备份数据的模块信息
		  
          rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
		  
 
1. 可以实现免交互传输数据
2. 实现远程传输认证功能
3. 守护进程方式具有配置文件,满足更多企业需求
4. 控制客户端连接服务端的数量

四、rsync守护进程的部署过程

环境准备:

服务端IP:10.0.0.101 LAN区段:172.16.0.101

客户端IP:10.0.0.103 LAN区段:172.16.0.103

服务端部署流程:
###############———— 先优化————########################
1.安装操作系统
2.修改主机名称
#  hostnamectl set-hostname  rsync
 
3.关闭SElinux
#  sed -i '7c SELINUX=disabled' /etc/selinux/config
#  getenforce 0
 
4.关闭防火墙
#  systemctl stop firewalld
#  systemctl disable firewalld
 
5.修改默认YUM源
启用epel软件源 ————  yum -y install epel-release
阿里源 ——   
# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
阿里源 ——   
# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
 
6.修改文件最大描述符
#  vim /etc/security/limits.conf
* soft nofile 102400
* hard nofile 104800
 
7.安装常用软件
yum install -y tree   vim wget  bash-completion  bash-completion-extras  lrzsz  net-tools sysstat  iotop iftop htop unzip nc nmap telnet bc  psmisc httpd-tools  bind-utils nethogs
 
8.关闭networkmanger
#  systemctl stop NetworkManager
#  systemctl disabled NetworkManager
 
9.增加网卡
  通过设置增加一块网卡
  修改系统网卡配置
  复制eth0网卡配置修改名称为eth1 进行修改配置
#上一步会有坑,添加lan区段以后不能上网,注意检查两块网卡的mac地址是否调换了#
# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1
 
10.准备backup服务器修改IP地址
#  sed -i 's#100#41#g' /etc/sysconfig/network-scripts/ifcfg-eth{0,1} 
 
###############—— 优化完毕 ———###############################
第1个历程:确认软件是否安装
	#  rpm -qa rsync
	#  yum install -y rsync
第2个历程:编写配置文件
#  vim /etc/rsyncd.conf(下面的内容复制后去除#号备注信息与空格信息。tab键的空格都不能有,否则写入文件里会报错)
#    
uid = rsync              ###-- rsync进程是使用rsync用户身份运行
gid = rsync              ###-- rsync进程是属于rsync用户组
port = 873           ###-- rsync守护进程服务默认端口号是873         
fake  super = yes    ###--不用root用户身份也可以存储完整的数据以及数据属性
use chroot = no          ###-- 安全选项-关闭--固定在某一个目录中
max connections = 200   ###-- 最大的连接数
timeout = 300           ###-- 设置连接的超时时间、单位是:    秒
ignore errors           ###-- 忽略错误,提高传输数据效率
read only = false        ###-- 设置备份目录是可读可写
list = false              ###--不给客户端看服务端的仓库信息
auth users = rsync_backup       ###--自行定义的家用户(不存在于系统中)
secrets file = /etc/rsync.passwd  ###--存储假用户的密码(格式:username:password)
log file = /var/log/rsyncd.log    ###--- 服务的日志文件
pid file = /var/run/rsyncd.pid  ###---pid文件位置
#hosts allow = 172.16.1.0/24     ###-- 白名单(允许指定网段或者主机)
#hosts deny = 0.0.0.0/32         ###-- 黑名单(拒绝指定网段或者主机)
####################################
[backup]                       ###--模块名称
comment = welcome to backup server  ###--描述的意思 
path = /backup                 ###--模块名称对应的具体目录 
######################################################
###--以上内容粘贴保存后用cat -A 检查一下---###
######################################################
 
第3个历程:创建备份目录管理用户
	#   useradd rsync -s /sbin/nologin -M
第4个历程:创建认证密码信息,并修改权限(如果文件权限是644,在备份的时候会报错)
	# echo "rsync_backup:1" >/etc/rsync.passwd
	# chmod 600 /etc/rsync.passwd
第5个历程:创建备份目录,并修改目录权限
	# mkdir -p /backup
	# chown -R rsync.rsync /backup/
第6个历程:启动备份服务
	systemctl start rsyncd
	systemctl enable rsyncd
	 
第7个历程:测试
#  rsync -avz /etc/hosts rsync_backup@10.0.0.31::backup      (推送—PUSH、把服务端的/etc/hosts文件推送到客户端rsync-backup用户的/backup/下面)
 
#  rsync -avz  rsync_backup@10.0.0.41::backup /mnt          (拉取—PULL、把客户端的backup目录及目录下的内容拉取到服务端的/mnt/下面)
 
============================================
	所有服务端部署流程:
	01. 软件部署安装
	02. 软件配置文件编写
	03. 软件环境准备(目录 文件 用户信息)
	04. 将服务进行启动 systemctl start/enable
	05. 进行服务程序验证
============================================

五、客户端部署流程:

第1个历程:创建密码文件,并修改权限
	# echo 1  >/etc/rsync.passwd
	# chmod 600 /etc/rsync.passwd
    
第2个历程:实现免交互传输数据
rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd

六、rsync守护进程模式常见问题:

1. 防火墙阻止远程备份
2. 命令语法格式不正确
3. 认证信息不正确(用户名 密码)
4. 客户端模块名称要写正确
5. 备份目录权限设置不正确
6. 备份目录需要提前创建好
7. 备份目录管理用户必须存在
8. 备份传输数据比较慢  (DNS反向解析 已知IP,解析出名称)
9. 服务端服务必须启动

七、 rsync命令参数说明

-v--verbose       ## 详细模式输出,传输时的进度等信息、文件数量等
-z--compress   ## 传输时进行压缩以提高传输效率,
-a--archive       ## 归档参数,并保持所有文件属性,等于- -r、t、o、p、g、D、l
-r--recursive   ## 对子目录以递归模式,即目录下的所有目录都同样传输(注意是小写r)
-t--times        ## 保持文件时间信息不变(mtime)
-o--owner        ## 保持文件属主信息
-g--group        ## 保持文件属组信息
-p--perms        ## 保持文件权限
-P--progress        ## 显示同步的过程及传输时的进度等信息
-D--devices         ## 保持设备文件信息 b c s
-l--links         ## 保留软链接(小写字母l)  没什么用
-L--copy-links   ## 将链接文件源文件内容进行传输复制
-e--rsh=COMMAND    ## 使用的信道协议(remote shell),指定替代rsh的shell程序。
--exclude=PATTERN    ## 指定排除不需要传输的文件信息
--exclude-from=file    ## 文件名所在的目录文件,即可以实现排除多个文件
--bwlimit=RATE       ## limit I/O bandwidth; KBytes per second
                   ## limit socket I/O bandwidth限速功能
                   ## 案例:某DBA做数据同步,带宽占满,导致用户无法访问网站  git                        
--delete(慎用)    让目标目录SRC和源目录数据DST一致,即无差异同步数据。
	                    我有什么,你就有什么
						我没什么,你也不能有
	 补充:如何保证备份的数据属主和属组信息不变
	 方法一:增加模块
	 不同用户向不同模块传输数据
	 方法二:修改配置文件uid信息
	 uid = root
	 gid = root
	 #fake super = yes
	 备份目录属主属组需要修改为 root权限

八、rsync应用场景——定时任务+ rsync(服务)

1. 编写脚本:
#  vim /server/scripts/bak-all.sh
#!/bin/bash
TIME=$(date +%F_%H)       ###---设置时间变量
IP=$(hostname -I|cut -d ' ' -f2)      ###---设置IP地址变量
#mkdir -p dir   ###---先创建目录
mkdir -p /all-backup/$IP       ###---创建以IP地址命名的目录
#code       ###---打包压缩/var/nginx/html/下的文件到/all-backup/$IP
tar zcf  /all-backup/$IP/code-$TIME.tar.gz  /var/nginx/html/
#conf      ###---打包压缩/var/spool/cron/下的文件到/all-backup/$IP
tar zcf  /all-backup/$IP/conf-$TIME.tar.gz  /etc/  /var/spool/cron/
#push  to backup server   ###---把/all-backup/下的内容推送到172.16.1.41的backup下
rsync -avPz /all-backup/  rsync_backup@172.16.1.41::backup  --password-file=/etc/rsync.passwd

2. 已知 3 台服务器主机名分别为WEB、NFS、Rsync主机信息见下表:
角色 外网 IP(NAT) 内网 IP(LAN) 主机名
WEB eth0:10.0.0.7 eth1:172.16.1.7 web01
NFS eth0:10.0.0.31 eth1:172.16.1.31 nfs01
Rsync eth0:10.0.0.41 eth1:172.16.1.41 backup
客户端需求
1,客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018‐09‐02
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018‐09‐02
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端每天凌晨 1 点定时执行该脚本
5.客户端服务器本地保留最近 7 天的数据, 避免浪费磁盘空间 
服务端需求
1.服务端部署 rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留 6 个月的备份数据,其余的全部
注意:所有服务器的备份目录必须都为/backup
建议备份的数据内容如下:

1.客户端备份实现思路,脚本每天凌晨 01 点定时执行一次(打包->标记->推送->保留最近 7 天的文件)
[root@nfs ]# cat /server/scripts/client_rsync_backup.sh
 
#!/usr/bin/bash
#1.定义变量 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin Host=$(hostname)
Addr=$(ifconfig eth1|awk 'NR==2{print $2}') Date=$(date +%F) Dest=${Host}_${Addr}_${Date}
Path=/backup
#2.创建备份目录
[ ‐d $Path/$Dest ] || mkdir ‐p $Path/$Dest
#3.备份对应的文件 cd / && \
[ ‐f $Path/$Dest/system.tar.gz ] || tar czf $Path/$Dest/system.tar.gz etc/fstab etc/rsyncd.conf && \ [ ‐f $Path/$Dest/log.tar.gz ] || tar czf $Path/$Dest/log.tar.gz  var/log/messages var/log/secure && \
#4.携带 md5 验证信息
[ ‐f $Path/$Dest/flag ] || md5sum $Path/$Dest/*.tar.gz >$Path/$Dest/flag_$Date
#5.推送本地数据至备份服务器 export RSYNC_PASSWORD=kirin
rsync ‐avz $Path/ rsync_backup@172.16.1.41::backup
#6.本地保留最近 7 天的数据
find $Path/ ‐type d ‐mtime +7|xargs rm ‐rf
 
1.1测试
#  for i in {1..30};do date -s 2021/10/$i ;sh/server/scripts/client_rsync_backup.sh;done
#  测试完记得修改回系统的时间
#  ntpdate ntp.aliyun.com
 
2. 客户端编写定时任务,让备份每天凌晨 1 点执行
[root@nfs01 ]# crontab ‐l
00 01 * * * /bin/bash /server/scripts/backup_rsync.sh &>/dev/null
 
 
3.服务端校验客户端推送数据的完整性,   (校验->存储校验结果->将保存的结果通过邮件发送给管理员->保留最近
180 天的数据)
3.1.服务端配置邮件功能
[root@backup /]#  yum install mailx ‐y 
[root@backup /]#  vim /etc/mail.rc 
set from=552408925@qq.com
set smtp=smtps://smtp.qq.com:465 
set smtp‐auth‐user=552408925@qq.com set smtp‐auth‐password=#客户端授权码 set smtp‐auth=login
set ssl‐verify=ignore
set nss‐config‐dir=/etc/pki/nssdb/
 
 
3.2.服务端校验、以及邮件通知脚本
[root@backup ~]#  mkdir /server/scripts ‐p 
[root@backup ~]#  vim /server/scripts/check_backup.sh
#!/usr/bin/bash
#1.定义全局的变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#2.定义局部变量 
Path=/backup Date=$(date +%F)
#3.查看 flag 文件,并对该文件进行校验, 然后将校验的结果保存至 result_时间
find $Path/ ‐type f ‐name "flag_$Date"|xargs md5sum ‐c >$Path/result_${Date}
#4.将校验的结果发送邮件给管理员
mail ‐s "Rsync Backup $Date" 1224256589@qq.com </server/scripts/check_backup.sh
#5.删除超过 7 天的校验结果文件, 删除超过 180 天的备份数据文件 
find $Path/ ‐type f ‐name "result*" ‐mtime +7|xargs rm ‐f find $Path/ ‐type d ‐mtime +180|xargs rm ‐rf
 
 
4.服务端编写定时任务脚本
[root@backup backup]#  crontab ‐l
00 05 * * * /bin/bash /server/scripts/check_backup.sh &>/dev/null

九、rsync守护进程企业应用

总结:排除的路径信息,需要编写为指定目录的相对路径
	常见错误:
	1. 排除参数后面数据信息,不能写绝对路径
	2. 排除参数后面数据信息,不能写相对路径
	3. 排除的数据量比较大,有多个目录,多个文件都要排除
	4. 守护进程来创建备份目录(全网备份项目)
	5. 补充:rsyncd.conf文件中全局配置和局部配置
	全局配置:模块以上的配置信息 影响全部模块
	局部配置:模块以下的配置信息 只影响当前模块  
	总结:局部配置优先于全局配置
posted @ 2022-06-05 11:33  kirin(麒麟)  阅读(261)  评论(0编辑  收藏  举报
Δ