实时切换
一、什么是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)
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 ~]
/data 172.16.1.0/24( rw,sync,all_squash)
[ root@nfs ~]
/sersync 172.16.1.0/24( rw,sync,all_squash,anonuid= 1000,anongid= 1000)
[ root@nfs ~]
[ root@nfs ~]
[ root@nfs ~]
[ root@nfs ~]
[ root@nfs ~]
2.查看挂载点
[ root@web01 ~]
Export list for 172.16.1.31:
/data 172.16.1.0/24
3.验证nfs配置
[ root@nfs ~]
/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 ~]
[ sersync]
comment= "实时同步远程共享"
path= /sersync
[ root@backup ~]
hzl:1
[ root@backup ~]
[ root@backup ~]
[ root@backup ~]
[ root@backup ~]
uid= 1000( www) gid= 1000( www) groups= 1000( www)
2、WEB 1 和 web 2
安装web服务器(两台机器上全需要执行)
[ root@web1 ~]
[ root@web1 ~]
[ root@web1 ~]
[ root@web1 ~]
[ root@web1 html]
[ root@web01 html]
[ root@web02 html]
添加开机自启挂载
[ root@nfs /] vim /etc/fstab
172.16.1.31:/data /var/www/html/pic nfs defaults 0 0
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 ~]
[ root@web01 ~]
3、实时同步进行inotify
1)安装inotify
[ root@nfs data]
2)inotify参数详细了解
-m 持续监控
-r 递归
-q 静默输出,仅打印时间信息
--timefmt 设置指定输出时间格式
--format 设置指定事件输出格式
%Xe 事件
%w 目录
%f 文件
-e 指定监控的事件
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载
3)测试命令
/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 ~]
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 ~]
5)上传一个文件,web端查看,nfs挂载目录查看,backup服务器备份目录查看
四、sersync的实时同步效果
1、实时同步工具的选择
Inotify是一个通知接口,用来监控文件系统的各种变化,如果文件存取,删除,移动。可以非常方便地实现文件异动告警,增量备份,并针对目录或文件的变化及时作出响应。rsync+inotify可以做到实时增量备份
sersync是国人基于rsync+inotify-tools开发的工具的升级版,不仅保留了优点同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。
2、nfs服务器部署sersync
1)安装rsync和inotify
[ root@nfs ~]
2)下载sersync
[ root@nfs ~]
3)安装sersync(二进制包)
[ root@nfs ~]
源码包:解压,生成,编译,安装
4)移动并改名
[ root@nfs ~]
5)修改sersync的配置文件
[ root@nfs sersync]
< inotify>
< 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" >
< 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>
< commonParams params= "-az" />
< auth start= "true" users= "rsync_backup" passwordfile= "/etc/rsync.password" />
< 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]
[ root@nfs sersync]
7)查看sersync命令
实时同步到backup
rsync : 但是无法实时传输
innotfy + rsync : 适用于文件比较少的情况
sersync + innotfy + rsync : 大批量文件同步
[ root@nfs GNU-Linux-x86]
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
[ root@nfs sersync]
[ root@nfs sersync]
9)实时备份多份文件
[ root@nfs ~]
[ root@nfs sersync]
总用量 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]
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]
rsync_backup:123
rsync_data:123
3.NFS配置多个目录可以挂在
[ root@nfs ~]
/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 ~]
[ root@web01 html]
Export list for 172.16.1.31:
/backup 172.16.1.0/24
/data 172.16.1.0/24
4.sersync实时同步多个不同的目录
[ root@nfs sersync]
< sersync>
< localpath watch= "/backup" >
< remote ip= "172.16.1.41" name= "backup" />
[ root@nfs sersync]
< sersync>
< localpath watch= "/data" >
< remote ip= "172.16.1.41" name= "data" />