nfs 部署

文件夹绝对路径 客户地址 1(ro 或 rw 等控制参数) 客户地址 2(ro 或 rw 等控制参数) .. ..

1)准备需要共享的文件夹
mkdir /public

vim /etc/exports

/public 172.25.0.0/24(ro)
yum -y install nfs-server

systemctl restart nfs-server

1)创建挂载点
mkdir /mnt/nfsmount
showmount -e server0.example.com

vim /etc/fstab
server0.example.com:/public /mnt/nfsmount nfs _netdev 0 0

mount -a
df -hT /mnt/nfsmount/

查看 nfs 共享
showmount -e 服务器地址

挂载 nfs 目录

一. 环境
ubuntu 16.4

二. 部署
服务端配置
1. 安装 nfs-kernel-server 时,apt 会自动安装 nfs-common 和 portmap
apt-get install nfs-kernel-server -y

分开看就是

服务器端:sudo apt-get install portmap
服务器端:sudo apt-get install nfs-kernel-server
客户端:sudo apt-get install nfs-common

2. 创建共享目录
mkdir /mnt/server

3. 配置 nfs 文件
vim /etc/exports

/mnt/server *(rw,sync,no_root_squash,no_subtree_check)
参数说明:

/mnt/server 与 nfs 服务客户端共享的目录,
*:允许所有的网段访问,也可以使用具体的 IP
rw:挂接此目录的客户端对该共享目录具有读写权限
sync:资料同步写入内存和硬盘
no_root_squash:root 用户具有对根目录的完全管理访问权限。
no_subtree_check:不检查父目录的权限。

4. 启动服务
systemctl start nfs-server

5. 测试,查看本机是否显示共享目录
showmount -e 127.0.0.1

查看 NFS 的运行状态
nfsstat

查看 rpc 执行信息,可以用于检测 rpc 运行情况
rpcinfo

客户端配置
1. 安装客户端软件
apt-get install nfs-common -y

2. 查看是否可以获取到服务端共享目录
showmount -e 192.168.1.1

3. 创建挂载目录
mkdir /server

3. 本机挂载,挂载后 server 目录下存取东西,也会在服务端 /mnt/server 同步操作
mount -t nfs 192.168.1.1:/mnt/server /server

4. 开机自动挂载
vim /etc/fstab

192.168.1.1:/mnt/server /server nfs rw,tcp,intr 0 1
挂载
mount -a

三. 其它参数
挂载参数
ro:目录只读
rw:目录读写
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
async:将数据先保存在内存缓冲区中,必要时才写入磁盘
all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组 (nfsnobody)
no_all_squash:与 all_squash 取反 (默认设置)
root_squash:将 root 用户及所属组都映射为匿名用户或用户组 (默认设置)
no_root_squash:与 rootsquash 取反
anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户 (UID=xxx)
anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户
服务端命令
1.NFS 常见进程详解
ps -ef|egrep “rpc|nfs”

rpc 101101 1 0 17:11 ? 00:00:00 /sbin/rpcbind -w
rpcuser 101188 1 0 17:22 ? 00:00:00 /usr/sbin/rpc.statd –no-notify
root 101190 2 0 17:22 ? 00:00:00 [rpciod]
root 101200 1 0 17:22 ? 00:00:00 /usr/sbin/rpc.idmapd
root 101201 1 0 17:22 ? 00:00:00 /usr/sbin/rpc.mountd
root 101206 2 0 17:22 ? 00:00:00 [nfsd4]
root 101207 2 0 17:22 ? 00:00:00 [nfsd4_callbacks]
root 101213 2 0 17:22 ? 00:00:00 [nfsd]
root 101214 2 0 17:22 ? 00:00:00 [nfsd]
root 101215 2 0 17:22 ? 00:00:00 [nfsd]
root 101216 2 0 17:22 ? 00:00:00 [nfsd]
root 101217 2 0 17:22 ? 00:00:00 [nfsd]
root 101218 2 0 17:22 ? 00:00:00 [nfsd]
root 101219 2 0 17:22 ? 00:00:00 [nfsd]
root 101220 2 0 17:22 ? 00:00:00 [nfsd]
root 101243 100830 0 17:28 pts/0 00:00:00 grep -E –color=auto rpc|nfs
nfsd(rpc.nfsd) 主进程,主要是管理客户端能否登入服务端,登入者 ID 判别。
mountd(rpc.mountd) 管理 NFS 文件系统,登入者的权限管理
rpc.lockd(非必要) 用来锁定文件,用于客户端同时写入
rpc.statd(非必要) 检查文件一致性
rpc.idmapd 名字映射后台进程
客户端命令
1. 取消挂载目录
umount /server

2. 如果用在嵌入式设备上挂载,要加上参数 -o nolock
mount -t nfs -o nolock 192.168.1.1:/mnt/server /server

一. 简介
NFS 是单点的,如果一个节点出现问题,那使用它挂载服务的都将出现问题。所以需要高可用,挂掉一台不影响。
采用 keepalived+rsync+inotify-tools

环境: ubuntu16.4
nfs1 192.168.1.1 /mnt/server
nfs2 192.168.1.2 /mnt/server

虚拟地址 192.168.1.3

二. 操作
基本配置
1. 机器之间添加信任关系免密码登录,安装 nfs

2. 有三项输出, 则表示默认支持 inotify, 可以安装 inotify-tools 工具.
ll /proc/sys/fs/inotify

-rw-r—r— 1 root root 0 Oct 18 12:18 max_queued_events
-rw-r—r— 1 root root 0 Oct 18 12:18 max_user_instances
-rw-r—r— 1 root root 0 Oct 18 12:18 max_user_watches

同步配置(2 台服务器均操作)
1. 编写脚本
vim sync_nfs.sh

#!/bin/bash
#监控本地目录,有变动则输出一下
inotifywait -mrq –timefmt ‘%d/%m/%y %H:%M’ –format ‘%T %w%f%e’ -e close_write,delete,create,attrib /mnt/server/ | while read file
do
#将本地同步到远程目录,这里要根据实际情况修改
rsync -avz –delete /mnt/server/ root@192.168.1.1:/mnt/server/
echo "${file} was rsynced" >>/tmp/rsync.log 2>&1
done
2. 添加权限并运行
chmod +x sync_nfs.sh
nohup inotify_bak.sh &

3. 查看日志
tail -f /tmp/rsync.log

4. 提示
如果是主备模式,则一个脚本直接同步即可,如果是双方做备份,则要写 2 个脚本进行互相同步

主备切换(均操作)
1. 安装 keepalived
apt-get install keepalived -y

2. 编写文件,默认可能没有配置文件,直接新建即可
vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs { #全局配置
router_id lb01 #路由 id 号,不能重复
}
vrrp_script nfs #vrrp 脚本命名
{
script “/etc/keepalived/check_nfs.sh” #要执行的脚本
interval 2 #脚本指定间隔
weight -40 #优先级(如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加,如果脚本执行结果非 0,并且 weight 配置的值小于 0,则优先级相应的减少)
}
vrrp_instance VI_1 { #定义一个实例
state MASTER #态参数 master/backup 只是说明,具体根据优先级
interface eth0 #虚 IP 地址放置的网卡位置
virtual_router_id 51 #同一个集群 id 一致
priority 100 #优先级决定是主还是备 越大越优先
advert_int 1 #主备通讯时间间隔
authentication {
auth_type PASS
auth_pass 1111 #认证号,集群中要一致
}
virtual_ipaddress {
192.168.1.3 #使用的虚拟 ip,要和网段内 ip 不冲突
}
}
备份 nfs 配置文件,这是不一样的

! Configuration File for keepalived
global_defs { #全局配置
router_id lb02 #路由 id 号,不能重复
}
vrrp_script nfs #vrrp 脚本命名
{
script “/etc/keepalived/check_nfs.sh” #要执行的脚本
interval 2 #脚本指定间隔
weight -40 #优先级(如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加,如果脚本执行结果非 0,并且 weight 配置的值小于 0,则优先级相应的减少)
}
vrrp_instance VI_1 { #定义一个实例
state BACKUP #态参数 master/backup 只是说明,具体根据优先级
interface eth0 #虚 IP 地址放置的网卡位置
virtual_router_id 51 #同一个集群 id 一致
priority 80 #优先级决定是主还是备 越大越优先
advert_int 1 #主备通讯时间间隔
authentication {
auth_type PASS
auth_pass 1111 #认证号,集群中要一致
}
virtual_ipaddress {
192.168.1.3 #使用的虚拟 ip,要和网段内 ip 不冲突
}
}
3. 编写检查脚本
vim /etc/keepalived/check_nfs.sh

#!/bin/bash
#nfs 服务检测脚本,服务不存在则返回 1
A=ps -aux | grep '\[nfsd\]' | wc -l
if [$A -eq 0];then
exit 1 #测试的时候可以加一个 echo 1
fi
添加权限
chmod +x /etc/keepalived/check_nfs.sh

4. 测试
systemctl start keepalived

查看是否有配置的虚拟 ip,ping 一下试试,只会在主上面出现
ip addr