admin管理员组

文章数量:1516870

NFS,RS宕机问题

NFS

  • 问题1
A机器上传了一张图片,结果B机器访问的时候就提示404. 
  • NFS,Network File System。网络文件系统,即通过网络,对在不同主机上的文件进行共享。
  • NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本,更新比较慢其实4.1是从2010年就开始使用了。
  • NFS数据传输基于RPC协议,RPC为Remote Procedure Call的简写。
  • NFS应用场景是:A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C分别去挂载A共享的数据目录,从而B和C访问到的数据和A上的一致;
  • 两台机器:
    • aming01(128) 作为服务端 aming03(130) 作为客户端
  • 在aming01上安装:nfs-utils包
# yum install -y nfs-utils
  • 在aming02上也安装:nfs-utils包;
# yum install -y nfs-utils
  • 在aming01上,修改配置文件/etc/exports,写入以下内容
/home/nfstestdir 192.168.222.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
  • 语句释义:
/home/nfstestdir :共享的目录
rw: 读写
ro: 只读
sync: 同步模式,内存数据实时写入磁盘
async :非同步模式
no_root_squash: 客户端挂载NFS共享目录后,root用户不受约束,权限很大
root_squash: 与上面选项相对,客户端上的root用户收到约束,被限定成某个普通用户
all_squash:客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户
anonuid/anongid: 和上面几个选项搭配使用,定义被限定用户的uid和gid
192.168.222.0/24:为客户端的网段;
  • 创建nfstestdir目录,并给予777权限;
# mkdir /home/nfstestdir
# chmod 777 /home/nfstestdir/
  • 开启nfs服务,并监听端口,端口111为其默认端口;
# systemctl start nfs
  • 设置开机启动:
# systemctl enable nfs
  • 查看服务端共享目录:
# showmount -e 192.168.222.128
  • 注意:假如没有出现共享目录,有下面可能,注意排查:
1、两者通信问题;
2、把两者的防火墙关闭
  • 挂载NFS
# mount -t nfs 192.168.222.128:/home/nfstestdir /mnt/
  • 创建测试文件:
# cd /mnt/
# touch 111
  • exportps命令常用选项:
-a  全部挂载或者全部卸载
-r  重新挂载
-u  卸载某一个目录
-v  显示共享目录
  • 在服务端上:
# exportfs -arv

这样就可以让服务器直接生效,不需要再次重启nfs服务

  • 编辑配置文件,增加一个共享的目录
/home/nfstestdir 192.168.222.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
/tmp/ 192.168.222.130(rw,sync,no_root_squash) //新增一个共享目录,及其权限
  • 用命令:exportfs -arv 直接生效,不用重启NFS服务
  • 问题:
    • 如果使用NFS4版本,可能会有客户端挂载NFS后,写入新文件的属主和数组都是nobody,即使我们指定了anonuid anongid
  • 解决:
    • 客户端在挂载的时候加个-o nfsvers=3
  • 开机自动挂载
vi /etc/fstab192.168.222.128:/data/wwwroot/bbs.aminglinux/data  /data/wwwroot/bbs.aminglinux/data  nfs  defaults,nfsvers=3 0 0

 RS宕机问题

  • 问题2
    当RS的某一台机器宕机之后,LB依然还会把请求发送到宕机的机器上去,这样就会影响到用户的体验。
  • 解决方案:
    keepalived + LVS
  • 安装

    LB上执行: yum install keepalive

  • 配置
  • LB上操作

    • 说明:由于keepalived集成了LVS的功能,所以LB上不需要自己写脚本,之前如果做实验有执行那个脚本,需要执行如下命令

    •  
      # ifdown ens33 && ifup ens33
      # ipvsadm -C
  • 编辑配置文件 vim /etc/keepalived/keepalived.conf //修改为如下内容:
    vrrp_instance aminglinux_01 {#备用服务器上为 BACKUPstate MASTER#绑定vip的网卡为ens33interface ens33virtual_router_id 001#优先级,优先级最高的为master,备用服务器上要低于100priority 100#发送VRRP包的间隔时间advert_int 1authentication {auth_type PASSauth_pass aminglinux}virtual_ipaddress {192.168.222.100}
    }
    virtual_server 192.168.222.100 80 {#(每隔10秒查询realserver状态)delay_loop 10#(lvs 算法)lb_algo wlc#(DR模式)lb_kind DR#(同一IP的连接60秒内被分配到同一台realserver)persistence_timeout 60#(用TCP协议检查realserver状态)protocol TCPreal_server 192.168.222.128 80 {#(权重)weight 100TCP_CHECK {#(10秒无响应超时)connect_timeout 10# 重新检测3次nb_get_retry 3# 每次检测间隔时间delay_before_retry 3connect_port 80}}real_server 192.168.222.130 80 {weight 100TCP_CHECK {connect_timeout 10nb_get_retry 3delay_before_retry 3connect_port 80}}
    }
  • 启动keepalived服务:systemctl start keepalived

  • RS上还需要执行原来脚本

  • 定义脚本 vim /usr/local/sbin/lvs_rs.sh //内容如下:

    #!/bin/bash
    vip=192.168.222.100
    ifdown lo
    ifup lo
    ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip lo:0
    #更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
    #参考文档
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
  • sh /usr/local/sbin/lvs_rs.sh

本文标签: NFS,RS宕机问题