1.NFS储存服务
1.1 概念说明
NFS是Network File System的缩写中文意思是网络文件共享系统,它的主要功能是通过网络(一般是同域网)让不同的主机系统之间可以共享文件或目录。
NFS客户端(-般为应用服务器,例如web)可以通过挂载(mount) 的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录- -样,而实际上却是远端的NFS服务器的目录。
存储服务的种类:
用于中小型企业存储作用:实现数据共享存储
- FTP存储服务:文件传输协议
运维人员01需要管理服务器01和服务器02,运维人员02需要管理服务器03和服务器04,假设运维人员01需要管理服务器03,怎么办?
在公司部署FTP共享储存服务器,把可以共享数据放在共享存储服务器,方便公司人员管理查看。
案例:中小型充值公司(游戏币,QQ币,话费)→ 每日财务对账信息存储数据库服务器 → 每月财务信息文件上传FTP服务器 → 合作公司(移动,腾讯)可以查账
-
Samba存储服务:实现Linux和Windows之间数据传输存储(Linux部署Samba)
-
NFS存储服务:实现Linux和Linux之间数据传输存储
用于大型门户企业(百度,新浪):利用分布式存储
Moosefs(mfs) 比较落伍,初学学习比较简单
GlusterFS
FastDFS 企业应用较
1.2 NFS储存服务作用
1、实现企业架构数据的共享存储
2、便有数据操作管理
3、节省服务器磁盘使用开销
2.NFS储存服务部署
2.1 RPC管理说明
RPC: 远程过程调用服务程序--- 相当于租房的中介(网络编程支持)
nfs服务启动流程:
第一步:启动RPC服务(中介)
第二步:启动NFS服务进程(房源、房东),把NFS服务端口信息告知RPC服务进程管理
第三步:客户端访问RPC服务,询问NFS服务端口信息
第四步:RPC服务返回客户端信息(NFS服务端口)
第五步:客户端根据端口访问NFS服务器
2.2 NFS服务-rpc管理流程
. 因为NFS的各项功能都需要向RPC服务(rpcbind服务)注册,所以只有RPC服务才能获取到NFS服务的各项功能对应的端口号port、PID、NFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务询问才能找到正确的端口。也就是说,NFS需要有RPC服务的协助才能成功对外提供服务。
2.3 NFS服务部署流程
NFS服务端部署
第一步:下载安装NFS和rpc软件
rpm -qa|grep -E "nfs|rpc"
yum install -y nfs-utils rpcbind
第二步:编写nfs配置文件
# 1.查看nfs配置参数 man exports
exports - NFS server export table 翻译:NFS服务配置导出表
# 2.编写配置文件 /etc/exports
[root @nfs ~ ]# vim /etc/exports
/date 172.16.1.0/24(rw,sync)
配置文件格式:存储目录 网段白名单(参数1,参数2.....)
第一列:设置数据存储目录 /date
第二列:设置nfs服务网络白名单(允许哪些网段主机可以连接存储服务器进行数据存储)
第三列:设置存储目录权限,目录一些功能信息(说明:设置信息需要小括号中,紧跟第二列白名单)
第三步:创建存储目录,对目录进行用户授权(设置存储目录属主属组为nfsnobody)
# 设置存储目录属主信息
mkdir -p /date && chown -R nfsnobody.nfsnobody /date
# 查看存储目录设置
[root @nfs ~ ]# ll /date -d
drwxr-xr-x 2 nfsnobody nfsnobody 6 Sep 30 12:36 /date
说明:nfsnobody是安装nfs-utils服务软件自动创建虚拟用户,用于管理存储目录
第四步:启动nfs服务
PS:nfs服务端口由rpc服务管理,启动顺序:先启动rpc服务,再启动nfs服务
# 启动rpc服务
systemctl restart rpcbind.service
systemctl enable rpcbind.service
# 查看服务启动端口
[root @nfs ~ ]# netstat -lntup| grep rpc
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 10662/rpcbind
tcp6 0 0 :::111 :::* LISTEN 10662/rpcbind
# 启动nfs存储服务
systemctl restart nfs PS:tab补全可以看到nfs一推服务,systemctl restart nfs可以一块启动
systemctl enable nfs
说明:nfs服务端口信息交给rpc服务管理,netstat命令没法查看端口信息
NFS客户端部署
实现远程挂载共享存储目录
[root @backup ~ ]# mount -t nfs nfs:/date /mnt/nfs
mount: wrong fs type, bad option, bad superblock on nfs:/date,
错误原因:Linux系统本身不识别nfs文件系统,wrong file system type 无法识别文件类型
# 第一步:安装nfs-utils软件,让Linux识别nfs文件系统
yum install -y nfs-utils
# 第二步:实现远程挂载nfs共享存储目录
mount -t nfs 172.16.1.31:/date /mnt/nfs
参数说明:mount -t 指定挂载文件类型
NFS服务部署完毕,测试客户端存储数据
# 测试第一步:backup备份服务器在共享目录创建一个文件
[root @backup ~ ]# touch /mnt/nfs/backup_date.txt
[root @backup ~ ]# ll /mnt/nfs/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Sep 2 10:09 backup_date.txt
# 测试第二步:web和nfs查看共享数据
[root @nfs ~ ]# ll /date
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Sep 2 10:07 backup_date.txt
[root @web01 ~ ]# ll /mnt/nfs/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Sep 2 10:09 backup_date.txt
# 测试第三步:web服务器修改backup_date.txt内容信息,在其他服务器查看
[root @web01 ~ ]# echo 123456 >/mnt/nfs/backup_date.txt
[root @nfs ~ ]# cat /date/backup_date.txt
123456
3. NFS服务工作原理
服务端工作原理
第一步:启动PRC服务,开启111服务端口
第二步:启动NFS服务
第三步:实现NFS服务进程和端口号信息向RPC服务注册
客户端工作原理
第一步:客户端和服务端建立TCP网络连接
第二步:客户端执行挂载命令,进行远程挂载
第三步:实现数据远程存储共享目录
补充:查看NFS服务开启,服务进程和端口注册RPC管理信息
# 停止NFS服务和RPC管理服务
[root @nfs ~ ]# systemctl stop nfs
[root @nfs ~ ]# systemctl stop rpcbind.service
Warning: Stopping rpcbind.service, but it can still be activated by:
rpcbind.socket
[root @nfs ~ ]# systemctl stop rpcbind.socket
# 重新启动RCP服务,NFS服务没有注册端口。查看RPC本来端口信息
[root @nfs ~ ]# systemctl restart rpcbind.service
[root @nfs ~ ]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
说明:rpcinfo查看NFS和RPC服务端口信息 -p 指定查看主机信息(localhost表示查看本地主机RPC信息
# 启动NFS服务,查看注册端口信息
systemctl restart nfs
rpcinfo -p 172.16.1.31
注意:由于NFS服务端口是随机的,当NFS服务重启,部分服务端口信息会改变!!!
4. NFS配置文件说明
1. 配置文件格式
/etc/exports配置实现多个网段主机可以进行挂载
第一种方式:
/data 172.16.1.0/24(rw,sync) 10.0.0.0/24(rw,sync)
格式:NFS存储目录 NFS服务地址1(参数1,参数2...)NFS服务地址2(参数1,参数2...)
第一列:/data为要共享的NFS服务器端的目录,注意,被共享的目录一定要用绝对路径
第二列:10.0.0.0/24表示允许NFS客户端访问共享目录的网段范围。24表示255.255.255.0
第三列:(rw,sync)中的rw表示允许读写,sync 表示数据同步写入到NFS服务器端的硬盘中
第二种方法:
/data 172.16.1.0/24(rw,sync)
/data 10.0.0.0/24(rw,sync)
2. 共享目录的权限问题
1)和存储目录的本身权限有关 (755 属主:nfsnobody)
[root @backup ~ ]# ll /mnt/nfs -d
dr-x-w--w- 2 nfsnobody nfsnobody 47 Sep 2 11:01 /mnt/nfs
[root @backup ~ ]# touch /mnt/nfs/1.txt
touch: cannot touch ‘/mnt/nfs/1.txt’: Permission denied
说明:挂载存储目录权限不是755以上,提示没有权限touch
2)和配置文件中的权限配置有关 rw/ro
# 修改nfs配置参数为 rw → ro ,设置只读目录数据
[root @nfs ~ ]# cat /etc/exports
/date 172.16.1.0/24(ro,sync)
[root @nfs ~ ]# systemctl restart nfs
# 设置ro参数,无法创建文件
[root @backup ~ ]# touch /mnt/nfs/1.txt
touch: cannot touch ‘/mnt/nfs/1.txt’: Read-only file system
3)和客户端挂载命令的参数有关 ro/rw 等
3. NFS配置参数权限
rw 存储目录是否有读写权限
ro 存储目录是否时只读权限
sync 同步方式存储数据 直接将数据保存到磁盘(数据存储安全)
async 异步方式存储数据 直接将数据保存到内存(提高数据存储效率)
no_root_squash 不要将root用户身份进行转换 (默认参数)
root_squash 将root用户身份进行转换
all_squash 将所有普通用户身份都进行转换
no_all_squash 不要将普通用户身份进行转换(默认参数)
操作演示一:all_squash参数功能
# nfs服务端修改配置文件参数
[root @nfs ~ ]# cat /etc/exports
/date 172.16.1.0/24(rw,sync,all_squash)
[root @nfs ~ ]# systemctl restart nfs
# 客户端backup挂载存储目录,创建数据。(需要重新挂载共享目录)
[root @backup ~ ]# mount -t nfs 172.16.1.31:/date /mnt/nfs
[root @backup ~ ]# su - xuan
[xuan @backup ~ ]$ touch /mnt/nfs/xuan_backup.txt
[xuan @backup ~ ]$ ll /mnt/nfs/xuan_backup.txt
-rw-rw-r-- 1 nfsnobody nfsnobody 0 Sep 3 08:55 /mnt/nfs/xuan_backup.txt
操作演示二:no_all_squash参数功能
# nfs服务端修改配置文件参数
[root @nfs ~ ]# cat /etc/exports
/date 172.16.1.0/24(rw,sync,no_all_squash)
# 客户端操作,没有权限创建。原因:no_all_squash取消其他用户映射nfsnobody身份,以共享目录其他身份权限操作
[xuan @backup ~ ]$ touch /mnt/nfs/xuan_backup_no_squash.txt
touch: cannot touch ‘/mnt/nfs/xuan_backup_no_squash.txt’: Permission denied
解决权限问题:
1.修改目录属主信息
2.修改目录其他用户权限
chmod o+w /date
操作演示三:root_squash参数功能
# nfs服务端修改配置文件参数
[root @nfs ~ ]# cat /etc/exports
/date 172.16.1.0/24(rw,sync,root_squash)
# 客户端使用root用户创建数据
[root @backup ~ ]# touch /mnt/nfs/root_date.txt
[root @backup ~ ]# ll /mnt/nfs/root_date.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Sep 3 09:21 /mnt/nfs/root_date.txt
4. 企业互联网公司如何配置NFS 各种squash参数
保证存储目录数据的安全性
配置参数一:no_all_squash 禁止其他用户访问共享目录,可以删除数据或者存储数据
说明1:当nfs存储目录配置all_squash参数,其他用户会以nfsnobody身份访问共享目录,其他用户可以进入共享目录进行创建删除数据操作
说明2:配置 no_all_squash 参数,其他用户以共享目录其他用户身份权限操作
问题:配置no_all_squash,当web服务的站点用户www如何存储数据?
[root @nfs ~ ]# cat /etc/exports
/date 172.16.1.0/24(rw,sync,no_all_squash)
# 第一步: nfs服务器操作:创建www用户,设置共享目录/date属主属组信息
[root @nfs ~ ]# useradd www;echo 123456 |passwd --stdin www
[root @nfs ~ ]# id www
uid=2001(www) gid=2001(www) groups=2001(www)
[root @nfs ~ ]# chown -R www. /date
[root @nfs ~ ]# ll -d /date
drwxr-xr-x 2 www www 217 Sep 3 11:53 /date
# 第二步:web服务器(客户端)以www用户存储数据
[root @web01 ~ ]# su - www
[root @web01 ~ ]# useradd www -u 1001
[www @web01 ~ ]$ touch /mnt/nfs/www_date.txt
说明:当让www用户可以管理共享目录,方法是把共享存储目录修改属主信息为www用户,确保客户端www用户必须和服务端www用户uid号码一致,否则没有权限操作目录数据
配置参数二:root_squash
说明:当修改共享目录属主不是nfsnobody时,root用户也不可以修改共享目录数据。原因:root_squash默认把root用户转换为nfsnobody用户
此时nfsnobody为共享目录其他用户身份操作,没有权限修改数据
# 修改nfs配置文件,并且共享目录不是nfsnobody
[root @nfs ~ ]# vim /etc/exports
/date 172.16.1.0/24(rw,sync,no_all_squash,root_squash)
# 客户端以root用户身份也无法操作
[root @web01 ~ ]# touch /mnt/nfs/root_date.txt
touch: cannot touch ‘/mnt/nfs/root_date.txt’: Permission denied
以上默认配置(很多服务默认配置都是从安全角度出发)
如何查看nfs默认配置 /val/lib/nfs/etab
[root @nfs ~ ]# cat /var/lib/nfs/etab
/var/lib/nfs/etab文件作用:只是记录nfs服务默认配置信息,不会对nfs服务产生影响
nfs服务配置文件参数:no_all_squash,root_squash ,如何让root用户可以管理www属主共享目录?
root → root_squash → www → 管理/date
客户端root用户可以映射nfs服务端www = 1001管理数据
[root @nfs ~ ]# vim /etc/exports
/date 172.16.1.0/24(rw,sync,no_all_squash,root_squash,anonuid=1001,anongid=1001)
nfs配置参数:
anonuid = 65534 指定客户端用户映射服务端用户uid号码
anongid = 65534 指定客户端用户组映射服务端用户组gid号码
说明:65534用户就是nfs服务创建的nfsnobody用户,但是nfsnobody虚拟用户,也有家目录
[root @nfs ~ ]# grep 65534 /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
5. 企业中如何编辑nfs配置文件
1. 通用方法 *****
/data 172.16.1.0/24(rw,sync)
- 特殊情况 (让部分人员不能操作存储目录 可以看目录中的数据)
/data 10.0.0.0/24(ro,sync)
- 修改默认的匿名用户
/data 10.0.0.0/24(ro,sync,anonuid=xxx,anongid=xxx)
5. nfs服务问题
nfs服务器重启,挂载后创建数据比较慢
原因:服务器重启方式不正确
重启方式一:restart 重启服务 强制断开所有连接 用户感受不好
说明:当多台客户端访问服务端建立网络连接时,其中俩台客户端主机向服务端传输数据,服务端突然 restart 重启服务,会把和服务端建立所有连接强制断开,影响数据传输。 再次重新连接连接的冷却时间为90秒(就是TCP的walk_time)
重启方式二:reload 重启服务(平滑重启) 强制断开没有数据传输的连接 提升用户感受
说明:reload 重启服务,先会把没有数据传输连接断开,再等待数据传输完毕之后断开连接
6. NFS客户端配置详细说明
客户端挂载共享目录
mount -t nfs 172.16.1.31:/date /mnt/nfs
参数说明:mount -t 指定挂载文件系统类型
# 实现开机自动挂载共享目录
方法一:利用开机脚本 rc.local
echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
方法二. 利用fstab文件
vim /etc/fstab
172.16.1.31:/data /mnt nfs defaults 0 0
问题:编写fstab文件,无法开机自动挂载网络共享存储目录?
centos6:无法实现网路存储服务自动挂载原因(依赖autofs服务)
centos6是串行启动服务方式,按照服务启动先后顺序启动对应服务程序,直到最后一个服务启动完毕才算服务器服务开机启动时间
顺序依次启动 network服务--- sshd服务--- crond服务--- rsync服务--- rpcbind服务--- nfs服务
实现开机挂载:
1.先加载fstab文件 ,加载最后一行共享目录挂载时,主机的网络服务还没有启动,导致无法挂载
2.启动系统其它服务 network
3.启动 aotufs服务
作用:开机启动autofs服务,会重新加载fstab配置文件信息。实现开机可以挂载共享目录
centos7:无法实现网路存储服务自动挂载原因(依赖remote-fs.target服务)
centos7是并行启动服务方法,把系统所有开机启动服务一并进行启动,开机启动时间取决于最慢启动服务数据
顺序依次启动
network服务
sshd服务
crond服务
rsync服务
实现开机挂载:需要开机启动centos7特殊加载fstab服务 remote-fs.target
systemctl start remote-fs.target
systemctl enable remote-fs.target
客户端mount命令参数
rw 实现挂载后挂载点目录可读可写 (默认)
ro 实现挂载后挂载点目录可读可写
suid 在共享目录中可以让setuid权限位生效 (默认)
nosuid 在共享目录中可以让setuid权限位失效 提供共享目录的安全性
exec 共享目录中的执行文件可以直接执行(默认)
noexec 共享目录中的执行文件可以无法直接执行 提供共享目录的安全性
auto 可以实现自动挂载 (默认) root用户:mount -a 实现加载fstab文件自动挂载
noauto 不可以实现自动挂载
nouser 禁止普通用户可以卸载挂载点(默认)
user 允许除了root的普通用户可以卸载挂载点 选项隐含了 noexec, nosuid, nodev 选项,除非你特意进行了修改(比如:users,exec,dev,suid
users 允许任意用户可以卸载挂载点
# 配置 user参数,普通用户无法卸载??
[xuan @web01 ~ ]$ tail -1 /etc/fstab
172.16.1.31:/date /mnt/nfs nfs auto,user 0 0
[xuan @web01 ~ ]$ umount /mnt/nfs
umount: /mnt/nfs: umount failed: Operation not permitted
# 配置 users参数,可以实现普通用户卸载
[xuan @web01 ~ ]$ tail -1 /etc/fstab
172.16.1.31:/date /mnt/nfs nfs auto,users 0 0
[xuan @web01 ~ ]$ umount /mnt/nfs
说明:配置参数users配合aotu实现普通用户卸载共享目录挂载
客户端如何卸载
umount -lf /mnt/nfs 表示:强制卸载挂载点
参数说明:
umount -l 表示不退出挂载点目录进行卸载
umount -f 表示强制进行卸载