NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它容许网络中的计算机之间经过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用能够透明地读写位于远端NFS服务器上的文件,就像访问本地文件同样
NFS最先由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本
NFS数据传输基于RPC协议,RPC为Remote Procedure Call的简写。
NFS应用场景是:A,B,C三台机器上须要保证被访问到的文件是同样的,A共享数据出来,B和C分别去挂载A共享的数据目录,从而B和C访问到的数据和A上的一致
NFS原理图: 服务端须要启动一个NFS服务,服务端要想给客户端提供服务,须要借助RPC协议,RPC协议是由rpcbind服务实现;在centos 5或者以前的版本叫portmap服务;以后的版本叫rpcbind服务;NFS服务默认不会监放任何端口;最终实现NFS服务,须要借助rpcbind服务产生的RPC协议,RPC协议默认监听的端口是111; 整个流程为:服务端的NFS服务监听一个端口经过RPC协议监听的端口,告诉客户端RPC协议,而后客户端经过本机的RPC端口回传数据信息到服务端NFS监听的端口,最终实现通讯
NFS的优缺点分析mysql
优势 linux
缺点
有上面的工做原理能够看出,由较少的客户端访问相对较小的数据集时这种结构工做的很好,经过直接链接的存储器可以收到显著的效益(就象你PC上的磁盘);也就是数据可以由多个客户端共享,可以由任何有NFS能力的客户端访问。但是若是大量的客户端须要访问数据或太大的数据集时,NFS服务器很快就变成了一个瓶颈,抑制了系统性能。
[NFS 处理高性能计算(HPC)一直不够理想。高性能计算涉及到的数据文件很是庞大,而且 NFS 客户机的数量可能达到几千台。(想想拥有数千个计算节点的计算集群或网格)。在这里,NFS 是一个负担,由于 NFS 服务器的局限性 — 好比带宽、存储容量和处理器速度 — 限制了整体计算性能。NFS 在这里成了瓶颈。]—IBM解释nginx
准备工做:
两台或以上机器,一台做为服务端,其余为客户端,
这里用192.168.66.132做为服务端,安装nfs-utils和rpcbind包,192.168.66.131为客户端,安装nfs-utils包
服务端安装配置sql
一、 #安装nfs-utils和rpcbind [root@02 ~]# yum install -y nfs-utils rpcbind 二、#安装完后修改配置文件,指定要进行分享的目录;指定要共享该目录的机器,ip能够ip段,也能够写ip [root@02 ~]# vim /etc/exports /home/nfstestdir 192.168.66.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000) 三、#建立分享目录并制定权限,这里为了实验把权限设置为777 [root@02 ~]# mkdir /home/nfstestdir [root@02 ~]# chmod 777 /home/nfstestdir 四、#启动服务并查看 [root@02 ~]# systemctl start rpcbind [root@02 ~]# ps aux |grep rpcbind rpc 1593 0.2 0.1 65000 1040 ? Ss 09:56 0:00 /sbin/rpcbind -w root 1595 0.0 0.0 112720 972 pts/0 S+ 09:56 0:00 grep --color=auto rpcbind [root@02 ~]# netstat -lnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1593/rpcbind tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 812/nginx: master p tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 790/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1112/master tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 812/nginx: master p tcp6 0 0 :::111 :::* LISTEN 1593/rpcbind tcp6 0 0 :::22 :::* LISTEN 790/sshd tcp6 0 0 ::1:25 :::* LISTEN 1112/master tcp6 0 0 :::3306 :::* LISTEN 1095/mysqld udp 0 0 0.0.0.0:920 0.0.0.0:* 1593/rpcbind udp 0 0 0.0.0.0:111 0.0.0.0:* 1593/rpcbind udp 0 0 127.0.0.1:323 0.0.0.0:* 535/chronyd udp6 0 0 :::920 :::* 1593/rpcbind udp6 0 0 :::111 :::* 1593/rpcbind udp6 0 0 ::1:323 :::* 535/chronyd raw6 0 0 :::58 :::* 7 543/NetworkManager 五、#启动nfs服务,在启动nfs服务后会自动启动rpc相关的其余服务。 [root@02 ~]# systemctl start nfs [root@02 ~]# ps aux |grep rpc rpc 1593 0.0 0.1 65000 1416 ? Ss 09:56 0:00 /sbin/rpcbind -w rpcuser 1629 0.0 0.1 42420 1756 ? Ss 10:04 0:00 /usr/sbin/rpc.statd root 1631 0.0 0.0 0 0 ? S< 10:04 0:00 [rpciod] root 1640 0.0 0.0 19360 400 ? Ss 10:04 0:00 /usr/sbin/rpc.idmapd root 1643 0.0 0.0 42608 944 ? Ss 10:04 0:00 /usr/sbin/rpc.mountd root 1682 0.0 0.0 112720 972 pts/0 R+ 10:05 0:00 grep --color=auto rpc 六、#若是想让nfs服务开机自启动,还须要执行如下命令。 [root@02 ~]# systemctl enable nfs Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@02 ~]# cat /etc/exports /home/nfstestdir 192.168.66.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000) #括号里面的为权限相关的一些配置选项
NFS配置选项的含义:shell
• rw 读写vim
• ro 只读windows
• sync 同步模式,内存数据实时写入磁盘centos
• async 非同步模式数组
• no_root_squash 客户端挂载NFS共享目录后,root用户不受约束,权限很大安全
• root_squash 与上面选项相对,客户端上的root用户收到约束,被限定成某个普通用户
• all_squash 客户端上全部用户在使用NFS共享目录时都被限定为一个普通用户
• anonuid/anongid 和上面几个选项搭配使用,定义被限定用户的uid和gid
客户端上作一个挂载
一、安装rpcbind,rpcbind包是由nfs-utils自带的包一块儿安装的。
[root@01 ~]# yum install -y nfs-utils
二、查看服务端分享的目录,这showmount -e 加服务端的ip查看
[root@01 ~]# showmount -e 192.168.66.132 clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
#若是出现上面的报错,说明网络不通,没有办法和192.168.66.132的111端口通信,要么是对方的rpcbind服务没有开启,若是服务开启了还不行,那就是防火墙的关系致使。须要配置防火墙放行nfs服务和rpcbind服务的端口
这是做测试用,把服务端和客户端的防火墙都关闭,包括selinux。
[root@02 ~]# systemctl stop firewalld 关闭服务端防火墙 [root@02 ~]# setenforce 0 [root@01 ~]# systemctl stop firewalld 关闭客户端防火墙 [root@01 ~]# setenforce 0
再用showmount -e查看,就能够看到服务端分享的目录和容许的ip
[root@01 ~]# showmount -e 192.168.66.132 Export list for 192.168.66.132: /home/nfstestdir 192.168.66.0/24
三、把服务端分享的目录挂载到本地
[root@01 ~]# mount -t nfs 192.168.66.132:/home/nfstestdir /mnt [root@01 ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda3 18G 7.1G 11G 40% / devtmpfs 479M 0 479M 0% /dev tmpfs 489M 0 489M 0% /dev/shm tmpfs 489M 6.8M 482M 2% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sda1 197M 97M 100M 50% /boot tmpfs 98M 0 98M 0% /run/user/0 192.168.66.132:/home/nfstestdir 18G 5.4G 13G 30% /mnt
nfs服务不能随便重启,不然可能致使客户端的nfs服务被挂起,所以可使用exportfs命令在不重启服务的前提下更新配置文件。
经常使用选项
• -a 所有挂载或者所有卸载
• -r 从新挂载
• -u 卸载某一个目录
• -v 显示共享目录
效果测试
一、修改服务端配置文件
vim /etc/exports #新增一行 /tmp 192.168.66.0/24(rw,sync,no_root_squash)
二、更新配置文件(从新挂载) exportfs -arv //不用重启nfs服务,配置文件就会生效
[root@02 nfstestdir]# exportfs -arv exporting 192.168.66.0/24:/tmp exporting 192.168.66.0/24:/home/nfstestdir
三、在客户端查看权限
[root@01 mnt]# showmount -e 192.168.66.132 Export list for 192.168.66.132: /tmp 192.168.66.0/24 /home/nfstestdir 192.168.66.0/24
注:客户端重启后,要从新挂载共享目录,要想开机自动挂载,能够把挂载命令写到/etc/fstab里
针对NFS4版本存在以下问题:
客户端挂载共享目录后,不论是root用户仍是普通用户,建立新文件时属主、数组为nobody。
解决方法:
方法1:在客户端进行挂载时加上选项-o nfsvers=3
[root@01 ~]# mount -t nfs -o nfsvers=3 192.168.230.135:/tmp/ /mnt/
若是目录已经挂载,而又不想卸载,执行以下命令:
[root@01 ~]# mount -t nfs -oremount,nfsvers=3 192.168.230.135:/tmp/ /mnt/
方法2:客户端和服务端都须要
•客户端和服务端都须要
• vim /etc/idmapd.conf // • 把“#Domain = local.domain.edu” 改成 “Domain = xxx.com” (这里的xxx.com,随意定义吧),而后再重启rpcbind服务
平常使用rz,sz命令进行文件互传时会有不少限制,好比传输大小不能超出4G,不能给云端主机传输文件,针对上述问题,可经过在服务端搭建ftp服务器解决
• FTP是File Transfer Protocol(文件传输协议,简称文传协议)的英文简称,用于在Internet上控制文件的双向传输。
• FTP的主要做用就是让用户链接一个远程计算机(这些计算机上运行着FTP服务器程序),并查看远程计算机中的文件,而后把文件从远程计算机复制到本地计算机,或把本地计算机的文件传送到远程计算机。
• 小公司用的多,大企业不用FTP,由于不安全
centos自带ftp服务的软件包是vsftpd,直接下载安装便可。
安装vsftpd软件包
yum install -y vsftpd
建立登陆ftp的用户
useradd -s /sbin/nologin virftp //不容许登陆系统,用于给虚拟用户作映射
vsftpd软件包是可使用系统级别的用户,假设建立了一个普通用户luo,设置一个密码,这时候就能够用vsftpd启动这个服务,而后用user1这个用户去登录,登陆的形式为ftp,登陆进去后会进入到luo这个用户的家目录下,但这样操做会存在安全隐患。
为了解决上述隐患,咱们能够给ftp设置一个虚拟用户,虚拟用户映射成系统中的一个普通用户(也能够映射多个虚拟用户),这个用户即便给了用户和密码你也是没有办法去经过ssh登陆到服务器的机器,这样就相对安全了不少。
编辑虚拟用户自定义密码文件
vim /etc/vsftpd/vsftpd_login //奇数行为用户名,偶数行为密码,多个用户就写多行 ftpuser 123456
改下文件权限
chmod 600 /etc/vsftpd/vsftpd_login
密码文件格式转换
db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
建立虚拟用户配置文件所在目录
mkdir /etc/vsftpd/vsftpd_user_conf
在目录下建立虚拟用户配置文件
vim ftpuser //虚拟用户的配置文件的文件名须要与密码文件中建立的用户的名字一致 local_root=/home/virftp/ftpuser //定义虚拟用户家目录 anonymous_enable=NO //是否容许匿名用户 write_enable=YES //是否容许可写 local_umask=022 //建立新文件目录的默认权限 anon_upload_enable=NO //是否容许匿名用户上传 anon_mkdir_write_enable=NO //是否容许匿名用户建立目录和写 idle_session_timeout=600 //链接超时时间 data_connection_timeout=120 //数据传输超时时间 max_clients=10 //最大客户端数
建立虚拟用户家目录
mkdir /home/virftp/ftpuser
在家目录下建立测试文件
touch /home/virftp/ftpuser/test.txt
修改用户权限
chown -R virftp:virftp /home/virftp
将权限作一个修改,由于最后映射成virftp 这个用户,若virftp这个用户没有读的权力那就是错误的,没法正常的去上传和下载
定义密码文件的所在位置
vim /etc/pam.d/vsftpd #增长两行 auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
这是一个用来认证的文件,在登陆FTP须要有一个认证的过程,认证的过程须要告诉它,经过什么样的形式去认证,认证的时候去×××这个密码库
注:32位的centos系统的文件名应为lib32
编辑vsftpd的主配置文件
vim /etc/vsftpd/vsftpd.conf 将anonymous_enable=YES 改成 anonymous_enable=NO 将#anon_upload_enable=YES 改成 anon_upload_enable=NO 将#anon_mkdir_write_enable=YES 改成 anon_mkdir_write_enable=NO 在文件最下方增长以下内容 chroot_local_user=YES guest_enable=YES //打开虚拟用户映射 guest_username=virftp //映射的用户名 virtual_use_local_privs=YES //声明使用的用户为虚拟用户 user_config_dir=/etc/vsftpd/vsftpd_user_conf //定义虚拟用户配置文件所在路径 allow_writeable_chroot=YES
启动vsftpd服务
systemctl start vsftpd
若是启动不了服务,能够把 /etc/vsftpd/vsftpd.conf 中的listen_ipv6=YES,而后把上一个listen=NO改为listen=YES
查看监听端口
[root@01 vsftpd_user_conf]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 3319/vsftpd
监听端口为21
ftp测试
Windows端
Windows可使用filezilla客户端开源软件,十分方便
Linux端
Linux为了方便测试采用lftp
安装lftp包
[root@01 ~]# yum -y install lftp
链接FTP服务器
[root@01 ~]# lftp ftpuser@127.0.0.1 口令: lftp ftpuser@127.0.0.1:~> ls -rw-r--r-- 1 0 0 0 Jul 16 10:20 test.txt
注:使用?可查看ftp可用命令,经常使用命令put、get
下载test文件
lftp ftpuser@127.0.0.1:/> get test.txt lftp ftpuser@127.0.0.1:/> quit [root@01 ~]# ls anaconda-ks.cfg test.txt
经过xshell实现ftp功能有两种方法,经过sftp和xftp
sftp
经过xshell的会话,使用sftp协议链接服务器
登陆后能够正常使用命令,也可使用get下载文件
sftp:/root> get test.txt Fetching /root/test.txt to test.txt sftp: received 0 ???in 0.02 seconds
下载文件的存放位置在属性中设置
xftp
xftp经过在xshell界面经过快捷键ctrl+alt+f使用,首次使用会弹出对话框提示下载安装。
安装完成后,须要先经过ssh登陆到一台主机,使用Ctrl+alt+f唤出xftp,便可正常使用。
注:xftp走的是ssh协议,不属于ftp,这种只要是linux开启了sshd服务就能够用;
vsftp获取其余ftp软件实现的是ftp服务,windows上能够搭建,linux上也能够搭建
pure-ftpd相比于vsftpd更加轻量化,搭建FTP服务器时更加简洁。
安装pure-ftpd软件包
yum install -y epel-release yum install -y pure-ftpd
若是以前有启动过别的ftp服务,须要中止vsftpd服务
systemctl stop vsftpd
因为vsftpd和pure-ftpd同属于ftp服务,都须要监听21端口,若是二者同时运行会发生冲突
编辑pure-ftpd配置文件
vim /etc/pure-ftpd/pure-ftpd.conf//找到pureftpd.pdb这行,把行首的#删除 修改文件容许pure-ftpd服务指定密码文件
启动pure-ftpd服务
systemctl start pure-ftpd
建立测试目录
测试目录用于pure-ftpd的虚拟用户使用
mkdir /data/ftp
建立普通用户
useradd -u 1020 pure-ftp
修改用户权限
chown -R pure-ftp:pure-ftp /data/ftp
建立虚拟用户
pure-pw useradd ftp_usera -u pure-ftp -d /data/ftp //虚拟用户名为ftp_usera
pure-ftpd服务一样须要一个或多个虚拟用户映射到一个系统用户
pure-pw --help能够查看pure-pw命令的用法
密码文件格式转换
pure-pw mkdb
效果测试
[root@l01 ~]# touch /data/ftp/test1234.txt [root@01 ~]# lftp ftp_usera@127.0.0.1 口令: lftp ftp_usera@127.0.0.1:~> ls drwxr-xr-x 2 1020 pure-ftp 16 Jul 3 10:43 . drwxr-xr-x 2 1020 pure-ftp 16 Jul 3 10:43 .. -rw-r--r-- 1 1020 pure-ftp 16Jul 3 10:43 test1234.txt
咱们能够看到属主为uid,属组映射为系统中组的名字pure-ftpd