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的優缺點分析mysql
優勢 linux
缺點
有上面的工做原理能夠看出,由較少的客戶端訪問相對較小的數據集時這種結構工做的很好,經過直接鏈接的存儲器可以收到顯著的效益(就象你PC上的磁盤);也就是數據可以由多個客戶端共享,可以由任何有NFS能力的客戶端訪問。但是若是大量的客戶端須要訪問數據或太大的數據集時,NFS服務器很快就變成了一個瓶頸,抑制了系統性能。
[NFS 處理高性能計算(HPC)一直不夠理想。高性能計算涉及到的數據文件很是龐大,而且 NFS 客戶機的數量可能達到幾千臺。(想想擁有數千個計算節點的計算集羣或網格)。在這裏,NFS 是一個負擔,由於 NFS 服務器的侷限性 — 好比帶寬、存儲容量和處理器速度 — 限制了整體計算性能。NFS 在這裏成了瓶頸。]—IBM解釋nginx
準備工做:
兩臺或以上機器,一臺做爲服務端,其餘爲客戶端,
這裏用192.168.66.132做爲服務端,安裝nfs-utils和rpcbind包,192.168.66.131爲客戶端,安裝nfs-utils包
服務端安裝配置sql
一、 #安裝nfs-utils和rpcbind [root@02 ~]# yum install -y nfs-utils rpcbind 二、#安裝完後修改配置文件,指定要進行分享的目錄;指定要共享該目錄的機器,ip能夠ip段,也能夠寫ip [root@02 ~]# vim /etc/exports /home/nfstestdir 192.168.66.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000) 三、#建立分享目錄並制定權限,這裏爲了實驗把權限設置爲777 [root@02 ~]# mkdir /home/nfstestdir [root@02 ~]# chmod 777 /home/nfstestdir 四、#啓動服務並查看 [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 五、#啓動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 六、#若是想讓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配置選項的含義:shell
• rw 讀寫vim
• ro 只讀windows
• sync 同步模式,內存數據實時寫入磁盤centos
• async 非同步模式數組
• no_root_squash 客戶端掛載NFS共享目錄後,root用戶不受約束,權限很大安全
• root_squash 與上面選項相對,客戶端上的root用戶收到約束,被限定成某個普通用戶
• all_squash 客戶端上全部用戶在使用NFS共享目錄時都被限定爲一個普通用戶
• anonuid/anongid 和上面幾個選項搭配使用,定義被限定用戶的uid和gid
客戶端上作一個掛載
一、安裝rpcbind,rpcbind包是由nfs-utils自帶的包一塊兒安裝的。
[root@01 ~]# yum install -y nfs-utils
二、查看服務端分享的目錄,這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
三、把服務端分享的目錄掛載到本地
[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 顯示共享目錄
效果測試
一、修改服務端配置文件
vim /etc/exports #新增一行 /tmp 192.168.66.0/24(rw,sync,no_root_squash)
二、更新配置文件(從新掛載) exportfs -arv //不用重啓nfs服務,配置文件就會生效
[root@02 nfstestdir]# exportfs -arv exporting 192.168.66.0/24:/tmp exporting 192.168.66.0/24:/home/nfstestdir
三、在客戶端查看權限
[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