标签:没有 简洁 test 14. sync 场景 nfs服务器 流程 ase
14.1 NFS介绍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的优缺点分析
优点
缺点
有上面的工作原理可以看出,由较少的客户端访问相对较小的数据集时这种结构工作的很好,通过直接连接的存储器能够收到显著的效益(就象你PC上的磁盘);也就是数据能够由多个客户端共享,能够由任何有NFS能力的客户端访问。可是如果大量的客户端需要访问数据或太大的数据集时,NFS服务器很快就变成了一个瓶颈,抑制了系统性能。
[NFS 处理高性能计算(HPC)一直不够理想。高性能计算涉及到的数据文件非常庞大,并且 NFS 客户机的数量可能达到几千台。(想一想拥有数千个计算节点的计算集群或网格)。在这里,NFS 是一个负担,因为 NFS 服务器的局限性 — 比如带宽、存储容量和处理器速度 — 限制了总体计算性能。NFS 在这里成了瓶颈。]—IBM解释
准备工作:
两台或以上机器,一台作为服务端,其他为客户端,
这里用192.168.66.132作为服务端,安装nfs-utils和rpcbind包,192.168.66.131为客户端,安装nfs-utils包
服务端安装配置
1、 #安装nfs-utils和rpcbind
[root@02 ~]# yum install -y nfs-utils rpcbind
2、#安装完后修改配置文件,指定要进行分享的目录;指定要共享该目录的机器,ip可以ip段,也可以写ip
[root@02 ~]# vim /etc/exports
/home/nfstestdir 192.168.66.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
3、#创建分享目录并制定权限,这里为了实验把权限设置为777
[root@02 ~]# mkdir /home/nfstestdir
[root@02 ~]# chmod 777 /home/nfstestdir
4、#启动服务并查看
[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
5、#启动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
6、#如果想让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配置选项的含义:
? rw 读写
? ro 只读
? sync 同步模式,内存数据实时写入磁盘
? async 非同步模式
? no_root_squash 客户端挂载NFS共享目录后,root用户不受约束,权限很大
? root_squash 与上面选项相对,客户端上的root用户收到约束,被限定成某个普通用户
? all_squash 客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户
? anonuid/anongid 和上面几个选项搭配使用,定义被限定用户的uid和gid
客户端上做一个挂载
1、安装rpcbind,rpcbind包是由nfs-utils自带的包一起安装的。
[root@01 ~]# yum install -y nfs-utils
2、查看服务端分享的目录,这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
3、把服务端分享的目录挂载到本地
[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 显示共享目录
效果测试
1、修改服务端配置文件
vim /etc/exports
#新增一行
/tmp 192.168.66.0/24(rw,sync,no_root_squash)
2、更新配置文件(重新挂载) exportfs -arv //不用重启nfs服务,配置文件就会生效
[root@02 nfstestdir]# exportfs -arv
exporting 192.168.66.0/24:/tmp
exporting 192.168.66.0/24:/home/nfstestdir
3、在客户端查看权限
[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
标签:没有 简洁 test 14. sync 场景 nfs服务器 流程 ase
原文地址:http://blog.51cto.com/13736286/2144019