NFS做文件服务层详解

一、可用方案

NFS主———-rsync+inotify实时同步—————NFS备

问题:故障切换需要人为参与

DRBD+HeartBeat+NFS高可用文件服务器

特点:解决了单点故障、故障可以自动切换

问题:性能不足

兼顾:性能+高可用+数据安全性 ====》 分布式存储

ceph

MFS

Gluster

二、NFS

network file system:网络文件系统

网络存储可以分为三大类:

1、文件存储:对外提供的文件 —-》NFS

2、块存储:对外提供一个块设备(就是一块裸盘)

ceph可以提供块存储

3、对象存储:存储数据的单位是一个个的对象

三、NFS架构图

CS架构

服务端:/etc/exports

/data 192.168.71.0/24(rw,all_squash)

客户端:

mount -t nfs 服务端ip地址:/data /本地路径

客户端使用

读写数据————》/本地路径 —————–》nfs数据源

四、nfs使用详解

服务端

环境初始化

关selinux、防火墙

yum install nfs-utils rpcbind -y

配置:/etc/exports

/data 192.168.71.0/24(rw,sync,all_squash)

创建目录

mkdir /data

启动服务

systemctl start nfs-server

客户端

环境初始化

关selinux、防火墙

yum install nfs-utils rpcbind -y

all_squash

anonuid 666

anongid 666

五、制作nfs的备份/镜像机

方案一:

rsync+inotify

inotify:帮们检测一个文件下的变动,一旦该文件夹下有变动,都可以检测到

rsync:帮我们把变动文件同步到远程的备份机上

方案二:

sersync=rsync+inotify的封装

缺点:

故障切换要人手动完成

六:rsync的使用

yum install rsync -y

rsync命令即可以当客户端又可以当服务端

当客户端时:

优点:

1、rsync涵盖了scp、cp二者功能,即rsync同时支持本地拷贝与远程拷贝

2、scp与cp每次拷贝都是全量的,而rsync是增量的

3、scp远程传输不支持断电续传,而rsync支持

4、灵活性、可配置型强

缺点:

1、命令行选项复杂

2、本身没有检测文本何时变化的能力

3、对cpu消耗比较大

服务端:

rsync –deamon #systemctl start rsyncd

对比:

scp —————-ssh协议—————–》sshd

rsync

rsync—————-ssh协议—————–》sshd

rsync /a.txt 系统账号@1.1.1.111:/test

rsync—————-rsync协议—————–》rsyncd

rsync /a.txt 虚拟账号@1.1.1.111::模块名

rsync——————–ssh协议—————————–>sshd服务

要求服务端必须开启sshd服务(默认都是开启的)

基于ssh协议通信的话:

1、使用的账号是系统账号

2、ssh协议支持密码登录、密钥登录

用法与scp非常像

#1、上传/推送push

scp -r /aaa root@192.168.71.115:/bbb

#2、下载/拉取pull

scp -r root@192.168.71.115:/bbb /aaa

#1、上传/推送push

rsync -avz /aaa root@192.168.71.115:/bbb

#2、下载/拉取pull

rsync -avz root@192.168.71.115:/bbb /aaa

指定端口

scp -r -P 2222 root@192.168.71.115:/bbb /aaa

rsync -avz -e ‘ssh -p 2222’ root@192.168.71.115:/bbb /aaa

注意点:

1、虽然服务端启动的服务是sshd而不是rsyncd,但也必须安装rsync

2、scp是全量传输(内部有优化机制),rsync都是增量传输

rsync——————–rsync协议—————————–>rsyncd服务(rsync –deamon)

与ssh协议的区别是,基于rsync协议传输采用的是虚拟用户,而不是系统用户

1、客户端与服务端都需要做

关selinux、防火墙

yum install rsync -y

2、配置服务端

配置文件见博客

3、做好准备工作

useradd rsync -s /sbin/nologin -M

[root@nfs ~]# cat /etc/rsync.passwd

egon:123

[root@nfs ~]# chmod 600 /etc/rsync.passwd

4、启动服务

systemctl start rsyncd

虚拟用户egon——————-》系统用户rsync———–》操作xxx下的文件夹/egon_bak1

5、修改模块目录的属主与属组

chown rsync.rsync /egon_bak1

chown rsync.rsync /egon_bak2

6、测试使用

rsync -avz /aaa/1.txt egon@192.168.71.115::xxx/111.txt

rsync -avz /aaa/1.txt egon@192.168.71.115::yyy/111.txt

rsync -avz egon@192.168.71.115::yyy/111.txt /abc/1.txt

三种备份思想:

全量:

特点:每次都是一次完整的“拷贝”

恢复:

只需要一个文件

差异:

特点:每次都是跟第一次全量备份比较,只备份差异部分

此刻目录内文件的变化:1.txt 2.txt 3.txt 4.txt 5.txt

第一次全量:1.txt 2.txt 3.txt

第二次备份:只备份了4.txt

第二次备份:备份4.txt、5.txt

恢复:只需要两个文件

先恢复全量,然后把你想恢复那个时间节点的备份文件恢复即可

增量:

特点:每次都是跟上一次备份比较,只备份差异部分

此刻目录内文件的变化:1.txt 2.txt 3.txt 4.txt 5.txt

第一次全量:1.txt 2.txt 3.txt

第二次备份:4.txt

第三次备份:5.txt

恢复:是一个链,沿途的备份文件都需要

先恢复全量,再以此恢复沿途的增量备份,直到到达

你想要恢复的时间点

综上,对比三种备份方案

1、占用空间:全量 > 差异 > 增量

2、恢复数据过程的复杂程度:增量 > 差异 > 全量

rsync的增量备份

rsync -a –delete –link-dest 上一次的备份 当前的状态 备份的目标位置

第一次全量:

rsync -a –delete /data/ /bak/111

第二次备份:

rsync -a –delete –link-dest /bak/111 /data/ /bak/222

————> echo 3333 > /data/3.txt

第三次备份

rsync -a –delete –link-dest /bak/222 /data/ /bak/333

————> echo 1111 > /data/1.txt

第四次备份

rsync -a –delete –link-dest /bak/333 /data/ /bak/444

总结:与上一次一样会直接硬链接到上一次,不一样的才会创建新的

总结rsync特点:

1、耗cpu、省io

2、不适合的应用场景

源目录频繁变动

不适合同步大文件

镜像站:

1、搭建好一个主dns

共享文件夹/data

2、搭建好一个从dns,与主dns的配置一致

共享文件夹/data

#!/bin/bash
 
watch_dir=/data/               # 本地被监控目录
user="egon"                    # 虚拟用户
export RSYNC_PASSWORD=123      # 虚拟用户密码
module="xxx"                   # 远程模块名
ip=192.168.71.114               # 远程主机ip
 
# 先整体同步一次
rsync -azc --delete ${watch_dir} ${user}@${ip}::${module}
 

# 切换到被监控目录下,然后用inotifywait监控./目录,这样后期就可以用-R选项同步新增的子目录
cd $watch_dir  
/usr/bin/inotifywait -mrq --timefmt '%Y-%m-%d %H:%M:%S' --format '%w%f:%Xe:%T' -e create,delete,modify,move,attrib,close_write ./ \
--exclude=".*.swp" | \
while read line
do
    # $line的输出format为:文件路径:事件:时间
    FILE=$(echo $line | awk -F: '{print $1}')  # 获取文件的绝对路径
    EVENT=$(echo $line | awk -F: '{print $2}') # 获取监控的事件
 
    # 监控到对文件的下述行为后,只把文件同步到远端
    if [[ $EVENT =~ 'CREATE' ]] || [[ $EVENT =~ 'MODIFY' ]] || [[ $EVENT =~ 'CLOSE_WRITE' ]] || [[ $EVENT =~ 'MOVED_TO' ]] || [[ $EVENT =~ 'ATTRIB' ]];then
        rsync -azcR ${FILE} ${user}@${ip}::${module}
    fi

 
    # 监控到涉及到目录的改动,将目录同步到远端,例如用dirname ${FILE}获取目录
    if [[ $EVENT =~ 'DELETE' ]] || [[ $EVENT =~ 'MOVED_FROM' ]];then
        rsync -azcR --delete $(dirname ${FILE})/ ${user}@${ip}::${module} &>/dev/null
    fi
done &
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇