NFS服务挂载不上排查方法

服务端排查

  • 检查nfs进程信息是否注册

服务启动顺序不对,没有启动nfs服务,先启动rpc再启动nfs

rpcinfo -p 172.16.1.31
  • 检查有没有可用存储目录

配置文件编写有问题,重启nfs服务

showmount -e 172.16.1.31
  • 在服务端进行挂载测试

是否能够在存储目录中创建或删除数据

客户端排查

  • 检查nfs进程信息是否注册

服务启动顺序不对,没有启动nfs服务,先启动rpc再启动nfs

rpcinfo -p 172.16.1.31
  • 检查有没有可用存储目录

配置文件编写有问题,重启nfs服务

showmount -e 172.16.1.31
  • 检查网络情况
ping 172.16.1.31 
telnet 172.16.1.31 111

开机自动挂载NFS

  • 将挂载命令写入/etc/rc.local文件要有执行权限
  • /etc/fstab目录中添加挂载信息

Centos6必须启动netfs

Centos7必须启动remote-fs.target

  • 查看所有开机运行的服务
ll /etc/systemd/system/multi-user.target.wants

实时同步服务原理

  1. 需要部署好rsync守护进程服务,实现数据传输
  2. 需要部署好inotify服务,实现目录中数据变化监控
  3. 将rsync服务和inotify服务建立联系,将变化的数据进行实时备份传输

实时同步服务部署

主机名称和IP地址规划

服务 主机名 eth0网卡IP eth1网卡IP 软件
防火墙服务器 firewalld 10.0.0.81 172.16.1.81 firewalld
负载均衡服务器 lb01 10.0.0.5 172.16.1.5 nginx,keepalived
负载均衡服务器 lb02 10.0.0.6 172.16.1.6 nginx,keepalived
web服务器 web01 10.0.0.7 172.16.1.7 nginx
web服务器 web02 10.0.0.8 172.16.1.8 nginx
web服务器 web03 10.0.0.9 172.16.1.9 nginx
存储服务器 nfs01 10.0.0.31 172.16.1.31 nfs
备份服务器 backup 10.0.0.41 172.16.1.41 rsync
数据库服务器 db01 10.0.0.51 172.16.1.51 mysql,mariaDB
批量管理服务器 m01 10.0.0.61 172.16.1.61 ansible
跳板机服务器 jumpserver 10.0.0.71 172.16.1.71 jumpserver
监控服务器 zabbix 10.0.0.72 172.16.1.72 zabbix
缓存服务器 暂无 暂无 暂无 暂无

部署rsync守护进程

守护进程部署

部署inotify监控服务

安装软件

#存储服务器10.0.0.31
yum install -y inotify-tools

熟悉命令的使用

  • /usr/bin/inotifywait 监控目录数据信息变化
  • /usr/bin/inotifywatch 对监控的变化信息进行统计

inotifywait命令参数

  • 使用方法: inotifywait [参数] 监控的目录
  • -m : monitor 实现一直监控目录的数据变化
  • -r : recursive 进行递归监控
  • -q : quiet 尽量减少信息的输出
  • --format : 指定输出信息的格式
  • --timefmt : 指定输出的时间信息格式
  • -e : event 指定监控的事件信息

事件列表

inotify参数.png

sed命令修改文件原理

/data/ OPEN 1997sty #打开文件
/data/ CREATE sedSZeS11 #创建临时文件
/data/ OPEN sedSZeS11 #打开临时文件
/data/ ACCESS 1997sty #读取文件内容
/data/ MODIFY sedSZeS11 #修改临时文件
/data/ ATTRIB sedSZeS11 #临时文件属性变化
/data/ CLOSE_NOWRITE,CLOSE 1997sty #不编辑直接关闭文件
/data/ CLOSE_WRITE,CLOSE sedSZeS11 #写入关闭临时文件
/data/ MOVED_FROM sedSZeS11 #移动一个来自`sedSZeS11`临时文件
/data/ MOVED_TO 1997sty #移入到`1997sty`文件

inotify监控命令格式

inotifywait -mrq --timefmt "%F" --format "%T %w %f 事件信息:%e" /data -e CREATE

企业中,防止系统重要文件被破坏,需要用到inotify进行实时监控/etc/passwd,/var/spool/cron/root

部署sersync同步服务

从github获取sersync

sersync-master.zip

解压到服务器/usr/local/sersync/

sersync/
├── confxml.xml #sersync软件配置
└── sersync2 #sersync软件命令

编写配置文件

sersync服务配置文件.png

  • 执行备份命令
rsync -avz /data rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
  • confxml.xml配置文件
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
    <host hostip="localhost" port="8008"></host>
    <debug start="false"/>
    <fileSystem xfs="false"/>
<!-- 排除指定数据信息不进行实时传输同步 -->
    <filter start="false">
        <exclude expression="(.*)\.svn"></exclude>
        <exclude expression="(.*)\.gz"></exclude>
        <exclude expression="^info/*"></exclude>
        <exclude expression="^static/*"></exclude>
    </filter>
<!-- 定义inotify程序需要监控的事件 -->
    <inotify>
        <delete start="true"/>
        <createFolder start="true"/>
        <createFile start="false"/>
        <closeWrite start="true"/>
        <moveFrom start="true"/>
        <moveTo start="true"/>
        <attrib start="false"/>
        <modify start="false"/>
    </inotify>

    <sersync>
<!-- 配置rsync参数 -->
        <localpath watch="/data">
            <remote ip="172.16.1.41" name="backup"/>
            <!--<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="true" port="873"/><!-- 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>

    <plugin name="command">
        <param prefix="/bin/sh" suffix="" ignoreError="true"/>  <!--prefix /opt/tongbu/mmm.sh suffix-->
        <filter start="false">
            <include expression="(.*)\.php"/>
            <include expression="(.*)\.sh"/>
        </filter>
    </plugin>

    <plugin name="socket">
        <localpath watch="/opt/tongbu">
            <deshost ip="192.168.138.20" port="8009"/>
        </localpath>
    </plugin>
    <plugin name="refreshCDN">
        <localpath watch="/data0/htdocs/cms.xoyo.com/site/">
            <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
            <sendurl base="http://pic.xoyo.com/cms"/>
            <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
        </localpath>
    </plugin>
</head>

sersync命令参数

参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
c参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序

启动sersync服务

/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml

停止sersync服务

[root@nfs01 data]# ps -ef|egrep 'sersync'
root       4913      1  0 20:19 ?        00:00:00 /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
root       4929   4369  0 20:19 pts/0    00:00:00 grep -E --color=auto sersync
[root@nfs01 data]# kill 4913
[root@nfs01 data]# ps -ef|egrep 'sersync'
root       4931   4369  0 20:19 pts/0    00:00:00 grep -E --color=auto sersync

开机自动启动

echo '/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml' >> /etc/rc.local