zoukankan      html  css  js  c++  java
  • NFS 服务

    NFS服务

    课程目标

    • 了解NFS服务器的应用场景及特点
    • 掌握NFS服务器实现读/写文件共享
    • 掌握NFS Client访问及挂载

    一、NFS服务介绍

    NFS(Network File System)网络文件系统

    • 主要用于Linux系统上实现文件共享的一种协议,其客户端主要是Linux
    • 没有用户认证机制,且数据在网络上传送的时候是明文传送,一般只能在局域网中使用
    • 支持多节点同时挂载及并发写入

    企业应用:为集群中的web server提供后端存储

    该服务包括的组件:

    RPC(Remote Procedure Protocol):

    远程过程调用协议:它是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议。

    rpcbind // 负责NFS的数据传输,远程过程调用 tcp协议 端口111

    nfs-utils // 控制共享哪些文件,权限管理


    二、NFS服务器搭建

    [root@server ~]# rpm -q rpcbind
    rpcbind-0.2.0-11.el6.x86_64
    [root@server ~]# rpm -qa |grep ^nfs
    nfs-utils-1.2.3-39.el6.x86_64	// nfs服务的一个脚本控制工具(服务端与客户端)
    nfs-utils-lib-1.1.5-6.el6.x86_64	// nfs库文件
    nfs4-acl-tools-0.3.3-6.el6.x86_64	// acl工具包
    
    
    /etc/exports 	man 5 exports
    
    共享目录		共享选项
    /share/nfs		*(ro,sync)
    共享主机:
    * :代表所有主机
    192.168.0.0/24:代表共享给某个网段
    192.168.0.0/24(rw) 192.168.1.0/24(ro):代表共享给不同网段
    192.168.0.254:共享给某个IP
    *.itcast.com:代表共享给某个域下的所有主机
    共享选项:
    ro:只读
    rw:读写
    sync:实时同步,直接写入磁盘
    async:异步,先缓存在内存再同步磁盘
    anonuid:设置服务nfs服务的用户的uid,uid需要在/etc/passwd中存在
    anongid:设置服务nfs服务的用户的gid
    root_squash:默认选项 root用户创建的文件的属主和属组都变成nfsnobody,其他人server端是它自己,client端是nobody。
    no_root_squash:root用户创建的文件属主和属组还是root,其他人server端是它自己uid,client端是nobody。
    all_squash:不管是root还是其他普通用户创建的文件的属主和属组都是nfsnobody
    
    nfs服务端的用户会影响客户端访问。
    在文件系统中,区别用户看UID。
    no_root_squash,客户端创建了一个文件,在nfs服务端没有对应的用户,那么显示属主的时候显示和客户端文件创建者UID相同的用户为属主。
    

    需求1:共享本地/share/nfs目录给所有人,以读写方式共享

    1、mkdir /share/nfs -p
    2.vim /etc/exports
    /share/nfs  *(rw)
    3.启动服务
    [root@server ~]# service rpcbind restart
    Stopping rpcbind:                                          [  OK  ]
    Starting rpcbind:                                          [  OK  ]
    [root@server ~]# service nfs start
    Starting NFS services:                                     [  OK  ]
    Starting NFS quotas:                                       [  OK  ]
    Starting NFS mountd:                                       [  OK  ]
    Starting NFS daemon:                                       [  OK  ]
    Starting RPC idmapd:                                       [  OK  ]
    [root@server ~]# netstat -nltp|grep rpcbind
    tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      4428/rpcbind        
    tcp        0      0 :::111                      :::*                        LISTEN      4428/rpcbind  
    
    4.客户端测试
    [root@client ~]# mkdir /u01
    [root@client ~]# mount.nfs 10.1.1.2:/share/nfs /u01		// 挂载到本地/u01
    [root@client ~]# df -h
    Filesystem           Size  Used Avail Use% Mounted on
    /dev/sda5             16G  3.7G   12G  25% /
    tmpfs                491M   72K  491M   1% /dev/shm
    /dev/sda1            194M   30M  155M  16% /boot
    /dev/sda3            2.0G   37M  1.8G   2% /home
    /dev/sr0             4.2G  4.2G     0 100% /media
    10.1.1.2:/share/nfs   16G  3.8G   12G  26% /u01
    
    测试写入
    [root@client ~]# cd /u01
    [root@client u01]# ls
    file1  file2  file3  file4  file5
    [root@client u01]# touch file6
    touch: cannot touch `file6': Permission denied		// 目录权限拒绝
    原因:server端的共享目录权限不够
    解决:[root@server ~]# chmod o+w /share/nfs
    重新测试,touch file6,在server端ls /share/nfs 显示如下
    -rw-r--r-- 1 nfsnobody nfsnobody 0 Apr 22 23:04 file6
    

    练习:

    1.搭建一个NFS 服务,将本机的/share/nfs 目录共享给192.168.91.0/24网段(以读写方式)和10.1.1.2,10.1.1.3主机(以只读方式)
    server端:
    1. mkdir /share/nfs
    2. vim /etc/exports
    /share/nfs  192.168.91.0/24(rw) 10.1.1.2(ro) 10.1.1.3(ro)
    
    client端
    1. 创建一个空目录作挂载点 /u01
    2. mount.nfs 10.1.1.2:/share/nfs /u01或者
    mount -t nfs 10.1.1.2:/share/nfs /u01
    
    

    示例1:NFS自动挂载目录

    首先:
    1. A主机上:
    需要创建相应的用户user1~3, eg:user1 --> /user1(挂载点)
    2. B主机上:
    搭建nfs服务,将/share/nfs共享出来
    3. A主机上:
    挂载B主机上的共享目录到指定挂载点上
    测试验证:
    在A主机进行
    
    环境:ftp-server:10.1.1.2	(主机名是server,临时作为ftp-server搭建nfs共享目录的挂载点)
    nfs-server:10.1.1.3 (主机名是client,临时修改hostname为此)
    client:10.1.1.4 (主机名是web2,临时作为客户端测试验证)
    
    第一步.ftp-server:
    创建用户并且指定用户家目录
    [root@server ~]# useradd -d /rhome/user01 -M user01
    [root@server ~]# useradd -d /rhome/user02 -M user02
    [root@server ~]# useradd -d /rhome/user03 -M user03
    这些用户不能直接登录ftp,没有家目录
    [root@server ~]# echo 123|passwd --stdin user01
    Changing password for user user01.
    passwd: all authentication tokens updated successfully.
    [root@server ~]# echo 123|passwd --stdin user02
    Changing password for user user02.
    passwd: all authentication tokens updated successfully.
    [root@server ~]# echo 123|passwd --stdin user03
    Changing password for user user03.
    passwd: all authentication tokens updated successfully.
    
    第二步.nfs-server
    搭建一个nfs服务,共享目录/data
    [root@client ~]# mount /dev/sdb /data
    [root@client ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda5        16G  3.7G   12G  25% /
    tmpfs           491M   72K  491M   1% /dev/shm
    /dev/sda1       194M   30M  155M  16% /boot
    /dev/sda3       2.0G   37M  1.8G   2% /home
    /dev/sr0        4.2G  4.2G     0 100% /media
    /dev/sdb        9.9G  151M  9.2G   2% /data		//提前准备一块空间来测试
    [root@client ~]# cat /etc/exports 
    /data	10.1.1.2(rw)
    [root@client ~]# service nfs start
    [root@client ~]# mkdir /data/user0{1..3}
    
    
    第三步. ftp-server
    [root@server ~]# mkdir /rhome/user0{1..3}
    [root@server ~]# mount.nfs 10.1.1.3:/data/user01 /rhome/user01
    [root@server ~]# df -h
    10.1.1.3:/data/user01  9.9G  151M  9.2G   2% /rhome/user01
    
    
    测试验证:
    [root@web2 ~]# ftp 10.1.1.2
    Connected to 10.1.1.2 (10.1.1.2).
    220 (vsFTPd 2.2.2)
    Name (10.1.1.2:root): user01
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (10,1,1,2,47,71).
    150 Here comes the directory listing.
    226 Directory send OK.
    ftp> 
    此时目录里面是空,现在到nfs-server的/data/user01里面创建一个文件
    [root@client user01]# echo hello world > file1
    [root@client user01]# ll
    total 4
    -rw-r--r-- 1 root root 12 Apr 23 15:13 file1
    再到客户端去查看
    ftp> ls
    227 Entering Passive Mode (10,1,1,2,21,40).
    150 Here comes the directory listing.
    -rw-r--r--    1 0        0              12 Apr 23 07:13 file1
    226 Directory send OK.
    出现file1文件
    到ftp-server端查看
    [root@server ~]# ls /rhome/user01
    file1
    [root@server ~]# su - user01
    -bash-4.1$ ls
    file1
    -bash-4.1$ pwd
    /rhome/user01
    -bash-4.1$ touch file2
    touch: cannot touch `file2': Permission denied		// 没有权限
    说明:正常情况下,user01只能访问ftp服务器,但是不能上传文件,原因是nfs-sercer的共享目录没有权限
    
    [root@client user01]# ll -d /data/user01			//查看共享存储,对其他人没有写权限
    drwxr-xr-x 2 root root 4096 Apr 23 15:13 /data/user01
    此时修改/data的权限,(高级权限o+t,加一个粘滞位,一般作用在公共目录上,777,加上后只允许root和文件创建者可以删除,其他人不可以删除不属于自己的文件),再到ftp-server端测试
    
    [root@client user01]# ll -d /data/user01
    drwxr-xr-x 2 root root 4096 Apr 23 15:13 /data/user01
    [root@client user01]# chmod 1777 /data/ -R
    发现能够创建文件
    -bash-4.1$ touch file2
    -bash-4.1$ 
    
    再去客户端web2测试,发现可以上传文件,文件存在共享存储/data/user01中
    ftp> put install.log
    local: install.log remote: install.log
    227 Entering Passive Mode (10,1,1,2,73,8).
    150 Ok to send data.
    226 Transfer complete.
    51880 bytes sent in 0.0601 secs (863.54 Kbytes/sec)
    
    [root@client user01]# ll
    total 56
    -rwxrwxrwt 1 root root    12 Apr 23 15:13 file1
    -rw-rw-r-- 1  503  503     0 Apr 23 15:25 file2
    -rw-r--r-- 1  503  503 51880 Apr 23 15:28 install.log
    
    自始至终,客户端上传文件都是在共享目录中进行的,解决了由于ftp-server空间不够无法服务的情况。
    

    家不完整怎么解决?
    创建一个用户后,默认系统会将以下隐藏文件拷贝到家目录,所以第一个猜测是,家不完整的时候,手动拷贝就能解决。
    [root@server ~]# ls -a /etc/skel/.
    . .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla
    [root@server ~]# cp /etc/skel/. /rhome/user01

    拷贝之后会报无权操作错误,但是去nfs-server的共享目录里查看,发现已经有了这些文件,但是返回ftp-server端切换user01还是会报权限拒绝,第二个猜测是因为用root进行cp,隐藏文件权限600,此时在nfs-server端的共享目录给所有隐藏文件修改权限chmod 777 .,在ftp-server切换user01还是不行,第三个猜测大概是属主、属组的问题。

    cd /etc/skel --> cp -a .bash* /data/uu1

    方式2实现:
    ftp-server:10.1.1.2
    nfs-server:10.1.1.3
    client:10.1.1.4
    步骤:
    第一步:
    ftp-server端:
    创建用户
    useradd uu1		--> /home/uu1
    useradd uu2 	--> /home/uu2
    
    nfs-server端:
    在data目录里给用户创建相应的目录
    mkdir /data/uu1
    mkdir /data/uu2
    给共享目录设置相应权限
    chmod 1777 /data -R
    发布共享目录
    vim /etc/exports
    /data	10.1.1.2(rw)
    重启服务
    service nfs restart
    
    ftp-server端:
    uu1用户为例,挂载
    mount.nfs 10.1.1.3:/data/uu1 /home/uu1
    这样uu1用户上传文件就到了/data/uu1里面,实现目的
    
    
    
    

    示例2:实现web集群后端存储

    NFS-SERVER端:共享目录,并且创建一个首页文件
    1. mkdir /share/web -p
    2. echo "hello world" > /share/web/index.html
    3. vim /etc/exports
    /share/web  10.1.1.0/24(ro)
    4. 重启服务(nfs)
    service nfs restart
    或者
    exportfs -rv
    
    WEB1和WEB2服务端:必须先关闭防火墙iptables和selinux
    1. 安装httpd软件
    2. 挂载nfs-server端的共享目录到/var/www/html
    mount.nfs 10.1.1.2:/share/web /var/www/html
    3. 启动服务
    service httpd start
    
    web1测试验证:
    (此处client为web1,IP为10.1.1.3,web2为10.1.1.4)
    [root@client ~]# 
    [root@client ~]# rpm -q httpd
    httpd-2.2.15-29.el6.centos.x86_64
    [root@client ~]# ls /var/www/html
    [root@client ~]# mount -t nfs 10.1.1.2:/share/web /var/www/html
    [root@client ~]# df -h
    Filesystem           Size  Used Avail Use% Mounted on
    /dev/sda5             16G  3.7G   12G  25% /
    tmpfs                491M   72K  491M   1% /dev/shm
    /dev/sda1            194M   30M  155M  16% /boot
    /dev/sda3            2.0G   37M  1.8G   2% /home
    /dev/sr0             4.2G  4.2G     0 100% /media
    10.1.1.2:/share/web   16G  3.8G   12G  26% /var/www/html
    [root@client ~]# ls /var/www/html
    index.html
    [root@client ~]# service httpd start
    Starting httpd: Syntax error on line 292 of /etc/httpd/conf/httpd.conf:
    DocumentRoot must be a directory						 [FAILED]
    
    纠错:
    [root@client ~]# setenforce 0
    [root@client ~]# service httpd start
    Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 10.1.1.3 for ServerName
                                                              [  OK  ]
    
    web2测试验证
    [root@web2 ~]# rpm -q httpd
    httpd-2.2.15-29.el6.centos.x86_64
    [root@web2 ~]# ls /var/www/html
    [root@web2 ~]# mount.nfs 10.1.1.2:/share/web /var/www/html
    [root@web2 ~]# df -h
    Filesystem           Size  Used Avail Use% Mounted on
    /dev/sda5             16G  3.7G   12G  25% /
    tmpfs                491M   72K  491M   1% /dev/shm
    /dev/sda1            194M   30M  155M  16% /boot
    /dev/sda3            2.0G   37M  1.8G   2% /home
    /dev/sr0             4.2G  4.2G     0 100% /media/CentOS_6.5_Final
    10.1.1.2:/share/web   16G  3.8G   12G  26% /var/www/html
    [root@web2 ~]# ls /var/www/html/
    index.html
    [root@web2 ~]# service httpd start
    Starting httpd: httpd: apr_sockaddr_info_get() failed for web2
    httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
                                      [  OK  ]
    
    Windows:
    IE:
    http://10.1.1.3/
    http://10.1.1.4/
    
  • 相关阅读:
    ASP 禁止页面被缓存
    关于学习编程的一点想法
    今天下午做的一个关于web前端性能/性能测试的Talk
    错误植入法与老祖宗的智慧
    关闭sitwithwhom.51.net
    让Pywinauto支持中文菜单
    勤学与好问
    LoadRunner 的 web_set_user 函数
    有奖调查——《软件性能测试过程详解与案例剖析》第二版内容调查
    论“响应时间”
  • 原文地址:https://www.cnblogs.com/liuwei-xd/p/11022111.html
Copyright © 2011-2022 走看看