美文网首页沙大斌
nfs+keeep+rsync高可用

nfs+keeep+rsync高可用

作者: su酥饼 | 来源:发表于2022-06-28 14:59 被阅读0次

    架构图如下:


    image.png

    服务器信息

    服务器信息
    10.10.5.156  nfs-service1
    10.10.5.157  nfs-service2
    10.10.5.158  nfs-client
    

    安装相关服务 两个service 节点

    yum install -y nfs-utils
    yum install -y keepalived
    yum install -y rsync
    yum install -y inotify
    

    安装nfs client 节点

    yum install -y nfs-utils
    

    2.配置nfs服务

    2-1两个service节点配置nfs,并启动服务

    mkdir -p /data/nfs
    echo "/data/nfs  *(insecure,rw,sync,no_root_squash,no_all_squash)" > /etc/exports
    systemctl restart nfs
    systemctl enable nfs
    

    2-2client节点配置nfs,并启动服务

    systemctl restart nfs
    systemctl enable nfs
    
    

    3.配置keepalived

    修改master节点

    vim /etc/keepalived/keepalived.conf

    ! Configuration File for keepalived
    global_defs {
       router_id lb02
    }
    
    vrrp_instance VI_1 {
        state BACKUP          #两个节点均为BACKUP
        nopreempt             #非抢占模式
        interface eth0       #主节点对应ip地址的网卡名称
        virtual_router_id 66  #修改默认id
        priority 102
        advert_int 2
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.10.5.164       #浮动ip
        }
    }
    

    修改buckup节点

    vim /etc/keepalived/keepalived.conf

    ! Configuration File for keepalived
    global_defs {
       router_id lb02
    }
    
    vrrp_instance VI_1 {
        state BACKUP          #两个节点均为BACKUP
        nopreempt              #非抢占模式
        interface eth0       #对应ip地址的网卡名称
        virtual_router_id 66  #修改默认id
        priority 100
        advert_int 2
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.10.5.164       #浮动ip
        }
    }
    

    启动服务keepalived

    systemctl restart keepalived
    systemctl enable keepalived
    

    查看是否有eth0网卡上是否有对应的vip

    image.png

    4.配置rsync+inotify(2service 节点)

    1.rsync 同步文件需要对应用户和密码,这里直接使用root,两台服务器之间做免密操作即可:
    免密操作:
    略
    

    inotifywait 参数说明:

    -m,–monitor:始终保持事件监听状态   # 重要参数
    -r,–recursive:递归查询目录     # 重要参数
    -q,–quiet:只打印监控事件的信息     # 重要参数
    -exclude:排除文件或目录时,不区分大小写
    -t,–timeout:超时时间
    –timefmt:指定时间输出格式  # 重要参数
    –format:指定时间输出格式       # 重要参数
    -e,–event:后面指定删、增、改等事件 # 重要参数
    
    inotifywait events 事件说明:
    access:读取文件或目录内容
    modify:修改文件或目录内容
    attrib:文件或目录的属性改变
    close_write:修改真实文件内容   # 重要参数
    close_nowrite:文件或目录关闭,在只读模式打开之后关闭的
    close:文件或目录关闭,不管读或是写模式
    open:文件或目录被打开
    moved_to:文件或目录移动到
    moved_from:文件或目录从移动
    move:移动文件或目录移动到监视目录  # 重要参数
    create:在监视目录下创建文件或目录  # 重要参数
    delete:删除监视目录下的文件或目录  # 重要参数
    delete_self:文件或目录被删除,目录本身被删除
    unmount:卸载文件系统
    

    编写脚本用来监控并同步两个service端的共享存储

    本脚本为157服务器内容
    #!/bin/bash
    #监控本地目录,有变动则输出
    cd /usr/local/sbin/ 
    inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib /data/nfs/ |  while read file
    do
        #将本地同步到远程目录,这里要根据实际情况修改
        rsync -avz --delete  /data/nfs/ root@10.10.5.156:/data/nfs/
        echo "  ${file} was rsynced" >>/tmp/rsync.log 2>&1
    done
    
    本脚本为156服务器内容
    #!/bin/bash
    #监控本地目录,有变动则输出
    cd /usr/local/sbin/
    inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib /data/nfs/ |  while read file
    do
        #将本地同步到远程目录,这里要根据实际情况修改
        rsync -avz --delete  /data/nfs/ root@10.10.5.157:/data/nfs/
        echo "  ${file} was rsynced" >>/tmp/rsync.log 2>&1
    done
    

    加入到开启自启

    echo "nohup /usr/local/sbin/sync_nfs.sh & ">> /etc/rc.local
    

    5.client 挂载共享存储

    #查看可用挂载点
    showmount -e 10.10.5.164
    #创建挂载目录
    mkdir /nfs/158 -p
    #写入配置文件并挂载 
    echo "10.10.5.164:/data/nfs /nfs/158   nfs  defaults 0  0">> /etc/fstab
    mount -a
    #查看挂载情况
    df -h
    

    6.编写端检查nfs服务脚本

    6-1 service 脚本,判断nfs服务是否正常可用
    cat check_service.sh
    #!/bin/bash
    #nfs check
    #if no nfsserver then start nfs
    #if start nfs fail then stop keepalived
    
    for i in `seq 14`;do
    counter=`ps -aux | grep '\[nfsd\]' | wc -l`
    if [ $counter -eq 0 ];then
    systemctl restart nfs
    fi 
    sleep 2
    counter=`ps -aux | grep '\[nfsd\]' | wc -l`
    if [ $counter -eq 0 ];then
    systemctl stop keepalived.service
    fi
    sleep 2
    done
    
    6-2 client 端脚本,当vip飘移后保证服务可用
    cat check_client.sh
    #!/bin/bashz
    #用for循环设置每两秒检查一次 2*(29+1)检查一分钟 可用性
    for i in `seq 29`;do
    df -Th &> /dev/null
    if [ `echo $?` -ne 0 ];then 
    umount -lf /nfs/158 &&  mount -a 
    fi
    sleep 2
    done
    

    编写定时任务配置 定时执行检查脚本

    crontab -e
    #服务端定时任务
    * * * * *  /usr/local/sbin/chenk_service.sh &> /dev/null
    #客户端定时任务
    * * * * *  /usr/local/sbin/chenk_client.sh &> /dev/null
    

    7.高可用测试

    客户主机挂载测试:使用当前平台一个节点机,挂载浮动ip地址共享目录,同时做文件读写,观察存储主机两个节点文件生成情况;
    主机宕机测试:可直接关闭服务器,或停止nfs和keepalived服务,查看共享目录可用性;
    nfs服务终端测试:正常服务的同时,关闭nfs主节点服务进程,测试客户端读写文件功能正常与否,以及浮动IP切换正常与否;
    文件同步测试:测试在主节点进行文件增、删、改后,备节点的文件变动情况;

    相关文章

      网友评论

        本文标题:nfs+keeep+rsync高可用

        本文链接:https://www.haomeiwen.com/subject/ltwavrtx.html