Linux架构04 NFS总结, Rsync+NFS实战, 解决NFS单点问题, inotify, sersync实时同步

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.如果没有缓存或架构本身历史遗留问题太大,再多存储也无用

 

Rsync+NFS实战,解决NFS单点问题

环境装备

主机角色ip
web01 NFS客户端、RSYNC客户端 172.16.1.7
nfs NFS服务端、RSYNC客户端 172.16.1.31
backup NFS服务端、RSYNC服务端 172.16.1.41

2.搭建上传作业系统

1)安装http服务

[root@web01 ~]# yum install -y httpd php

2)配置httpd用户

[root@web01 ~]# vim /etc/httpd/conf/httpd.conf
User www    # 默认是apache,这里保持统一
Group www

3)创建用户

groupadd www -g 666
useradd www -u 666 -g 666 -s /sbin/nologin -M # 不需要登录,不需要家目录

4)上传代码

cd /var/www/html/
# 放入上传文件php代码,index.html, file.php
# 修改上传路径为/var/www/html/upload

5)授权

chown -R www.www /var/www/html

6)启动httpd

systemctl start httpd
[root@web01 html]# netstat -lntp |grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      30217/httpd

7)访问测试

 

3.将站点目录挂载到nfs服务器

服务端

1)安装nfs

yum install -y nfs-utils rpcbind

2)配置nfs

[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

3)创建用户

[root@nfs ~]# groupadd www -g 666
[root@nfs ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M

4)创建目录并授权

[root@nfs ~]# mkdir /data
[root@nfs /]# chown -R www.www /data/

5)启动NFS

[root@nfs /]# systemctl start rpcbind nfs-server

6)验证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=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)

 

客户端(web01)

7)安装rpcbind和nfs

yum install -y nfs-utils rpcbind

8)查看挂载点

[root@web01 html]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24

9)挂载

[root@web01 html]# mount -t nfs 172.16.1.31:/data /var/www/html/upload
[root@web01 html]# df -h

10)测试

4.把NFS挂载目录数据同步到backup服务器

rsync服务端(backup)

1)安装rsync

复制代码
[root@backup ~]# yum install -y rsync
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 = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
############################
[data]
path = /data
复制代码

3) 创建用户用户组

[root@nfs ~]# groupadd www -g 666
[root@nfs ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M

4)创建密码文件并授权

echo "rsync_backup:123" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd

5)创建目录并授权

mkdir /data
chown -R www.www /data

6)启动rsyncd

systemctl start rsyncd

 

rsync客户端(NFS服务器)

7)将/data目录推送至backup服务器/data

复制代码
# 方式一:手动输入密码
[root@nfs ~]# rsync -avz /data/ rsync_backup@172.16.1.41::data

# 方式二:配置环境变量
[root@nfs ~]# export RSYNC_PASSWORD=123
[root@nfs ~]# rsync -avz /data/ rsync_backup@172.16.1.41::data

# 方式三:指定密码文件
[root@backup ~]# echo "123" > /etc/rsync.password
[root@backup ~]# chmod 600 /etc/rsync.password
[root@nfs ~]# rsync -avz /data/ rsync_backup@172.16.1.41::data --password-file=/etc/rsync.password
复制代码

5. 当NFS服务器出现问题,将web服务器挂载到backup服务器

backup服务器搭建NFS服务端

1)安装NFS

yum install -y rpcbind nfs-utils

2) 配置nfs

[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

3)创建目录并授权

mkdir /data
chown -R www.www /data/

4) 启动NFS

[root@backup /]# systemctl start nfs-server

5) 验证NFS

[root@backup /]# 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=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)

 

6.当nfs服务器出现问题,切换挂载

[root@web01 ~]# umount -lf /var/www/html/
[root@web01 ~]# mount -t nfs 172.16.1.41:/data /var/www/html/upload

注: nfs没有集群,一般出问题了,都是人工去切换,挂载到另一台服务器上

 

7)实时同步inotify

1)安装inotify

[root@nfs ~]# 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)测试命令

/usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /data

4)编写实时同步脚本

[root@nfs ~]# vim 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.什么是实时同步

实时同步是一种只要当前目录发生变化则会触发一个事件,事件触发后会将变化的目录同步至远程服务器

2.为什么实时同步

保证数据的连续性,减少人力维护成本,解决nfs单点故障

3.实现同步的原理

实现同步需要借助inotify通知接口,用来监控目录的变化,如果监控的目录发生变更,则触发动作,这个动作可以是进行一次同步操作,或其他操作;

4.实时同步工具的选择

sersync+RSYNC(√)、inotify+rsync

Inotify是一个通知接口,用来监控文件系统的各种变化,如果文件存取,删除,移动。可以非常方便地实现文件异动告警,增量备份,并针对目录或文件的变化及时作出相应。rsync+inotify可以做到实时增量备份

sersync是国人基于rsync+inotify-tools开发的工具,不仅保留了优点同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。

 

sersync项目实战

1.环境准备

主机内网安装
web01 172.16.1.7 部署作业代码
nfs 172.16.1.31 rsync+inotify+sersync、NFS服务端
backup 172.16.1.41 rsync服务端

2.nfs服务器部署sersync

1)安装rsync和inotify
[root@nfs ~]# yum install -y rsync inotify-tools        # sersync需要rsync和inotify的命令作为基础
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
------------------------------------------------
# 修改下方内容
# <host hostip="localhost" port="8008"></host>  本地主机地址,端口号 #
<filter> 过滤 # <inotify> 监控 <inotify> # 监控的动作,true就推送,false就不推送 <delete start="true"/> <createFolder start="true"/> <createFile start="true"/> # 创建文件,要改成true <closeWrite start="true"/>  # 对文件修改 <moveFrom start="true"/> # 移动进去 <moveTo start="true"/> # 移动走 <attrib start="true"/> # 修改属性,要改成true <modify start="true"/> # 修改文件内容, 要改成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命令的参数 # 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--> # 错误日志保存路径 # 定时任务,设置多久(每600分钟)进行一次全量备份 <crontab start="false" schedule="600"><!--600mins--> <crontabfilter start="false"> # 定时备份排除文件 <exclude expression="*.php"></exclude> <exclude expression="info/*"></exclude> </crontabfilter> </crontab>
复制代码
6)创建密码文件
echo "123" > /etc/rsync.password
chmod 600 /etc/rsync.password
7) 查看sersync命令
复制代码
[root@nfs sersync]# ./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参数,则默认执行同步程序
________________________________________________________________
复制代码
8)启动sersync
# 注意执行目录
[root@nfs sersync]# ./sersync2 -dro confxml.xml
[root@nfs sersync]# /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
[root@nfs sersync]# ./sersync2 -dr  # 此处只有一个配置文件,会自动去读配置文件(多个配置文件要指定),正规写法要指定配置文件
9)验证文件实时同步
通过-r参数运行,返回推送的命令,可以自己发一次看看能不能推送成功

 

posted @   战斗小人  阅读(469)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示