rsync复制软件应用与实践
1、什么是rsync?
rsync,Rsync英文全称为Remote synchronization 缩写rsync
是开源、高速的、可实现本地以及远程,全量以及增量的数据复制(拷贝)工具。
2、全量和增量区别
全量复制:
[root@nfs01 ~]# cp -a /etc/ /opt/
[root@nfs01 ~]# \cp -a /etc/ /opt
[root@nfs01 ~]# touch /etc/oldboy.txt
[root@nfs01 ~]# \cp -a /etc/ /opt/
增量复制:
只复制oldboy.txt,是使用tsync -avz 源文件 rsynv_backup@主机IP::备份目录
3、rsync的作用
工作中需要定时/实时数据备份。本地服务器目录、不同机器、
不同机房之间的数据备份。都可以用rsync完成。
4、rsync功能特性
支持拷贝普通文件与特殊文件,如链接文件,设备文件等。
支持排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变。
可实现增量复制,既只复制发生变化的数据,因此数据传输效率很高。
可以使用rcp,rsh,ssh等方式来配合进行隧道加密传输文件(rsync本身不对数据加密)。
可以通过socket(进程方式)传输文件和数据(服务端和客户端)*。
支持匿名或认证(无需系统用户)进程模式传输,安全的进行数据备份及镜像
5、增量复制原理
使用 quick check算法,只对增量的部分复制,根据大小属性的变化进行复制。
2.x比对差异后复制,3.x一边比对一边复制。
https://coolshell.cn/articles/7425.html
6、rsync三种工作模式介绍
1)本地(local)
rsync就是一个命令
rsync [OPTION...] SRC... [DEST]
rsync命令 参数选项 [源目录或文件] 目的目录或文件
2)远程Shell模式
借助类似ssh隧道传输数据,适合不同的机器之间复制。
异地拷贝,相当于scp,区别scp是远程全量拷贝)
拉门 推门 思考:
pull,拉:从远端拉取到本地。
语法:
rsync [OPTION...] [USER@]HOST:SRC... [DEST]
rsync命令 参数选项 [认证用户]@[主机地址]:[源路径] 本地路径
语法:
push,推:从本地推到远端。
rsync [OPTION...] SRC... [USER@]HOST:[DEST]
rsync命令 参数选项 本地路径 [认证用户]@[主机地址]:[目标路径]
3)rsync守护进程模式
首先要搭建rsync服务端(要有守护进程),然后才能在客户端实现推拉数据。
企业运维的重要模式,重点讲。
7、rsync命令参数
rsync命令参数:
-v, --verbose 显示输出过程
-z, --compress 压缩
-a, --archive 多参数集合(-rtopgDl)
-r, --recursive 递归
-t, --times 保持修改时间属性
-o, --owner 保持属主不变
-p, --perms 保持权限不变
-g, --group 保持用户组不变
-l, --links 保持拷贝软连接
-q, --quiet 安静的拷贝
--bwlimit=KBPS 限制I/O带宽,KBytes per second。
--delete 删除
--exclude 排除
--exclude-from 从文件中排除
企业常用参数组合:-avz或者-vzrtopg
8、rsync守护进程模式应用实践
以下操作都是在backup服务器
第一个历程:安装部署软件
yuminstall rsync -y
rpm -qa rsync
rpm -ql rsync
第二个历程:编写配置文件
注:只要是守护进程服务,都会存在配置文件
vim/etc/rsyncd.conf
uid = rsync --管理备份目录(属主信息是rsync)
gid = rsync --管理备份目录(属组信息是rsync)
port = 873 --守护进程服务端口信息
fake super = yes --伪装成超级用户
use chroot = no --安全的配置
max connections = 200 --同时可以有多少客户端连接rsync服务
timeout = 300 --超时时间,显示空闲连接存活时间
pid file = /var/run/rsyncd.pid --保存进程pid号码信息
lock file = /var/run/rsync.lock --真正的限制同时的连接数
log file = /var/log/rsyncd.log --rsync程序日志文件
ignore errors --在备份传输数据时,一些不严重问题先忽略
read only = false --备份目录设置为可读可写
list = false --不显示模块
hosts allow = 172.16.1.0/24 ---设置允许哪些主机或网段可以向
hosts deny = 0.0.0.0/32 ---设置禁止哪些主机或网段可以向
auth users = rsync_backup ---认证用户
secrets file = /etc/rsync.password ---认证用户密码文件(信息
[backup] ---模块信息
comment = "backup dir by
oldboy"--- 模块注释说明信息
path = /backup ---定义一个备份目录
uid= rsync
gid= rsync
port= 873
fakesuper = yes
usechroot = no
maxconnections = 200
timeout= 300
pidfile = /var/run/rsyncd.pid
lockfile = /var/run/rsync.lock
logfile = /var/log/rsyncd.log
ignoreerrors
readonly = false
list= false
hostsallow = 172.16.1.0/24,10.0.0.0/24
authusers = rsync_backup
secretsfile = /etc/rsync.password
[backup]
comment= "backup dir by oldboy"
path= /backup/
hostsallow = 172.16.1.0/24
[backup_dev]
comment= "backup dir by oldboy"
path= /backup_dev
hostsallow = 10.0.0.0/24
[backup_dba]
comment= "backup dir by oldboy"
path= /backup_dba
第三个历程:创建一个rsync虚拟用户
useradd rsync -s /sbin/nologin -M#禁止登陆,没有家目录为虚拟用户
第四个历程:创建备份目录
mkdir/backup
chownrsync.rsync /backup
第五个历程:创建认证密码文件
echo “rsync_backup:12345” >/etc/rsync.password
chmod600 /etc/rsync.password
第六个历程:重启rsync服务
systemctl start rsyncd
systemctl enable rsyncd
rsync客户端(nfs)
1、首先安装rsync软件
yum install rsyncd -y
2、创建认证密码文件
echo“oldboy”>/etc/rsync.password
chown 600 /etc/rsync.password
3、重启并系统自启rsync服务
systemctl start rsyncd 开启rsync服务
systemctl restart rsyncd 重启rsync服务
systemctl enable rsyncd 开机自启rsync服务
systemctl status rsyncd 查看rsync是否开机自启
4、进行传输测试
rsync-avz /etc/hosts [email protected]::backup
==================================================================================================================
一、实践排除复制:
1)NFS01:--exclude 排除参数
[root@nfs01 ~]# mkdir /data -p
[root@nfs01 ~]# cd /data
[root@nfs01 /data]# touch {a..d}
[root@nfs01 /data]# ls
a b c d
例:排除 a b
[root@nfs01 /data]# rsync -avz /data/ --exclude=a --exclude=b [email protected]::backup
sending incremental file list
./
c
d
2)--exclude-from 从文件排除
[root@nfs01 /data]# rsync -avz /data/ --exclude-from=./paichu.txt [email protected]::backup
sending incremental file list
./
16
17
18
19
20
paichu.txt
上述文件中seq 15 >paichu.txt
3)实践删除:
rsync作为镜像,相当于raid1,让两台服务器目录保持一致。
--delete 让两台服务器目录保持一致
推送:
rsync -avz --delete /data/ [email protected]::backup
本地目录有啥,远端就有啥。
注意:远端目录是不是东西更多,多了东西会被删除。提前备份backup对应的目录。
rsync -avz --delete [email protected]::backup /data/
远端有啥。本地目录就有啥,注意本地/data目录。把/data改成根。提前注意备份本地/data
--partial 支持大文件断点续传
--bwlimit=KBPS 限速。
二、在 配置文件/etc/rsyncd.conf增加心的备份目录
1)末端增加
[data] #<==新模块。
path = /data/ #<==新备份目录。
#除了增加以上两行外,读者也可以设定更多的独立配置参数,例如:独立虚拟用户,独立密码文件等。
2)建立目录并授权。
[root@backup ~]# mkdir -p /data
[root@backup ~]# chown -R rsync.rsync /data
[root@backup ~]# ls -ld /data
drwxr-xr-x 2 rsync rsync 6 4月 16 10:04 /data
3)重启rsync服务(只要修改配置,就考虑重载服务)
[root@backup ~]# systemctl restart rsyncd
4)从客户端访问测试
[root@backup ~]# ls /data
etc
三、企业案例
具体备份需求
所有服务器的备份目录必须都为/backup 要备份的系统配置文件包括但不限于: a) 定时任务服务的配置文件 (/var/spool/cron/root) (适合 web 和 nfs 服 务器) 。 b) 开机自启动的配置文件 (/etc/rc.local) (适合web 和 nfs 服务器) 。
c) 日常脚本的目录 (/server/scripts)。 Web 服务器站点目录假定为/var/html/www,如果没有可以先模拟创建。 Web 服务器访问日志路径假定为/app/logs,如果没有可以先模拟创建。 Web 服务器本地保留打包后的 7 天备份数据即可(本地留存不能多于 7 天, 因为太多硬盘会满) 。 备份服务器 backup 上,保留最近 7 天的备份数据,同时保留 6 个月内每周一 的所有数据副本。 备份服务器上,要按照备份数据服务器的内网 IP 为目录保存备份,备份的文 件按照时间名字保存。 需要确保备份的数据尽量完整正确,在 备份服务器上对备份的数据是否完整 进行检查。
每天早晨 8:00 把备份成功或失败结果信息发给系统管理员邮箱中。
第一个里程碑:
41搭建好rsync服务,并在31、7上测试成功。
第二个里程碑 开发脚本打包备份
/backup 备份目录
/var/spool/cron/root /etc/rc.local /server/scripts /var/html/www /app/logs 需要备份的内容
模拟创建:
[root@nfs01 ~]# mkdir -p /server/scripts
[root@web01 ~]# mkdir -p /server/scripts /var/html/www /app/logs
web01:
[root@web01 ~]# mkdir -p /backup
[root@web01 ~]# ls -ld /backup/
drwxr-xr-x 2 root root 6 4月 16 11:36 /backup/
[root@web01 /]# tar zcvhf /backup/bak_$(date +%F_%w).tar.gz /var/spool/cron/root /etc/rc.local /server/scripts /var/html/www /app/logs
tar: 从成员名中删除开头的“/”
/var/spool/cron/root
/etc/rc.local
/server/scripts/
/var/html/www/
/app/logs/
[root@web01 /]# ls /backup/
bak_2019-04-16_2.tar.gz
写脚本:
[root@web01 /]# mkdir /server/scripts/ -p
[root@web01 /]# cd /server/scripts/
[root@web01 /server/scripts]# cat /server/scripts/bak.sh
[root@web01 /server/scripts]# cat bak.sh
#!/bin/sh
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
export RSYNC_PASSWORD=oldboy
IP=$(hostname -i)
mkdir -p /backup/$IP
#1.打包
tar zchf /backup/$IP/bak_$(date +%F_%w).tar.gz /var/spool/cron/root /etc/rc.local /server/scripts /var/html/www /app/logs &>/dev/null &&\
#2.删除
find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f &&\
#3.推送
rsync -az /backup/ [email protected]::backup &>/dev/null
[root@web01 /server/scripts]# /bin/sh /server/scripts/bak.sh
[root@web01 /server/scripts]# ls /backup/
bak_2019-04-16_2.tar.gz
定时任务:
[root@web01 /server/scripts]# crontab -e
[root@web01 /server/scripts]# crontab -l|tail -2
######back.....
00 00 * * * /bin/sh /server/scripts/bak.sh >/dev/null 2>&1
[root@web01 /server/scripts]# find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f
确保备份完整。
做flag和采集指纹
[root@nfs01 /server/scripts]# #采集人的指纹
[root@nfs01 /server/scripts]# md5sum oldboy.txt >zhiwen.log
[root@nfs01 /server/scripts]# cat zhiwen.log
348bd3ce10ec00ecc29d31ec97cd5839 oldboy.txt
[root@nfs01 /server/scripts]# #校验
[root@nfs01 /server/scripts]# md5sum -c zhiwen.log
oldboy.txt: 确定
[root@web01 /server/scripts]# cat bak.sh
#!/bin/sh
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
export RSYNC_PASSWORD=oldboy
IP=$(hostname -i)
mkdir -p /backup/$IP
#1.打包
tar zchf /backup/$IP/bak_${IP}_$(date +%F_%w).tar.gz /var/spool/cron/root /etc/rc.local /server/scripts /var/html/www /app/logs &>/dev/null &&\
touch /backup/$IP/bak_${IP}_$(date +%F_%w).flag &&\
#采集指纹
find /backup/ -type f -name "*.tar.gz"|xargs md5sum >/backup/$IP/bak_${IP}_$(date +%F_%w).flag &&\
#2.删除
find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f &&\
#3.推送
rsync -az /backup/ [email protected]::backup &>/dev/null
================================================================================================================================
1.1什么是NFS
NFS是Networt Flie System的缩写,中文意思是网络文件系统。它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。NFS客户端(一般微应用服务器,例如Web)可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录。
NFS网络文件系统很想Windows系统的网络共享、安全功能、网络驱动器映射,这也与Linux系统的里的samba服务类似。只不过一般情况下,Windows网络共享服务或samba服务用于办公局域网共享,而互联网中小网站集群架构后端常用NFS进行数据共享,如果是大型网络,那么有可能还会用到更复杂的分布式文件系统。
1.2 为什么要共享储存
当集群中没有NFS共享存储时,用户访问图片的情况如图1.1所示。
例如:A用户传图片到Web1服务器,然后让B用户访问这张图片,结果B用户访问的请求分发到了Web2,因为Web2上没有这张图片,这就导致它无法看到A用户上传的图片。
如果集群中有NFS共享存储,用户访问图片的情况如图1.2所示。
如果如图所示有一个共享存储,A用户上传图片的请求无论是分发到Web1还是Web2上,最终都会存储到共享存储上,而在B用户访问图片时,无论请求分发到Web1还是Web2上,最终也都会去共享存储上找,这样就可以访问到需要的资源了。
2什么是RPC
因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS的功能所对应大的端口无法固定。
要解决上面的困扰,就需要通过远程过程调用RPC服务来帮忙,NFS的RPC服务最主要的功能就是记录每个NFS功能所对应的端口号,并且在NFS客户端请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,从而确保客户端可以连接到正确的NFS端口上去,达到实现数据传输交互数据目的。这个RPC服务类似NFS服务端和NFS客户端之间的一个中介,流程如图1.4所示。
2.1 NFS的工作原理
前文描述的整个启动过程如图1.5所示。
当访问程序通过NFS客户端向NFS服务端存取文件时,其请求流程大致如下:
1)首先yoghurt访问网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这时NFS客户端(即执行程序的服务端)的RPC服务(rpcbind服务)就会通过网络向NFS服务端的RPC服务的111端口发出NFS文件存取功能的询问请求。
2)NFS服务器端的RPC服务找到对应的已注册的NFS端口后,通知NFS客户端的RPC服务。
3)此时NFS客户端获取到的正确的端口,并与NFS daemon联机存储数据。
4)NFS客户端把数据存取成功后,返回给前端访问程序,告知用户存取结果,作为网站用户,就完成了一次存取操作。
3、NFS的安装
服务端设置
1、安装
yum install nfs-utils rpcbind -y
rpm -qa nfs-utils rpcbind
2、systemctl start rpcbind #<====打开RPC服务
systemctl enable rpcbind #<====开机自启RPC服务
3、rpcinfo -p 127.0.0.1 #<====查看RPC服务内无nfs的服务
4、 systemctl start nfs #<====开启NFS服务
systemctl enable nfs #<====开机自启NFS服务
5、rpcinfo -p 127.0.0.1 #<====查看RPC服务内有nfs的服务
6、配置nfs文件
1) /etc/exports
#oldboy shared dir at tiame
/data 172.16.1.0/24(rw,sync)
其中权限:
rw 表示可读写权限
ro 表示只读权限
sync 请求或写入数据时,数据同步写入到NFS服务器端的硬盘后才返回
7. systemctl reload nfs
exports -r
上述二者平滑重启
8、showmount -e 172.16.1.31查看配置文件/data是否生效
Export list for 172.16.1.31:
/ data 172.16.1.0/24
客户端
1、yum install nfs-utils rpcbind -y
rpm -qa nfs-utils rpcbind
2、systemctl start rpcbind #<====打开RPC服务
systemctl enable rpcbind #<====开机自启RPC服务
3、showmount -e 172.16.1.31 #<====查看NFS服务器提供的共享目录
==========================================================================================================================================================================
1、/etc/exports文件内、()权限
rw 可读写 read write
ro 只读 read only
sync 写到磁盘才算完成,安全 慢
async 异步写到远程缓冲区,快 不安全
一会再说。
all_squash※ 不管客户端什么用户,到服务端都是nfsnobody
anonuid=匿名用户的UID
anongid=匿名用户的GID
2,在/etc/fstab里挂载,NFS服务器出问题时候,客户端重启依然能够启动,可以用如下列两个方法:
defaults,soft
defaults,hard,intr
3、企业生产案例文件系统只读故障/fstab故障。
1)、救援模式修复。
单用户,mount -o remount,rw /
2)安全加优化的挂载方式如下:
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 172.16.1.31:/data /mnt
===================================================================================================================
第一种实时监控步
1、echo "exports RSYNC_PASSWORD=oldboy" >>/etc/bashrc
source /etc/bashrc
2、uname -r 查看使用这个版本
3.10.0-957.5.1.el7.x86_64
3、rsync -avz /data [email protected]::/backup 检查是否能推送
4、yum install epel-release -y 安装实时监控软件包
yum install inotify-tools -y
5、执行实时监控的脚本
#!/bin/sh
cmd="/usr/bin/inotifywait"
$cmd -mrq --format '%w%f' -e close_write,delete /data|\
while read line
do
cd /data&&\
rsync -az --delete ./ [email protected]::backup
done
6、 监控优化
echo "50000000" >/proc/sys/fs/inotify/max_user_watches
echo "50000000" >/proc/sys/fs/inotify/max_queued_events
sersync 需要安装以上步骤
1、客户端推送能成功
rsync -avz /data [email protected]::/backup
2、教师给的压缩文件
sersync_oldboy_64bit_20160928.tar.gz
3、解压文件后编辑/application/sersync/conf/confxml.xml进行调试
4、/application/application/sersync/bin/sersync -d 进行启动程序
5、将/application/application/sersync/bin/sersync -dro &挂载到/etc/rc.local