zoukankan      html  css  js  c++  java
  • NFS服务器的安全设置及性能调优 海口

    背景

    虽说现在到处是oss、minio、fastdfs的天下,但NFS对于很多公司来说,还是有其可取之处的,像我们的项目是一直在用的,今天好好研究下相关配置。

    安装

    配置

    配置文件 /etc/exports,内容通常如下:

    directory machine1(option11,option12)
    

    directory

    要共享的目录。如 /data/

    machine1

    nfs客户端,就是哪些机器可以访问他,可以是指定ip,也可以是一个ip段。

    option 重要的权限有如下几种:

    • ro : 只读,不可写
    • rw:有读写权限
    • no_root_squash/root_squash:默认情况下,客户端上的root用户发出的任何请求都会变成服务端的nobody用户权限去执行。如果开启了此项,客户端上的root用户发出的请求等同服务端的root用户权限,会有安全隐患,不建议使用 no_root_squash
    • async/sync: 默认情况下,所有exportfs命令都将使用异步,即使用sync选项文件先保存在内存中,达到触发条件再发往服务端,性能较好,但存在风险。若使用同步async,则实时存到服务端。

    举个例子,现在有172.18.11.1、172.18.11.2要访问NFS服务端,/data/ 目录需要读写,/home/ 目录只读权限,示例如下:

    /data 172.18.11.1(rw) 172.18.11.2(rw)
    /home 172.18.11.1(ro) 172.18.11.2(ro)
    

    如果是整个ip段需要访问的话,示例如下:

    /data 172.18.11.0/24(rw)
    /home 172.18.11.0/24(ro)
    

    安全

    最开始不清楚有多少主机需要使用NFS服务端,所以在 /etc/exports 指定了一个段可以访问,如下

    /data 172.18.11.0/24(rw)
    

    但安全部门不允许,要求指定ip,修改 /etc/exports 为:

    /data 172.18.11.1(rw) 172.18.11.2(rw)
    

    除了在 /etc/exports 指定ip,也可以通过 /etc/hosts.allow、/etc/hosts.deny 来限制

    这两个文件可以指定局域网内有哪些机器可以使用本机的服务。该文件每一行的文件格式如下:

    service ip
    

    当有客户端向本机发起请求时,检查流程如下:

    1. 检查此次请求是否匹配 /etc/hosts.allow 的规则,若匹配则允许访问。
    2. 如果不匹配 hosts.allow ,则检查此次请求是否匹配 /etc/hosts.deny 的规则,若匹配则拒绝访问
    3. 若 hosts.allow、hosts.deny 均不匹配,则允许访问。

    下面开始操作:

    首先在 hosts.deny 拒绝所有

    lockd:ALL
    mountd:ALL
    rquotad:ALL
    statd:ALL
    

    然后在 hosts.allow 允许指定ip

    lockd: 172.18.11.1
    mountd: 172.18.11.1
    rquotad: 172.18.11.1
    statd: 172.18.11.1
    

    性能

    同步/异步

    同步就是数据已经写入本地存储后,服务器才会回复客户端说OK了,当NFS服务器或网络出现故障时,文件丢失的可能性较小。

    异步则是不等待数据写入存储即回复客户端说OK了,则节省I/O请求的时间并节约性能。但是存在数据丢失的风险。

    看你怎么选了。

    NFS 守护进程的数量

    NFS使用服务器上的线程来处理输入输出的I/O请求,这在进程中显示为nfsd,默认情况下NFS启动8个nfsd进程,而现在的服务器配置都比较高,可以调整为16个或32个。

    tcp参数调优

    两个参数:系统输入和输出队列

    增加输入和输出队列的大小允许通过 NFS 传输更多数据。实际上,正在增加可以存储数据的缓冲区的大小。内存中可以存储的数据越多,NFS 处理它的速度就越快(即,排队的数据越多)。NFS 服务器 NFS 守护进程共享相同的套接字输入和输出队列,因此如果队列更大,所有 NFS 守护进程都有更多的缓冲区并且可以更快地发送和接收数据。对于输入队列,要修改的两个值是/proc/sys/net/core/rmem_default(读取队列的默认大小,以字节为单位)和/proc/sys/net/core/rmem_max(读取队列的最大大小)以字节为单位的读取队列)。这些值很容易修改:

    echo 262144 > /proc/sys/net/core/rmem_default
    echo 262144 > /proc/sys/net/core/rmem_max
    

    这些命令将读取缓冲区大小更改为 256KiB(以 2 为基数),由 NFS 守护进程共享。您可以对 NFS 守护进程共享的写入缓冲区执行相同的操作:

    echo 262144 > /proc/sys/net/core/wmem_default
    echo 262144 > /proc/sys/net/core/wmem_max
    
  • 相关阅读:
    Django Rest framework基础使用之Request/Response
    Django Rest framework基础使用之 serializer
    python基础(一)
    python实现本地图片上传到服务区
    开发中遇到的问题记录
    九、xadmin菜单分组管理
    leetcode-7-整数翻转
    leetcode-6-Z 字形变换
    leetcode-5-最长回文子串
    leetcode-3-无重复字符的最长子串
  • 原文地址:https://www.cnblogs.com/fsckzy/p/15597245.html
Copyright © 2011-2022 走看看