- NFS服務(wù)介紹
- NFS配置文件
- NFS工具
- 自動(dòng)掛載
- 實(shí)驗(yàn):實(shí)現(xiàn)基于NFS共享的LAMP wordpress的應(yīng)用
一猜嘱、NFS服務(wù)介紹
(一)NFS簡(jiǎn)介
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)勢(shì):節(jié)省本地存儲(chǔ)空間
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
- CentOS 7:
-
端口:2049(nfsd)两芳,其它端口由portmap/rpcbind(111)分配
- 使用
ss -ntlp
命令查看端口摔寨,端口111的進(jìn)程為rpcbind
- 使用
rpcinfo -p
查看rpc注冊(cè)程序,端口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ù)在請(qǐng)求時(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)先級(jí)低于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)測(cè)試:
- 掛載共享目錄/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注冊(cè)程序
- rpcinfo -s hostname:簡(jiǎn)略列明RPC注冊(cè)程序
-
exportfs
- -v:查看本機(jī)所有NFS共享
- -r:重讀配置文件并共享目錄
- -a:輸出本機(jī)所有共享
- -au:停止本機(jī)所有共享
showmount -e hostname:顯示遠(yuǎn)程主機(jī)NFS共享目錄
四陋桂、自動(dòng)掛載
(一)autofs服務(wù)簡(jiǎn)介
- autofs服務(wù):按需要掛載逆趣,在空閑時(shí)自動(dòng)卸載
- 由autofs包提供
- 自動(dòng)掛載的配置文件:/etc/auto.master
- 文件系統(tǒng)在失活的指定間隔5分鐘后會(huì)自動(dòng)卸載
(二)autofs配置
(1)相對(duì)路徑描述
格式:
/etc/auto.master文件格式:掛載點(diǎn)的目錄名 /etc/auto.direct
/etc/auto.direct文件格式:掛載點(diǎn)的基名 被掛載目錄或設(shè)備
注釋:/etc/auto.direct文件僅為示例,文件名稱沒有要求相對(duì)路徑時(shí)支持含通配符的目錄名:
* server:/export/&
(2)絕對(duì)路徑描述
- 格式:
/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臺(tái)主機(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ù)
// 兩臺(tái)主機(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
-
測(cè)試:
- 在主機(jī)2(CentOS 7)上進(jìn)入/home/wang目錄,切換至wang賬號(hào)暴匠,建立wangfile文件
- 在主機(jī)3(CentOS 6)上進(jìn)入/home/wang目錄鞍恢,可以看到wangfile文件,但由于本機(jī)沒有uid=1001的賬號(hào)每窖,故UID直接顯示數(shù)字
- 在主機(jī)3(CentOS 6)上進(jìn)入/home/mage目錄帮掉,切換至mage賬號(hào),建立magefile文件
- 在主機(jī)2(CentOS 7)上進(jìn)入/home/mage目錄窒典,可以看到magefile文件蟆炊,但由于本機(jī)沒有uid=503的賬號(hào),故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臺(tái)主機(jī)
- 主機(jī)1:httpd服務(wù)器1缩膝,IP: 192.168.136.230
- 主機(jī)2:httpd服務(wù)器2,兼做mysql數(shù)據(jù)庫(kù)岸霹,IP: 192.168.136.130
- 主機(jī)3:NFS服務(wù)器疾层,存儲(chǔ)httpd服務(wù)器網(wǎng)頁(yè)數(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共享目錄上測(cè)試與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ù)庫(kù)失敗!";
$mysqli=null;
exit;
}
echo "連接數(shù)據(jù)庫(kù)成功!";
$mysqli->close();
phpinfo();
?>
(五)步驟5:在主機(jī)3的httpd共享目錄上安裝WordPress
tar -xvf wordpress-4.8.1-zh_CN.tar.gz -C /var/www/html/