1. NFS部署手册
最后更新于:2022-04-02 07:43:00
### 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的启动顺序,客户端挂载主要权衡安全和性能参数,保证业务的前提下,尽量安全。
';