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文件中全局配置和局部配置
全局配置:模块以上的配置信息 影响全部模块
局部配置:模块以下的配置信息 只影响当前模块
总结:局部配置优先于全局配置
本文来自博客园,作者:kirin(麒麟),转载请注明原文链接:https://www.cnblogs.com/kirin365/articles/16343647.html