🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### NFS服务部署 | | 详情 | | :------------: | :------------: | | 操作系统 | Centos 6.8 x86_64 | | 服务情况 | 关闭iptables和Selinux| #### 1.功能和适用场景 NFS(Network File System),功能同Windows下的磁盘映射,通过网络为其他服务器提供文件读取和存储服务。 ##### 适用场景 - 数据备份 - 多客户端数据共享读取、写入 #### 2.原理 1. 客户端通过mount命令访问要挂载的服务器 2. NFS服务的rpcbind服务告知客户端NFS端口 3. 客户端挂载NFS服务 > NFS服务依赖rpcbind服务(rpcbind是Centos6.x之后的名字,Centos5.x叫portmap) rpcbind服务要优先于NFS服务启动,否则无法注册端口 客户端也依赖NFS服务(不安装会报错) #### 3.部署架构 ##### 主机情况 | 主机名 | 角色 | | :------------: | :------------: | | test.v.nfs.192.168.0.238 | NFS Serve(Master) | | test.v.nfs.192.168.0.239 | NFS Server(Backup) | | test.v.web.192.168.0.233 | Nginx+Tomcat(Client) | | test.v.web.192.168.0.229 | Nginx+Tomcat(Client) | ##### 目录初始化 | 目录位置 | 作用 | | ------------ | ------------ | | /app | 应用部署位置 | | /app/scripts | 脚本存放位置 | | /app/logs | 日志存放位置 | | /data | 数据存放位置 | | /data/bakcup | 数据本地备份 | | /remotebakcup| 远端备份目录| 服务端 ```shell mkdir /app /app/scripts /app/logs /data /data/backup -p ``` 客户端 ```shell mkdir /app /app/scripts /app/logs /data /data/backup -p mkdir /remotebackup ``` #### 3.安装 ##### NFS Server安装 - 安装方式 1 ```shell yum install nfs-utils rpcbind ``` - 安装方式 2 ```shell yum groupinstall "NFS file server" ``` - 安装方式 3 ```shell 光盘安装 ``` ##### NFS Client安装 ```shell 同NFS Server ``` #### 4.配置 ##### 配置开机启动 ```shell echo "/etc/init.d/rpcbind start" >> /etc/rc.local echo "/etc/init.d/nfs start" >> /etc/rc.local ``` ##### 发布目录 ```shell echo "/data 192.168.0.0/24(rw,sync)" >> /etc/export /etc/nfs reload ``` 客户端挂载 ```shell mount -t nfs 192.168.0.238:/data /remotebackup ``` #### 5.参数优化 ##### NFS Server 优化 安全参数 - 压缩权限到普通用户: all_squash 备注:Centos 6.x会统一建议相同UID/GID的NFS用户65534;Centos 5.x 需要人工为NFS创建统一的UID/GID - 同步写入磁盘:sync(如果raid卡有bbu,是不是可以使用async呢?) 备注:默认参数,可以不加;异步可提升性能 ```shell echo "/data 192.168.0.0/24(rw,all_squash)" >> /etc/export ``` ##### mount 挂载优化 安全参数 | 参数 | 作用 | | :------------: | :------------: | | noexec | 不允许执行二进制文件 | | nosuid | 不允许设置SUID | 性能参数 | 参数 | 作用 | | :------------: | :------------: | | noatime | 不更改文件的访问时间 | | nodiratime | 不更改目录的访问时间 | | nodev | 不解析文件系统中的字符设备或块设备 | ```shell mount -t nfs -o nodiratime,noatime,nodev,noexec,nosuid 192.168.0.238:/data /nfsdir/ ``` ##### 内核优化 内核读写缓冲区配置 ```shell 略 ``` #### 6.坑有哪些 - 单点故障 - 大并发下性能有限 - 安全性一般(基于IP和主机名) - 和客户端强耦合(服务端挂了,客户端会HANG住) #### 7.解决方案 备份角色 ```shell NFS + rsync + inotify ``` 高可用性 ```shell NFS + heartbeat + DRBD ``` 性能瓶颈 ```shell 拆分业务 上分布式存储 ``` #### 9.总结 NFS使用非常普遍,使用中需要注意服务端的nfs和rpcbind的启动顺序,客户端挂载主要权衡安全和性能参数,保证业务的前提下,尽量安全。