20171016 網(wǎng)絡(luò)文件共享(二) NFS服務(wù)

  • NFS服務(wù)介紹
  • NFS配置文件
  • NFS工具
  • 自動(dòng)掛載
  • 實(shí)驗(yàn):實(shí)現(xiàn)基于NFS共享的LAMP wordpress的應(yīng)用

一、NFS服務(wù)介紹

(一)NFS簡介

  • NFS(Network File System):網(wǎng)絡(luò)文件系統(tǒng),用戶和程序可以像訪問本地文件一樣訪問遠(yuǎn)端系統(tǒng)上的文件

  • NFS基于RPC(Remote Procedure Call)遠(yuǎn)程過程調(diào)用實(shí)現(xiàn),RPC基于C/S架構(gòu)實(shí)現(xiàn)

  • NFS優(yōu)勢:節(jié)省本地存儲空間

  • NFS發(fā)展:目前為v4版本,實(shí)現(xiàn)了偽根,增強(qiáng)了安全特性(kerberos)

(二)NFS服務(wù)

  • 軟件包:nfs-utils,默認(rèn)系統(tǒng)安裝

  • Kernel支持:nfs.ko

  • 服務(wù)開啟、關(guān)閉

    • CentOS 7:systemctl start|stop nfs-server
    • CentOS 6: service nfs start|stop
  • 端口:2049(nfsd),其它端口由portmap/rpcbind(111)分配

    • 使用ss -ntlp命令查看端口,端口111的進(jìn)程為rpcbind
    • 使用rpcinfo -p查看rpc注冊程序,端口111的進(jìn)程為portmapper
    • CentOS6開始portmap進(jìn)程由rpcbind代替
  • 配置文件:/etc/exports, /etc/exports.d/*.exports

  • 相關(guān)軟件包:rpcbind(必須),tcp_wrappers

  • NFS服務(wù)主要進(jìn)程

    • rpc.nfsd:最主要的NFS進(jìn)程,管理客戶端是否可登錄
    • rpc.mountd:掛載和卸載NFS文件系統(tǒng),包括權(quán)限管理
    • rpc.lockd:非必要,管理文件鎖,避免同時(shí)寫出錯(cuò)
    • rpc.statd:非必要,檢查文件一致性,可修復(fù)文件
  • 日志:/var/lib/nfs/

二、NFS配置文件

(一)配置文件格式

  • 格式:/dir 主機(jī)1(opt1,opt2) 主機(jī)2(opt1,opt2)...

  • /dir: 共享目錄路徑

  • 主機(jī)格式

    • 單個(gè)主機(jī):ipv4, ipv6, FQDN
    • IP networks:兩種掩碼格式均支持
      172.18.0.0/255.255.0.0
      172.18.0.0/16
    • wildcards:主機(jī)名通配,例如*.magedu.com,不能應(yīng)用于IP地址
    • anonymous:表示使用*通配所有客戶端
  • 每個(gè)條目指定目錄導(dǎo)出到的哪些主機(jī),及相關(guān)的權(quán)限和選項(xiàng)

    • 默認(rèn)選項(xiàng):(ro,sync,root_squash,no_all_squash)
    • ro,rw:只讀和讀寫
    • async:異步,數(shù)據(jù)變化后不立即寫磁盤,性能高
    • sync:同步,數(shù)據(jù)在請求時(shí)立即寫入共享,安全性高
    • no_all_squash:保留遠(yuǎn)程用戶建立共享文件的UID和GID
    • all_squash:所有遠(yuǎn)程用戶(包括root)都映射成nfsnobody
    • root_squash:遠(yuǎn)程root映射為nfsnobody,UID為65534
    • no_root_squash:遠(yuǎn)程root映射成root用戶,優(yōu)先級低于all_squash
    • anonuid和anongid:指明匿名用戶映射為特定用戶UID和組GID,而非nfsnobody,可配合all_squash使用

(二)實(shí)驗(yàn)1:建立NFS共享目錄/app/nfsfile1, /app/nfsfile2

  • 實(shí)驗(yàn)要求
    /app/nfsfile1目錄:192.168.136.0網(wǎng)段的主機(jī)可以登錄,支持讀寫,所有用戶都映射為testuser
    /app/nfsfile2 目錄:只有192.168.136.129主機(jī)可以登錄,支持讀寫,遠(yuǎn)程root映射為root用戶

  • 實(shí)驗(yàn)步驟:

// 建立testuser用戶
useradd testuser
id testuser
uid=1002(testuser) gid=1002(testuser) groups=1002(testuser)

// 編輯NFS服務(wù)配置文件
vim /etc/exports.d/nfsfile1.exports
/app/nfsfile1 192.168.136.0/24(rw,all_squash,anonuid=1002,anongid=1002)

vim /etc/exports.d/nfsfile2.exports
/app/nfsfile2 192.168.136.129(rw,no_root_squash)

// 建立相關(guān)共享文件目錄
mkdir /app/nfsfile1
mkdir /app/nfsfile2
touch /app/nfsfile1/file1
touch /app/nfsfile2/file2
setfacl -R -m u:testuser:rwx /app/nfsfile1

// 重新載入配置
exportfs -r
exportfs -v
  • 實(shí)驗(yàn)測試:

    • 掛載共享目錄/app/nfsfile1,可以看到root和普通用戶都映射為testuser用戶(uid=1002, gid=1002)
    • 掛載共享目錄/app/nfsfile2,可以看到非192.168.136.129的主機(jī)不能成功掛載;掛載成功后,root用戶沒有被映射為nobody,而普通用戶由于之前在NFS服務(wù)器上未設(shè)置寫權(quán)限,無權(quán)建立文件,說明NFS服務(wù)支持讀寫需要NFS服務(wù)和服務(wù)器文件系統(tǒng)兩方面同時(shí)授權(quán)才可以

(三)實(shí)驗(yàn)2:實(shí)現(xiàn)NFS偽根

  • NFS客戶端通常需要分別掛載NFS服務(wù)器上的共享目錄

  • 在NFS服務(wù)器建立偽根目錄,將需要共享的目錄全部掛載到偽根目錄上,即可實(shí)現(xiàn)NFS客戶端一次性將不同目錄掛載到一個(gè)掛載點(diǎn)上

  • 實(shí)驗(yàn):通過NFS偽根一次性掛載共享目錄/app/ftpsite和/var/log

// 建立偽根目錄
mkdir /exports
mkdir /exports/ftpsite
mkdir /exports/log

// 將共享目錄掛載到偽根目錄的子目錄
mount -B /app/ftpsite /exports/ftpsite/
mount -B /var/log /exports/log/
setfacl -m u:nfsnobody:rwx /app/ftpsite     // 給遠(yuǎn)程主機(jī)root用戶開放寫權(quán)限

// 編輯配置文件
vim /etc/exports
/exports *(fsid=0,rw,crossmnt)
/exports/ftpsite *(rw)
/exports/log    *(ro)

// 配置文件生效
exportfs -r

可以看到,/exports目錄充當(dāng)了偽根,實(shí)現(xiàn)多個(gè)目錄一次掛載,并且每個(gè)目錄的配置都生效了:ftpsite目錄可以寫入,log目錄不可以寫入文件

三、NFS工具

  • rpcinfo

    • rpcinfo -p hostname:詳細(xì)列明RPC注冊程序
    • rpcinfo -s hostname:簡略列明RPC注冊程序
  • exportfs

    • -v:查看本機(jī)所有NFS共享
    • -r:重讀配置文件并共享目錄
    • -a:輸出本機(jī)所有共享
    • -au:停止本機(jī)所有共享
  • showmount -e hostname:顯示遠(yuǎn)程主機(jī)NFS共享目錄

四、自動(dòng)掛載

(一)autofs服務(wù)簡介

  • autofs服務(wù):按需要掛載,在空閑時(shí)自動(dòng)卸載
  • 由autofs包提供
  • 自動(dòng)掛載的配置文件:/etc/auto.master
  • 文件系統(tǒng)在失活的指定間隔5分鐘后會自動(dòng)卸載

(二)autofs配置

(1)相對路徑描述
  • 格式:
    /etc/auto.master文件格式:掛載點(diǎn)的目錄名 /etc/auto.direct
    /etc/auto.direct文件格式:掛載點(diǎn)的基名 被掛載目錄或設(shè)備
    注釋:/etc/auto.direct文件僅為示例,文件名稱沒有要求

  • 相對路徑時(shí)支持含通配符的目錄名:* server:/export/&

(2)絕對路徑描述
  • 格式:
    /etc/auto.master文件格式:/- /etc/auto.direct
    /etc/auto.direct文件格式:掛載點(diǎn)路徑 被掛載目錄或設(shè)備
(3)實(shí)驗(yàn):利用autofs實(shí)現(xiàn)遠(yuǎn)程家目錄的自動(dòng)掛載
  • 本實(shí)驗(yàn)由2臺主機(jī)完成:
    主機(jī)1:NFS服務(wù)器
    主機(jī)2:NFS客戶端,安裝autofs服務(wù),CentOS 7系統(tǒng)
    主機(jī)3:NFS客戶端,安裝autofs服務(wù),CentOS 6系統(tǒng)

  • 步驟1:NFS服務(wù)器上設(shè)置共享家目錄

mkdir -p /app/homedir/{wang,mage}
cp -r /etc/skel/.[^.]* /app/homedir/wang/
cp -r /etc/skel/.[^.]* /app/homedir/mage/
  • 步驟2:查詢NFS客戶端上用戶wang和mage的uid和gid
// 主機(jī)2上的用戶ID情況
id wang
uid=1001(wang) gid=1001(wang) groups=1001(wang)
id mage
uid=1002(mage) gid=1002(mage) groups=1002(mage)
// 主機(jī)3上的用戶ID情況
id wang
uid=502(wang) gid=502(wang) groups=502(wang)
id mage
uid=503(mage) gid=503(mage) groups=503(mage)
  • 步驟3:NFS服務(wù)器上根據(jù)不同系統(tǒng)的用戶ID情況,分別給共享家目錄添加權(quán)限
useradd -u 1001 wang
useradd -u 1002 mage
useradd -u 502 wang6
useradd -u 503 mage6
setfacl -R -m u:wang:rwx /app/homedir/wang/
setfacl -R -m u:wang6:rwx /app/homedir/wang/
setfacl -R -m u:mage:rwx /app/homedir/mage/
setfacl -R -m u:mage6:rwx /app/homedir/mage/
  • 步驟4:NFS服務(wù)器上編輯NFS配置文件并更新讀入配置
vim /etc/exports.d/wang.exports
/app/homedir/wang *(rw)
vim /etc/exports.d/mage.exports
/app/homedir/mage *(rw)

exportfs -r
  • 步驟5:NFS客戶端上配置autofs服務(wù)
// 兩臺主機(jī)均執(zhí)行以下操作
vim /etc/auto.master
/home   /etc/auto.direct             // 添加一行
vim /etc/auto.direct
* 192.168.136.230:/app/homedir/&     // 添加一行
// 按照系統(tǒng)執(zhí)行
systemctl restart autofs             // CentOS 7
service autofs restart               // CentOS 6
  • 測試:

    • 在主機(jī)2(CentOS 7)上進(jìn)入/home/wang目錄,切換至wang賬號,建立wangfile文件
    • 在主機(jī)3(CentOS 6)上進(jìn)入/home/wang目錄,可以看到wangfile文件,但由于本機(jī)沒有uid=1001的賬號,故UID直接顯示數(shù)字
    • 在主機(jī)3(CentOS 6)上進(jìn)入/home/mage目錄,切換至mage賬號,建立magefile文件
    • 在主機(jī)2(CentOS 7)上進(jìn)入/home/mage目錄,可以看到magefile文件,但由于本機(jī)沒有uid=503的賬號,故UID直接顯示數(shù)字
    • 使用NFS建立遠(yuǎn)程家目錄,如果可能,最好統(tǒng)一不同系統(tǒng)下相同用戶的uid,便于后期管理

五、實(shí)驗(yàn):實(shí)現(xiàn)基于NFS共享的LAMP wordpress的應(yīng)用

(一)實(shí)驗(yàn)環(huán)境:本實(shí)驗(yàn)需要4臺主機(jī)

  • 主機(jī)1:httpd服務(wù)器1,IP: 192.168.136.230
  • 主機(jī)2:httpd服務(wù)器2,兼做mysql數(shù)據(jù)庫,IP: 192.168.136.130
  • 主機(jī)3:NFS服務(wù)器,存儲httpd服務(wù)器網(wǎng)頁數(shù)據(jù),包含WordPress應(yīng)用,IP: 192.168.136.229
  • 主機(jī)4:DNS服務(wù)器,IP: 192.168.136.129

(二)步驟1:在主機(jī)3上配置nfs服務(wù)

mkdir -p /app/www/html
setfacl -R -m u:apache:rwx /app/www/html
service nfs start
vim /etc/exports
/app/www/html 192.168.136.0/24(rw,all_squash,anonuid=48,anongid=48)
exportfs -r
exportfs -v

(三)步驟2:在主機(jī)1, 2上配置httpd服務(wù),安裝php-fpm

// 以下步驟在主機(jī)1, 2上操作相同
yum install httpd php-fpm
vim /etc/fstab

vim /etc/httpd/conf.d/fcgi.conf
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1向代理
systemctl start php-fpm.service 
systemctl start httpd

(三)步驟3:在主機(jī)2上安裝mysql服務(wù)

yum install mariadb-server
systemctl start mariadb
mysql_secure_installation

(四)步驟4:在主機(jī)3的httpd共享目錄上測試與php與mysql的連接

vim /var/www/html/index.php
<?php
$mysqli=new mysqli("192.168.136.130","root","centos");
if(mysqli_connect_errno()){
  echo "連接數(shù)據(jù)庫失敗!";
  $mysqli=null;
  exit;
}
echo "連接數(shù)據(jù)庫成功!";
$mysqli->close();
phpinfo();
?>

(五)步驟5:在主機(jī)3的httpd共享目錄上安裝WordPress

tar -xvf wordpress-4.8.1-zh_CN.tar.gz -C /var/www/html/

(六)步驟6:在主機(jī)4上實(shí)現(xiàn)DNS服務(wù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容