05@nfs服务的实现(故障转移)
文章目录
实时切换

一、什么是NFS
1.NFS基本概述
NFS是Network File System的缩写及网络文件系统,NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录,实现远程共享
2.为什么使用NFS
1.为了实现多台服务器之间数据共享
2.实现多台服务器之间数据一致
3、NFS原理
配置文件/etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
#执行的nfs的配置文件及服务的流程
1.用户进程访问NFS客户端,使用不同的函数对数据进行处理
2.NFS客户端通过TCP/IP连接服务端;
3.NFS服务端接受请求后,会先调用portmap进程进行端口映射;
4.Rpc.nfsd进程用于判断NFS客户端能否连接服务端;
5.Rpc.mount进程用于判断客户端可以对服务端进行哪些操作;
6.最后如果允许操作,客户端可以对服务端磁盘进行修改。
注意:rpcbind是一个远程调用,使用NFS时必须也用重启rpcbind服务
4.NFS配置详解
| NFS共享参数 | 参数作用 |
|---|---|
| rw | 表示读写权限 |
| ro | 表示只读权限 |
| root_squash | 当NFS客户端以root访问时,修改权限为NFS服务器的匿名用户(不常用) |
| no_root_squash | 当NFS客户端以root访问时,修改权限为NFS服务器的root用户(几乎不用) |
| all_squash | 当NFS客户端以任意用户访问时,修改权限为NFS服务器的匿名用户(常用) |
| no_all_squash | 当NFS客户端以任意用户访问时,不修改权限(不常用) |
| sync | 同时将数据写入内存和磁盘(保证数据不丢失) |
| async | 优先将数据写入内存,再写入硬盘;效率高,但是会丢失数据 |
| anonuid | 配合all_squash,指定匿名用户的uid,用户为系统用户,必须存在 |
| anongid | 配合all_squash,指定匿名用户的gid |
二、NFS实践配置
| 主机 | 外网IP | 内网IP | 角色 |
|---|---|---|---|
| nfs | 10.0.0.31 | 172.16.1.31 | NFS服务端 |
| web01 | 10.0.0.7 | 172.16.1.7 | NFS客户端 |
1.配置简单NFS服务
配置NFS服务,配置文件为 /etc/exports
书写格式为:
/data 172.16.1.0/24(rw,sync,all_squash)
| 语法 | /data | 172.16.1.0/24 | (rw,sync,all_squash) |
|---|---|---|---|
| 语法含义 | NFS共享的目录 | NFS允许连接的客户端 | 允许的操作(参数1,参数2) |
#服务端配置
[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
[root@nfs ~]# vim /etc/exports
/sersync 172.16.1.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
#创建共享文件夹
[root@nfs ~]# mkdir /sersync
[root@nfs ~]# chown www.www /sersync/
#创建nfs使用用户
[root@nfs ~]# groupadd www -g 1000
[root@nfs ~]# useradd www -g 1000 -u 1000
[root@nfs ~]# systemctl restart nfs-server rpcbind
2.查看挂载点
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
3.验证nfs配置
[root@nfs ~]# cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,all_squash)
三、客户端操作
1.backup
[root@backup ~]# vim /etc/rsyncd.conf
#添加远程共享模块
[sersync]
comment="实时同步远程共享"
path=/sersync
[root@backup ~]# cat /etc/rsync.passwd
hzl:1
[root@backup ~]# mkdir /sersync
[root@backup ~]# groupadd www -g 1000
[root@backup ~]# useradd www -u 1000 -g 1000
#检查确认创建的用户
[root@backup ~]# id www
uid=1000(www) gid=1000(www) groups=1000(www)
2、WEB 1 和 web 2
安装web服务器(两台机器上全需要执行)
#安装需要的软件包
[root@web1 ~]# yum install httpd php -y
[root@web1 ~]# systemctl start httpd
# 将kaoshi.zip解压至/var/www/html目录(只需要在一台服务器上执行)
[root@web1 ~]# mv kaoshi.zip /var/www/html/
[root@web1 ~]# cd /var/www/html/
[root@web1 html]# unzip kaoshi.zip
#挂载nfs共享文件夹及目录
[root@web01 html]# mount -t nfs 172.16.1.31:/data /var/www/html/
[root@web02 html]# mount -t nfs 172.16.1.31:/data /var/www/html/
添加开机自启挂载
[root@nfs /]vim /etc/fstab
172.16.1.31:/data /var/www/html/pic nfs defaults 0 0
#[root@web01 html]# vim /etc/profile
mount -t nfs 172.16.1.31:/data /var/www/html/
检测开机挂载状态
mount -a
卸载nfs共享目录
umount /var/www/html/pic
#强制卸载
umount -lf /var/www/html
#注:挂载与卸载,必须退出所挂载的目录,然后进行挂载
当nfs服务器出现问题,切换备份挂载点
#强制卸载挂载点
[root@web01 ~]# umount -lf /var/www/html
#重新挂载正常的挂载点
[root@web01 ~]# mount -t nfs 172.16.1.41:/data /var/www/html
3、实时同步进行inotify
1)安装inotify
[root@nfs data]# yum install -y inotify-tools
2)inotify参数详细了解
-m 持续监控
-r 递归
-q 静默输出,仅打印时间信息
--timefmt 设置指定输出时间格式
--format 设置指定事件输出格式
%Xe 事件
%w 目录
%f 文件
-e 指定监控的事件
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载
3)测试命令
#inotify的执行命令
#绝对路径执行
/usr/bin/inotifywait -mrq --format '%w %f' -e create,delete,attrib,close_write /data
#相对路径执行
inotifywait -mrq --format '%w %f' -e create,delete,attrib,close_write /data
4)编写实时同步de脚本
[root@nfs ~]# cat inotify.sh
#!/bin/bash
dir=/data
#设置环境变量
export RSYNC_PASSWORD=123
/usr/bin/inotifywait -mrq --format '%w %f' -e create,delete,attrib,close_write $dir | while read line;do
cd $dir && rsync -az -R --delete . rsync_backup@172.16.1.41::data >/dev/null 2>&1
done &
#执行运行脚本
[root@nfs ~]# sh inotify.sh
5)上传一个文件,web端查看,nfs挂载目录查看,backup服务器备份目录查看
四、sersync的实时同步效果
1、实时同步工具的选择
#sersync+RSYNC(√)
#inotify+rsync
Inotify是一个通知接口,用来监控文件系统的各种变化,如果文件存取,删除,移动。可以非常方便地实现文件异动告警,增量备份,并针对目录或文件的变化及时作出响应。rsync+inotify可以做到实时增量备份
sersync是国人基于rsync+inotify-tools开发的工具的升级版,不仅保留了优点同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。
2、nfs服务器部署sersync
1)安装rsync和inotify
[root@nfs ~]# yum install -y rsync inotify-tools
2)下载sersync
[root@nfs ~]# wget http://down.whsir.com/downloads/sersync2.5.4_64bit_binary_stable_final.tar.gz
3)安装sersync(二进制包)
[root@nfs ~]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz
源码包:解压,生成,编译,安装
4)移动并改名
[root@nfs ~]# mv GNU-Linux-x86 /usr/local/sersync
5)修改sersync的配置文件
#切换到修改后的目录下
[root@nfs sersync]# vim confxml.xml
<inotify>
#监控的动作,true就推送,false就不推送
<delete start="true"/>
<createFolder start="true"/>
<createFile start="true"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="true"/>
<modify start="true"/>
</inotify>
<sersync>
#监控的目录
<localpath watch="/data">
#rsync服务端IP #模块名字
<remote ip="172.16.1.41" name="data"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
#rsync推送时的参数
<commonParams params="-az"/>
#rsync推送时认证 #认证的虚拟用户 #虚拟用户对应的密码文件
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
#如果rsync不使用默认的873端口,使用改参数指定
<userDefinedPort start="false" port="874"/><!-- port=874 -->
#超时时间
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
#错误日志保存路径
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
#定时任务,设置多久进行一次全量备份
<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>
6)创建模块对应的密码文件
[root@nfs sersync]# echo "123" > /etc/rsync.password
[root@nfs sersync]# chmod 600 /etc/rsync.password
7)查看sersync命令
实时同步到backup
rsync : 但是无法实时传输
innotfy + rsync : 适用于文件比较少的情况
sersync + innotfy + rsync : 大批量文件同步
#查看使用参数
[root@nfs GNU-Linux-x86]# ./sersync2 -h
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
_______________________________________________________
参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
c参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序
________________________________________________________________
-dro #默认一般使用执行参数
8)启动sersync
#使用相对路径进行启动sersync
[root@nfs sersync]# ./sersync2 -dro confxml.xml
#使用绝对路径进行启动sersync
[root@nfs sersync]# /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
9)实时备份多份文件
[root@nfs ~]# cd /usr/local/sersync/
[root@nfs sersync]# ll
总用量 1776
-rwxr-xr-x 1 root root 2203 4月 23 04:38 confxml.xml
-rwxr-xr-x 1 root root 2214 4月 23 03:30 confxml_wps.xml #新添加要执行的备份配置文件
-rwxr-xr-x 1 root root 1810128 10月 26 2011 sersync2
五、故障转移
nfs 服务挂载点切换使用脚本
#!/bin/bash
ping -c1 172.16.1.31 >/dev/null
if [ $? -ne 0 ];then
umount -lf /var/www/html && mount -t nfs 172.16.1.41:/sersync /var/www/html/
else
df -h | grep 172.16.1.31 >/dev/null
if [ $? -ne 0 ];then
umount -lf /var/www/html && mount -t nfs 172.16.1.31:/sersync /var/www/html
fi
fi
六、NFS简单总结
1.NFS使用优点
1.NFS文件系统简单易使用、方便部署环境、数据传输可靠、服务执行稳定、一般满足中小企型业的需求。
2.NFS文件系统内存放的数据都在文件系统之上,所有数据都是能看得见,所有数据全部都是共享的。
2.NFS局限性
1.存在单点故障, 如果构建高可用维护麻烦web->nfs()->backup
2.NFS数据明文, 并不对数据做任何校验。
3.客户端挂载NFS服务没有密码验证, 安全性一般(内网使用)
3.NFS应用建议
1.生产场景应将静态数据尽可能往前端推, 减少后端存储压力
2.必须将存储里的静态资源通过CDN缓存jpg\png\mp4\avi\css\js
3.如果没有缓存或架构本身历史遗留问题太大, 在多存储也无用
七、分享扩展
1.rsync配置多模块
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = true
auth users = rsync_backup
secrets file = /etc/rsync.passwd
####################
[data]
comment = 我是文件共享目录
path = /data
[backup]
comment = 我是数据备份目录
path = /backup
2.rsync配置多模块不通虚拟用户
[root@backup backup]# vim /etc/rsyncd.conf
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = true
secrets file = /etc/rsync.passwd
####################
[data]
comment = 我是文件共享目录
path = /data
auth users = rsync_data
[backup]
comment = 我是数据备份目录
path = /backup
auth users = rsync_backup
[root@backup backup]# vim /etc/rsync.passwd
rsync_backup:123
rsync_data:123
3.NFS配置多个目录可以挂在
[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/backup 172.16.1.0/24(rw,sync,all_squash)
[root@nfs ~]# systemctl restart nfs
[root@web01 html]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/backup 172.16.1.0/24
/data 172.16.1.0/24
4.sersync实时同步多个不同的目录
[root@nfs sersync]# vim confxml2.xml
<sersync>
<localpath watch="/backup">
<remote ip="172.16.1.41" name="backup"/>
[root@nfs sersync]# vim confxml.xml
<sersync>
<localpath watch="/data">
<remote ip="172.16.1.41" name="data"/>
本文来自博客园,作者:ଲ小何才露煎煎饺,转载请注明原文链接:https://www.cnblogs.com/zeny/p/15121580.html

浙公网安备 33010602011771号