[root@backup ~]# rpm -qa xinetd前端
[root@backup ~]# rpm -ql xinetdnode
package xinetd is not installedlinux
[root@backup ~]# yum install xinetd -y nginx
[root@backup ~]# rpm -qa xinetd web
xinetd-2.3.14-40.el6.x86_64vim
將 yes 改成no 便可被xinetd管理centos
更改完成後重啓服務緩存
/etc/init.d/xinetd restart安全
[root@backup ~]# netstat -lntup |grep 873性能優化
tcp 0 0 :::873 :::* LISTEN 1229/xinetd
NFS是Network File System的縮寫,中文意思是網絡文件系統,
NFS的主要功能是經過網絡(通常是局域網)讓不一樣的主機系統之間能夠彼此共享文件或目錄,
NFS網絡文件系統適用於處理量級較小的業務,
若是大型網站,那麼有可能還會用到更復雜的分佈式文件系統,例如:Moosefs(mfs)、GlusterFS、FastDFS。
NFS是一個服務,與rsync服務相似,NFS服務也既有服務端、又有客戶端
1.實現數據信息統一一致;
2.節省局域網數據同步傳輸的帶寬;
3.節省網站架構中服務器硬盤資源。
1.服務端提供能夠被掛載的磁盤空間(共享目錄);
2.客戶端準備好本地掛載目錄(掛載點);
3.客戶端使用mount命令,將服務端的共享目錄掛載到客戶端的掛載點上。
以把NFS想象成一個移動硬盤或者U盤,服務端的共享目錄,對於客戶端來講,就是一塊等待被使用的磁盤。
NFS服務端的共享目錄能夠被多個客戶端掛載,就像一個多接口的移動電源,只要插上電源線,就能夠同時給多部手機充電了。
RPC協議的默認端口爲111。
NFS的RPC服務最主要的功能就是記錄每一個NFS功能所對應的端口號,
而且在NFS客戶端請求時將該端口和功能對應的信息傳遞給請求數據的NFS客戶端,
從而確保客戶端能夠鏈接到正確的NFS端口上去,達到實現數據傳輸和交互數據的目的。
形象的說,這個RPC服務就像是鏈接NFS服務端和NFS客戶端的一箇中介,架起它們互相鏈接的橋樑。
拿房屋中介打個比喻:
租客要找房子,這裏的租客就至關於NFS客戶端;
中介負責介紹房子,這裏的中介就至關於RPC服務;
房子全部者房東要將房子出租出去,這裏的房東就至關於NFS服務;
租客找房子,就要找中介,中介要預先存有房子主人的信息,才能將房源信息告訴租客。
1.先啓動RPC服務
2.啓動NFS服務
3.客戶請求NFS服務
4.返回端口到客戶
5.拿着地址端口請求傳輸數據
要部署NFS服務,必須安裝兩個軟件包:nfs-utils和rpcbind。
nfs-utils:NFS主程序。包括rpc.nfsd、rpc.mountd兩個daemons和相關文檔說明及執行命令文件等;
rpcbind:RPC主程序。NFS能夠被視爲一個RPC程序,在啓動任何一個RPC程序以前都須要作好端口和功能的對應映射工做,
這個映射工做就是由rpcbind完成的。所以,在提供NFS服務以前必須先啓動rpnbind服務。
服務端須要安裝nfs-untils和rpcbind。
另外,因爲NFS及其輔助程序都基於RPC協議(使用的端口爲111),因此須要特殊注意,首先要確保系統中運行了rpcbind服務,即必須先啓動rpcbind服務,而後再啓動nfs服務
rpm -qa |egrep 「rpcbind|nfs-utils」
yum install -y rpcbind nfs-utils
NFS服務默認的配置文件爲/etc/exports,而且裏面初始沒有內容,是個空文件,須要用戶自行配置。
可使用vim命令來編輯此文件,在其內添加以下內容:
/data/ 172.16.1.0/24(rw,sync)
也可使用echo或cat命令來實現:
echo ‘/data/ 172.16.1.0/24(rw,sync)’ /etc/exports
或
cat > /etc/exports << EOF
##########config NFS server start by oldboy 2018-05-21##########
/data/ 172.16.1.0/24(rw,sync)
##########config NFS server end by oldboy 2018-05-21##########
EOF
NFS配置文件內容介紹:
a./data/爲要共享的NFS服務端的目錄,注意,被共享的目錄必定要使用絕對路徑;
b.172.16.1.0/24表示容許NFS客戶端訪問共享目錄的網段範圍,24表示255.255.255.0;
c. (rw,sync)中的rw表示容許讀寫,sync表示數據同步寫入到NFS服務端的硬盤中;
d.配置文件裏的「24」和「(」之間不能有空格,這一點必定要注意;
e.也可使用通配符*替換IP地址,表示容許全部主機,即寫成172.16.1.*的形式。
編輯完畢後,記得檢查一下。
cat /etc/exports
mkdir -p /data/
NFS服務默認使用的用戶和用戶組是nfsnobody,因此須要將本地同步目錄屬主和屬組爲相應的用戶。
命令:chown -R nfsnobody.nfsnobody /data/
由於NFS及其輔助程序都是基於RPC協議的(端口爲111),因此首先要確保系統中運行了rpcbind服務。
命令:/etc/init.d/rpcbind start
檢查端口:lsof -i:111
檢查rpcbind服務狀態:/etc/init.d/rpcbind status
注意,必定要確保rpcbind服務已經啓動正常,再啓動nfs服務。
命令:/etc/init.d/nfs start
檢查nfs服務狀態:/etc/init.d/nfs status
查看nfs服務向rpc服務註冊的端口信息的命令:
rpcinfo -p localhost
或rpcinfo -p 127.0.0.1
若是修改了nfs的配置文件/etc/exports的話,須要重啓服務才能使修改生效。
爲了提供比較友好的用戶體驗,建議使用nfs服務平滑重啓的參數reload,而不是直接使用restart參數。
命令:/etc/init.d/nfs reload
可使用showmount命令檢查NFS服務端共享目錄的信息。
命令:showmount -e localhost
或 showmount -e 127.0.0.1
或 showmount -e 172.16.1.31
想要讓rpcbind和nfs服務開機自啓動,可使用chkconfig命令來實現。
命令:chkconfig rpcbind on
chkconfig nfs on
檢查:chkconfig --list | egrep -i 「rpcbind|nfs」
配置並啓動好NFS服務後,經過cat /var/lib/nfs/etab命令能夠看到NFS配置的參數及默認自帶的參數。
命令:cat /var/lib/nfs/etab
不管作什麼操做,都應該養成一個好的習慣,那就是先進行檢查,再上手操做。
因此第一步應該先檢查服務器上是否已經安裝了rpcbind和nfs-utils軟件。
命令:rpm -qa rpcbind nfs-utils
或 rpm -qa |egrep 「rpcbind|nfs-utils」
yum install -y rpcbind nfs-utils
由於NFS及其輔助程序都是基於RPC協議的(端口爲111),因此首先要確保系統中運行了rpcbind服務。
命令:/etc/init.d/rpcbind start
檢查端口:lsof -i:111
檢查rpcbind服務狀態:/etc/init.d/rpcbind status
chkconfig rpcbind on
檢查:chkconfig --list | egrep -i rpcbind
想要掛載NFS服務端的共享目錄,在客戶端必需要有一個用於掛載的目錄。
命令:mkdir -p /nfs_dir
以上步驟所有操做完畢後,就能夠在客戶端掛載NFS服務端的共享目錄了。
掛載命令:
mount -t nfs 172.16.1.31:/data/ /nfs_dir/
可使用df或mount命令結合grep來檢查是否掛載成功。
命令:df -h | grep '172.16.1.31'
或 mount | grep '172.16.1.31'
若是須要讓客戶端開機自動掛載NFS服務端的共享目錄,有兩種方法。
方法一:將掛載命令放在/etc/rc.local文件裏。
缺點:可能會出現偶爾開機掛載不上的狀況,工做中若是使用這種方法,除了開啓自啓動的配置之外,還有對是否掛載成功作監控。
配置/etc/rc.local文件的命令:
echo ‘# mount NFS server by oldboy 2018-05-21 #’ >> /etc/rc.local
echo ‘mount -t nfs 172.16.1.31:/data/ /nfs_dir/’ >> /etc/rc.local
方法二:將掛載信息放在/etc/fstab文件裏。
這種方法有一個須要特殊注意的地方:fstab會優於網絡被linux系統加載。
網絡沒啓動時執行fstab裏配置的遠程掛載會致使鏈接不上NFS服務端,沒法實現開機正常掛載NFS遠程共享目錄。
可是,這個問題是能夠被解決的,解決方法就是,在客戶端啓動netfs服務,而且讓這個服務開機自啓動。
即:/etc/init.d/netfs start;chkconfig netfs on
配置/etc/fstab文件的命令:
echo ’172.16.1.31:/data/ /nfs_dir nfs default 0 0’ >> /etc/fstab
NFS客戶端掛載好服務端的共享目錄後,經過grep '172.16.1.31' /proc/mounts命令能夠看到mount的詳細參數。
命令:grep '172.16.11' /proc/mounts
NFS服務默認的配置文件爲/etc/exports,而且默認內容爲空,須要使用者自行配置。
/etc/exports文件配置格式爲:
NFS共享的目錄 NFS客戶端地址1(參數1,參數2,…) 客戶端地址2(參數1,參數2,…)
或
NFS共享的目錄 NFS客戶端地址(參數1,參數2,…)
其中各個列的參數含義以下:
a.NFS共享的目錄:爲NFS服務端要共享的實際目錄,要使用絕對路徑。須要注意共享目錄的本地權限,若是須要讀寫共享,必定要讓本地目錄能夠被NFS客戶端的用戶(nfsnobody)讀寫;
b.NFS客戶端地址:爲NFS服務端受權的可訪問共享目錄的NFS客戶端地址。能夠爲單獨的IP地址或主機名、域名等,也能夠爲整個網段地址,還能夠用「*」來匹配全部客戶端服務器。這裏所謂的客戶端通常來講是前端的業務服務器;
c.權限參數集:對受權的NFS客戶端所能擁有的訪問權限的設置。
案例1: /data 10.0.0.0/24(rw,rsync) 容許客戶端讀寫,而且數據寫入到服務端磁盤中。
案例2:/data 10.0.0.0/24(rw,rsync,all_squash,anonuid=2000,anongid=2000)
容許客戶端讀寫,而且數據同步寫入到服務器端的磁盤中,而且指定客戶端的用戶GID和UID
案例3: /home/oldboy 10.0.0.0/24(ro) 只讀 容許客戶訪問10.0.0.0段,可是隻有可讀權限。他會應用到測試環境中,線上環境不容許修改,因此設置了ro 可讀。不給開發rw權限。
□ NFS共享目錄:
爲 NFS服務器端要共享的實際目錄,要用絕對路徑,如(/data )。注意共享目錄的本地權限,若是須要讀寫共享,必定要讓本地目錄能夠被 NFS客戶端的用戶(nfsnobody)讀寫。
□ NFS客戶端地址:
爲NFS服務器端受權的可訪問共享目錄的NFS客戶端地址,能夠爲單獨的IP地址或主機名、域名等,也能夠爲整個網段地址。還能夠用來匹配全部客戶端服務器,這裏所謂的客戶端通常來講是前端的業務的業務服務器,例如:web服務。
□權限參數集
對受權的NFS客戶端的訪問權限設置。
nfs權限(共享目錄\借給你手機)nfs配置的/ etc/exports /data 172.16.1.0/24(rw)
本地文件系統權限(\手機密碼不告訴你)掛載目錄的權限rwxr- xr-x root root/data
[root@nfs01 ~]# chkconfig rpcbind on
[root@nfs01 ~]# chkconfig nfs on
[root@nfs01 ~]# chkconfig |egrep "rpcbinf|nfs"
nfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off
nfslock 0:off 1:off 2:off 3:on 4:on 5:on 6:off
注意:nfs服務默認沒有認證機制,安全性不如分佈式文件系統,
只能經過控制配置文件中網絡地址信息,實現安全性
基本配置語法:
共享的目錄 共享的主機 參數選項
/data 172.16.1.0/24 rw,sync
企業兩類案例:
/data 172.16.1.0/24(rw,sync)
多個客戶端共享可讀可寫,默認的匿名用戶65534
/backup 172.16.1.0/24(rw,sync,all_squash,anonuid=999,anongid=999)
改變匿名用戶,指定匿名用戶uid=999
參數 |
說明 |
rw |
可讀寫的權限 |
ro |
只讀的權限 |
no_root_squash |
登入NFS主機,使用該共享目錄時至關於該目錄的擁有者,若是是root的話, 那麼對於這個共享的目錄來講,他就具備root的權限,這個參數『極不安全』,不建議使用 |
root_squash |
登入NFS主機,使用該共享目錄時至關於該目錄的擁有者。可是若是是以root身份使用這個共享目錄 的時候,那麼這個使用者(root)的權限將被壓縮成爲匿名使用者,即一般他的UID與GID都會 變成nobody那個身份 |
all_squash |
不論登入NFS的使用者身份爲什麼,他的身份都會被壓縮成爲匿名使用者, 一般也就是nobody |
anonuid |
能夠自行設定這個UID的值,這個UID必須要存在於你的/etc/passwd當中 |
anongid |
同anonuid,可是變成groupID就是了 |
sync |
資料同步寫入到內存與硬盤當中 |
async |
資料會先暫存於內存當中,而非直接寫入硬盤 |
insecure |
容許從這臺機器過來的非受權訪問 |
服務端修改配置
[root@nfs01 ~]# vim /etc/exports
#share 20171013 hzs
/data 172.16.1.0/24(rw,sync,all_squash)
[root@nfs01 ~]# /etc/init.d/nfs reload
配置修改須要平滑重啓nfs 服務
reload 平滑重啓
用戶的訪問體驗更好
nfs客戶端進行測試
[root@backup mnt]# touch test.txt
[root@backup mnt]# ll
-rw-r--r-- 1 nfsnobody nfsnobody 8 Oct 13 11:28 test.txt
[root@backup ~]# su - clsn
[clsn@backup ~]$ cd /mnt/
[clsn@backup mnt]$ touch clsn1.txt
[clsn@backup mnt]$ ll
-rw-rw-r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 clsn1.txt
-rw-r--r-- 1 nfsnobody nfsnobody 8 Oct 13 11:28 test.txt
說明:
不論登入NFS的使用者身份爲什麼,他的身份都會被壓縮成爲匿名使用者,一般也就是nobody
服務端修改配置
[root@nfs01 ~]# vim /etc/exports
#share 20171013 hzs
/data 172.16.1.0/24(rw,sync,no_all_squash,root_squash)
[root@nfs01 ~]# /etc/init.d/nfs reload
客戶端卸載從新掛載(服務器配置修改後客戶端要從新掛載)
[root@backup ~]# umount /mnt/
[root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt
nfs客戶端測試結果:
[root@backup mnt]# touch test1.txt
[root@backup mnt]# ll
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:37 test1.txt
[root@backup mnt]# su - clsn
[clsn@backup ~]$ cd /mnt/
[clsn@backup mnt]$ touch clsn1.txt
touch: cannot touch `clsn1.txt': Permission denied
[clsn@backup mnt]$ touch clsn2.txt
touch: cannot touch `clsn2.txt': Permission denied
# 服務端驗證:
[root@nfs01 ~]# ll /data/
-rw-rw-r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 clsn1.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:37 test1.txt
-rw-r--r-- 1 nfsnobody nfsnobody 8 Oct 13 11:28 test.txt
說明:no_all_squash,是全部用戶都不進行壓縮,因此clsn用戶對nfs的目錄沒有寫入的權限(與nfs服務器的共享目錄權限有關)。root用戶進行壓縮因此能夠寫入。
服務端修改配置
[root@nfs01 ~]# vim /etc/exports
#share 20171013 hzs
/data 172.16.1.0/24(rw,sync,no_root_squash)
[root@nfs01 ~]# /etc/init.d/nfs reload
客戶端卸載從新掛載(服務器配置修改後客戶端要從新掛載)
[root@backup ~]# umount /mnt/
[root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt
nfs客戶端測試結果:
[root@backup mnt]# touch root.txt
[root@backup mnt]# ll
total 16
-rw-rw-r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 clsn1.txt
-rw-r--r-- 1 root root 0 Oct 13 12:45 root.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:37 test1.txt
-rw-r--r-- 1 nfsnobody nfsnobody 8 Oct 13 11:28 test.txt
刪除測試
[root@backup mnt]# rm -rf ./*
[root@backup mnt]# ll
total 0
說明:因爲對root用戶沒有進行壓縮,因此到達nfs服務器後依舊是root身份,root用戶默認對全部的文件都有權限,因此能夠寫入。(很危險)
客戶端地址 |
具體地址 |
說明 |
受權單一客戶端訪問NFS |
10.0.0.30 |
通常狀況,生產環境中此配置很少 |
受權整個網段可訪問NFS |
10.0.0.0/24 |
其中的24等同於255.255.255.0 ,指定網段爲生產環境中最多見的配置 。配置簡單,維護方便 |
受權整個網段可訪問NFS |
10.0.0.* |
指定網段的另外寫法(不推薦使用) |
受權某個域名客戶端訪問 |
nfs.clsnedu.com |
此方法生產環境中通常狀況不經常使用 |
受權整個域名客戶端訪問 |
*.clsnedu.com |
此方法生產環境中通常狀況不經常使用 |
常見案例
經常使用格式說明 |
要共享的目錄客戶端IP地址或IP段(參1,參2,) |
配罝例一 |
/data10.0.0.0/24(ro,sync) 說明:容許客戶端讀寫,而且數據同步寫入到服務器揣的磁盤裏 注意:24和"("之間不能有空格 |
配置例二 |
/data10.0.0.0/24(rw,sync/all_squash,anonuid=2000,anongid=2000) 說明:容許客戶揣讀寫,而且數據同步寫到服務器揣的磁盤裏,而且指走客戶端 的用戶UID和GID,早期生產環境的一種配罝,適合多客戶端共享一個NFS服務 單目錄,若是全部服務器的nfsnobody帳戶UID都是65534,則本例沒什麼必 要了.早期centos5.5的系統默認狀況下nfsnobody的UID不必定是65534, 此時若是這些服務器共享一個NFS目錄,就會出現訪問權限問題. |
配置例三 |
/home/clsn10.0.0.0/24(ro) 說明:只讀共享 用途:例如在生產環境中,開發人員有查看生產眼務器日誌的需求,但又不希罜 給開發生產服務器的權限,那麼就能夠給開發提供從某個測試服務器NFS客戶端 上查看某個生產服務器的日誌目錄(NFS共享)的權限,固然這不是惟一的方法, 例如能夠把程序記錄的日誌發送到測試服務器供開發查看或者經過收集日誌等其 |
mount -t 文件類型 IP:共享目錄 掛載點
mount -o 掛載參數
noatime atime
noexec exec
nodev dev
nosuid suid
nodiratime diratime
async sync remount rw ro
把mount -t nfs IP:共享目錄 掛載點 這個命令追加到 /etc/rc.local內
寫入/etc/fstab的話,須要開啓netfs服務,不然沒法加載,由於在開機時先執行/etc/fstab腳本,
在執行/etc/sysconfig/network腳本,致使加載fstab時沒有網絡,鏈接不到服務端,沒法掛載。
1、單點
2、數據沒加密,沒有用戶認證(主機認證)
3、服務器宕機,客戶端夯住。
4、併發訪問能力小(2000萬PV訪問量之內)
NFS服務端宕機,客戶端會夯住,卡死。
查看客戶端mount的參數文件 /proc/mounts
[root@web01 ~]# tail -2 /proc/mounts
172.16.1.31:/data/ /video nfs4 rw,relatime,vers=4,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.7,minorversion=0,local_lock=none,addr=172.16.1.31 0 0
172.16.1.31:/backup/ /w nfs4 rw,relatime,vers=4,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.7,minorversion=0,local_lock=none,addr=172.16.1.31 0 0
mount -t nfs -o async,noatime,nodiratime,rsize=131072,wsize=131072 10.0.0.18:/data /mnt
若是對安全有要求就加nosuid,noexec,nodev。
NFS官方內核優化能夠修改,官方的建議:
[root@c58-nfs-server ~]# cat /proc/sys/net/core/rmem_default
8388608
[root@c58-nfs-server ~]# cat /proc/sys/net/core/rmem_max
16777216
[root@c58-nfs-server ~]# echo 262144 > /proc/sys/net/core/rmem_default
[root@c58-nfs-server ~]# echo 262144 > /proc/sys/net/core/rmem_max
1)缺省設置:10240
/proc/sys/net/core/rmem_default
該文件指定了接收套接字緩衝區大小的缺省值(以字節爲單位)。
2)缺省設置:110592
/proc/sys/net/core/rmem_max
該文件指定了接收套接字緩衝區大小的最大值(以字節爲單位)。
3)缺省設置:131071
/proc/sys/net/core/wmem_default
該文件指定了發送套接字緩衝區大小的缺省值(以字節爲單位)。 socket
4)缺省設置:110592
/proc/sys/net/core/wmem_max
該文件指定了發送套接字緩衝區大小的最大值(以字節爲單位)。
cat >>/etc/sysctl.conf<<EOF
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
EOF
sysctl -p
命令行:
echo 8388608 > /proc/sys/net/core/rmem_default
echo 16777216 > /proc/sys/net/core/rmem_max
最高境界就是不訪問NFS,前端使用CDN(分佈式緩存)
200多萬IP,5000萬PV 還能用。 10000pv
1、使用CDN分佈式外部緩存。擋住98%的訪問,最低擋住90%。1000 0臺(一個月花5000錢)
2、內部用緩存(nginx,varnish,squid),通常用不到。 90% 100 1臺
3、讀請求不訪問NFS,而是把NFS數據推送到前端的服務器,訪問本地。90% 剩10個 1臺
4、/backup根據目錄拆分爲不一樣的服務器。
4.1/backup/bss
4.2/backup/blog
4.3/backup/cms
bbs拆分爲一臺機器
blog拆分爲一臺機器
cms拆分爲一臺機器
----------------------------
4.1.1/backup/bss/a1拆分爲一臺機器
4.1.2/backup/bss/a2拆分爲一臺機器
4.1.3/backup/bss/a3拆分爲一臺機器