NFS +inotify+rsync 实现数据的远程挂载与实时增量备份
NFS 网络文件系统
- 功能: 用户可以像访问自己的本地文件系统一样使用网络中的远端系统上的文件
- 原理: 用户进程——>RPC服务(portman)——>tcp/ip协议栈——>远端主机RPC服务 后 ——>远端NFS服务——>远端主机本地磁盘数据——>NFS服务——>tcp/ip协议栈——>本地数据
- 优点: 易于实现前段服务器代理分流的时候处理sission以及数据查找时找不到数据等问题,且同时起到了就算任何一个web服务器宕机都不影响数据的访问
- 缺点: 单点失败 所有数据都在同一个物理主机上,一旦物理主机宕机会导致整个项目存放的数据丢失无法访问,解决办法:做基于inotify+rsync数据实时增量备份处理这个问题
NFS 搭建 ( 基于启动文件/etc/fatab 或 自动挂载autofs)
- 包:nfs-utils,rpcbind,tcp_wrappers
- linux内核需要支持nfs.ko
- 日志:/var/lib/nfs/
- 配置文件: /etc/exports ,/etc/exports.d/*.exports
- 服务开启:systemctl start nfs-server
文件格式:
- 共享文件主机:192.168.47.117
host:主机1(opt1,opt2) 主机2(opt1,opt2)
单个主机: # ipv4,ipv6,FQDN
IP networks:# 两种掩码格式均支持 172.18.0.0/255.255.0.0 172.18.0.0/16
wildcards: # 主机名通配,例如*.xiehegang.online,IP不可以
netgroups: # NIS域的主机组,@group_name
anonymous: # 表示使用*通配所有客户端
#-----------------------------------------------------------------------------------------------------------------------------
option:(ro,sync,root_squash,no_all_squash)
ro,rw # 只读和读写
async # 异步,数据变化后不立即写磁盘,性能高
sync # (1.0.0后为默认)同步,数据在请求时立即写入共享存储磁盘
root_squash # (默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,早期版本是4294967294(nfsnobody)
no_root_squash # 远程root映射成root用户
all_squash # 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody
no_all_squash # (默认)保留共享文件的UID和GID
anonuid和anongid # 指明匿名用户映射为特定用户UID和组GID,而非nfsnobody,可配合all_squash使用
#-----------------------------------------------------------------------------------------------------------------------------
# 例
/data/app1/ 192.168.47.106(ro,sync,no_all_squash)
/data/app2 192.168.47.106(rw,no_rootsquash,all_squash)
- 挂载主机 192.168.47.106
# 查看网络共享情况
showmount -e 192.168.47.117
# 创建挂载点并挂载
mkdir /data/webdata/ -pv;
mount 192.168.47.117:/data/app1 /data/webdata
# 完成文件的挂载,创建文件,在另一个主机上可以看到, 但是App2挂载点就无法创建文件,因为47.117的配置文件设置了ro
#------------------------------------------------------------------------------------------------------------------------------
# 在/etc/fatab 下实现自动挂载,防止断电导致挂载丢失,**追加**以下内容
192.168.47.117:/data/app1 /data/webdata nfs _netdev 0 0
#------------------------------------------------------------------------------------------------------------------------------
# 如果有需求也可像访问ls/msic/cd 访问光盘一样设置实时挂载,即:访问即挂载(aotofs)
# 安装autofs
yum install -y autofs
# 编辑配置文件 vi /etc/auto.misc 追加内容
nfs -fstype=nfs 192.168.47.117:/data/app1
# 开启autofs服务
systemctl start autofs
# 访问目录:
cd /msic/app1
基于inotify+rsync 实现增量备份
- 备份NFS主机:192.168.47.129
- linux内核版本: 大于2.6.13
# 修改内核参数:
vim /etc/sysctl.conf
fs.inotify.max_queued_events=66666
fs.inotify.max_user_watches=100000
# 重新应用
sysctl -p
# 查看修改情况
cat /proc/sys/fs/inotify/*
inotify-tools 工具
- inotify-tools安装工具:yum install inotify-tools (yum -y install epel-release epel源没安装的话)
- inotifywait 命令选项:
-m, --monitor # 始终保持事件监听
-d, --daemon # 以守护进程方式执行,和-m相似,配合-o使用
-r, --recursive # 递归监控目录数据信息变化
-q, --quiet # 输出少量事件信息
--exclude # 指定排除文件或目录,使用扩展的正则表达式匹配的模式实现
--excludei # 和exclude相似,不区分大小写
-o, --outfile # 打印事件到文件中,相当于标准正确输出,注意:使用绝对路径
-s, --syslogOutput # 发送错误到syslog相当于标准错误输出
--timefmt # 指定时间输出格式
--format # 指定的输出格式;即实际监控输出内容
-e # 指定监听指定的事件,如果省略,表示所有事件都进行监听
# --timefmt 格式 --------------------------------------------------------------------------------------------------------------------
%Y # 年份信息,包含世纪信息
%y # 年份信息,不包括世纪信息
%m # 显示月份,范围 01-12
%d # 每月的第几天,范围是 01-31
%H # 小时信息,使用 24小时制,范围 00-23
%M # 分钟,范围 00-59
例:--timefmt "%Y-%m-%d %H:%M"
# --format 格式 --------------------------------------------------------------------------------------------------------------------
%T # 输出时间格式中定义的时间格式信息,通过 --timefmt option 语法格式指定时间信息
%w # 事件出现时,监控文件或目录的名称信息
%f # 事件出现时,将显示监控目录下触发事件的文件或目录信息,否则为空
%e # 显示发生的事件信息,不同的事件默认用逗号分隔
%Xe # 显示发生的事件信息,不同的事件指定用X进行分隔
例:--format "%T %w%f event: %;e"
# -e 格式 --------------------------------------------------------------------------------------------------------------------
create # 文件或目录创建
delete # 文件或目录被删除
modify # 文件或目录内容被写入
attrib # 文件或目录属性改变
close_write # 文件或目录关闭,在写入模式打开之后关闭的
close_nowrite # 文件或目录关闭,在只读模式打开之后关闭的
close # 文件或目录关闭,不管读或是写模式
open # 文件或目录被打开
moved_to # 文件或目录被移动到监控的目录中
moved_from # 文件或目录从监控的目录中被移动
move # 文件或目录不管移动到或是移出监控目录都触发事件
access # 文件或目录内容被读取
delete_self # 文件或目录被删除,目录本身被删除
unmount # 取消挂载
例: -e create,delete,moved_to,close_write, attrib
inotify 完整使用范例
# 监控一次性事件
inotifywait /data
# 持续前台监控
inotifywait -mrq /data
# 持续后台监控,并记录日志
inotifywait -o /root/inotify.log -drq /data --timefmt "%Y-%m-%d %H:%M" --format
"%T %w%f event: %e"
# 持续前台监控特定事件
inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f event: %;e" -e
create,delete,moved_to,close_write,attrib
rsync 实现增量备份
- 包 rsync
- 服务文件:/usr/lib/systemd/system/rsyncd.service
- 配置文件:/etc/rsyncd.conf
- 端口:873/tcp
- 格式:rsync [OPTION...] SRC... [DEST]
rsync有三种工作方式:
1. 本地文件系统上实现同步。命令行语法格式为上述"Local"段的格式。
2. 本地主机使用远程shell和远程主机通信。命令行语法格式为上述"Access via remote shell"段的格
式。
3. 本地主机通过网络套接字连接远程主机上的rsync daemon。命令行语法格式为上述"Access via
rsync daemon"段的格式。
本例使用独立方式运行rsync 实现同步
- 以独立服务方式运行 rsync (192.168.47.117)
# 安装
yum -y install rsync
#创建rsync服务器的配置文件
vi /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 0
ignore errors
exclude = lost+found/
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
reverse lookup = no
hosts allow = 192.168.47.0/24
[backup]
path = /backup/
comment = backup
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass
# 服务器端准备目录
cd /; mkdir /backup
# 服务器端生成验证文件
echo "rsyncuser:justin" > /etc/rsync.pass
chmod 600 /etc/rsync.pass
#启动服务
/usr/bin/rsync --daemon ,rsync --daemon
- 备份服务器 192.168.47.129
#客户端配置密码文件
echo "justin" > /etc/rsync.pass
chmod 600 /etc/rsync.pass
#客户端测试同步数据
rsync -avz --delete --password-file=/etc/rsync.pass /data/app1 rsyncuser@192.168.47.117::/backup
创建脚本文件,实现实时拉取,基于inotify + rsync
vim /etc/profile.d/bf.sh
#!/bin/bash
SRC='/data/app'
DEST='rsyncuser@192.168.47.117::backup'
inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e
create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR
FILE;do
FILEPATH=${DIR}${FILE}
rsync -az --delete --password-file=/etc/rsync.pass $SRC $DEST && echo
"At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >>
/var/log/changelist.log
done
. /etc/profile.d/bf.sh
最终效果
服务器 47.106 的/data/webdata 的文件实际位置为 47.117 的/data/app1,
服务器 47.129 备份 47.117 /data/app1 的数据到本地的/backup文件夹下
当然这是本人的实验,可能会有过程中错误,如有发现欢迎评论,谢谢~
NFS +inotify+rsync 实现数据的远程挂载与实时增量备份的更多相关文章
- rsync 实现实时增量备份
Rsync + Crontab实现定时文件同步(首次全量+后续增量) 2015-04-14 19:02:11 标签:增量更新 rsync crontab 原创作品,允许转载,转载时请务必以超链接形式标 ...
- sersync+rsync进行数据同步
一:环境 操作系统环境:redhat6.6 内核版本:2.6.32-358.el6.x86_64 rsync server:192.168.2.3(部署rsync server) rsync clie ...
- 项目cobbler+lamp+vsftp+nfs+数据实时同步(inotify+rsync)
先配置好epel源 [root@node3 ~]#yum install epel-release -y 关闭防火墙和selinux [root@node3 ~]#iptables -F [root@ ...
- (openssh、telnet、vsftpd、nfs、rsync、inotify、samba)
(openssh.telnet.vsftpd.nfs.rsync.inotify.samba) 一:OpenSSH服务与Telnet服务(必须掌握) 前言:OpenSSH是加密传输,Telnet是明文 ...
- rsync+inotify实现服务器数据同步
一.什么是rsync rsync,remote synchronize是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限.时间.软硬链接等附加信息.rsync是用 “rsync算 ...
- Linux下配置nfs并远程挂载实战探讨
简单介绍: nfs是网络文件系统,允许一个节点通过网络访问远程计算机的文件系统,远程文件系统可以被直接挂载到本地,文件操作和本地没有区别,如果是局域网的nfs那么io的性能也可以保证 nfs是Netw ...
- CentOS 6.5 rsync+inotify实现数据实时同步备份
CentOS 6.5 rsync+inotify实现数据实时同步备份 rsync remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的.数据在内存缓存区完成之后还没有写入到磁盘 ...
- inotify和rsync实现数据实时同步
数据的实时同步 实现实时同步 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 发现目录中数据产生变化,就利用rsync服务推送到备份服务器上 实现实时同步的方法 ino ...
- Linux系统实时数据同步inotify+rsync
一.inotify简介 inotify是Linux内核的一个功能,它能监控文件系统的变化,比如删除.读.写和卸载等操作.它监控到这些事件的发生后会默认往标准输出打印事件信息.要使用inotify,Li ...
随机推荐
- Spring Boot 2.0 集成 Druid 数据源
一.Maven项目依赖 <!-- 开发者工具(热部署 修改classpath下的文件springboot自动重启) --> <dependency> <groupId&g ...
- composer install与composer update的区别
1.composer install install 命令从当前目录读取 composer.json 文件,处理了依赖关系,并把其安装到 vendor 目录下. php composer.phar i ...
- 在centos卸载mysql
1 rpm -qa|grep mysql 查看安装了哪些mysql和lib…… 1 yum remove mysql mysql-server mysql-libs compat-mysql51 删除 ...
- python3 速查参考- python基础 8 -> 面向对象基础:类的创建与基础使用,类属性,property、类方法、静态方法、常用知识点概念(封装、继承等等见下一章)
基础概念 1.速查笔记: #-- 最普通的类 class C1(C2, C3): spam = 42 # 数据属性 def __init__(self, name): # 函数属性:构造函数 self ...
- linux常用命令---------------find
1.find 基本模式 find path -option [ -print ] [ -exec -ok command ] {} \; 2.常用的参数 -name name, -iname name ...
- git 命令 git diff 查看 Git 区域文件的具体改动
查看 Git 区域文件的具体改动 git diff git status 只能让我们知道文件在 Git 区域内的改动状态,但如果我们想查看某个文件内具体改了什么(也可以理解为在不同 Git 区域中的差 ...
- python-第五章习题
5.2 def isOdd(x): if(x%2==0): return False return True x=eval(input("")) print(isOdd(x)) 5 ...
- Oracle-DQL 4- 多表查询
多表查询: 1.笛卡尔积SELECT * FROM dept;--查询员工的信息和其所在部门的信息SELECT ename,job,dname,locFROM emp,dept; --集合A中的所有元 ...
- Excel输入公式后只显示公式却不计算如何解决?
在使用Excel函数公式的时候,您是否碰到过输入公式,按下Enter键之后,单元格仍只显示公式,而不显示计算结果. 工具/原料 Excel 教程以Excel2013为例 方法/步骤 教 ...
- linux的安装和配置
转载:https://www.cnblogs.com/hhaahh/p/10404093.html 1.VMware简介 此软件是一个虚拟的pc机软件,可以在现有操作系统中虚拟出一个新的硬件环境,以此 ...