適合於中小型網站集羣架構。 大型網站,會用到分佈式文件系統 Moosefs( mfs),glusterfs,FastDFS 功能:經過網絡讓不一樣的主機系統之間能夠共享文件或目錄。
NFS在企業中的應用場景
在企業架構的工做環境中,NFS網絡文件系統通常用來存儲共享視頻、圖片、附件等靜態資源文件,通常是把網站用戶上傳的文件都放到NFS共享裏。
NFS 工做原理
NFS的RPC服務,在Centos5.X下稱爲portmap,在Centos6.X下稱爲rpcbind
NFS軟件列表
一、nfs-utils:這個NFS服務主程序
包括rpc.nfsd、rpc.mountd 兩個daemons和相關文檔說明及執行命令文件等。
二、rpcbind:Centos6.x下面RPC的主程序。node
安裝:yum install nfs-utils rpcbind -y 查看:rpm -qa nfs-utils rpcbind /etc/init.d/rpcbind status==========查看rpcbind服務是否開啓。 /etc/init.d/rpcbind start ==========啓動rpcbind服務。 netstat -lntup|grep rpcbind========查看rpcbind服務的端口。 lsof -i :111 或 netstat -lntup|grep 111==========知道端口查看對應的服務。 chkconfig --list rpcbind===========查看rpcbind服務是否開機自啓動。 rpcinfo -p localhost==========查看rpc裏有沒有nfs的端口信息。 chkconfig nfs on ==========設置nfs開機自啓動。 注意:rpcbind先啓動,nfs再啓動。rpcbind重啓後,rpcinfo -p localhost裏就沒有nfs的數據了。 肯定rpcbind服務和nfs服務前後啓動順序(less /etc/init.d/rpcbind,less etc/init.d/nfs 看chkconfig後面的數字) 之後開機自啓動服務命令放到/etc/rc.local裏面。 ps -ef|egrep "rpc|nfs"========查看rpc和nfs多個服務進程。
配置NFS服務端
一、NFS服務端配置文件路徑:/etc/exports,默認是空的。
二、/etc/exports配置文件格式
NFS共享的目錄 NFS客戶端地址1(參數1,參數2....) 客戶端地址2(參數1,參數2.....)
NFS共享的目錄 NFS客戶端地址(參數1,參數2....) 使用第二個格式
實*例一:共享/data目錄給192.168.153.整個網段的主機讀寫*
(即實現將nfs server上的/data目錄共享給192.168.153.,整個網段的主機可讀寫,在nfs-server上執行,ip地址爲192.168.153.134。)
答:也能夠用exportfs -o rw,sync 192.168.153.134:/data
git
/etc/init.d/nfs reload 至關於 exportfs -rv ===============平滑生效 (reload和exportfs -r做用同樣的緣由): [root@nfs-server ~]# grep "reload" -A 1 /etc/init.d/nfs reload | force-reload) /usr/sbin/exportfs -r
在客戶端執行掛載:github
mount -t nfs 192.168.153.134:/data /mnt=============掛載 df -h============查看掛載 mount==========查看掛載 cat /proc/mounts=====查看掛載 ls /mnt/==========查看掛載點/mnt/,就會讀到目錄/data/下的文件。 (sync讀寫到磁盤)
在客戶端實現掛載服務端/data目錄 (umount 卸載掛載)shell
首先查看服務端可否掛載 showmount -e loaclhost,再肯定客戶端可否掛載 showmount -e 192.168.153.134 mount -t nfs 192.168.153.134:/data /mnt重啓以後就沒有了,因此將mount -t nfs 192.168.153.134:/data /mnt放到/etc/rc.local永久生效。
在客戶端/mnt建立文件,權限不夠安全
在服務端執行cat /var/lib/nfs/etab查看權限配置的參數:65534 而後grep 65534 /etc/passwd查看有權限的用戶 最後改變屬主 chown -R nfsnobody /data (-R遞歸)
在服務端在/data下建立文件,在客戶端顯示屬主是root。(注意:若是出現NO route to host,說明防火牆攔截;而後把防火牆關掉 /etc/init.d/iptables stop;最後檢查是否連上 telnet 192.168.153.134 111)
mount掛載參數
若是追求極致:能夠用以下參數掛載。(瞭解便可,默認就有這些參數)性能優化
mount -t nfs -o bg,hard,intr,rsize=131072,wsize=131072 192.168.153.134:/data /mnt mount -t==============指定文件類型 hard ==============硬掛載,通常配合intr使用 rsize,wsize==========讀和寫的傳輸能力,數值越大傳輸越快。 若是想優化掛載,就把rsize和wsize的值加大。
man nfs後的 -o重要參數服務器
sync======讀寫到磁盤 rw ======以可讀可寫的方式掛載一個文件系統 noexec======在掛載的文件系統中不容許直接執行任何二進制的程序 noatime=======不更新文件系統上的inode訪問時間 nodiratime=======不更新文件系統上目錄inode訪問時間 nosuid========不容許suid生效 remount=======嘗試從新掛載一個已經掛載了的文件系統
有關案例:
1、fstab修改錯誤致使系統沒法啓動故障修復案例
維護模式或救援模式:mount -o rw,remount / 而後修改/etc/fstab
2、文件系統只讀故障修復案例
維護模式或救援模式:mount -o rw,remount /
mount掛載性能優化參數選項網絡
一、安全掛載參數 mount -t nfs -o nosuid,noexec,nodev,rw 192.168.153.134:/data /mnt 二、性能優化掛載 ① 禁止更新目錄及文件時間戳掛載 mount -t nfs -o noatime,nodiratime 192.168.153.134:/data /mnt ② 安全加優化的掛載方式 mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 192.168.153.134:/data /mnt
rsync是一款開源的、快速的、多功能的、可實現全量和增量的本地或遠程數據同步備份的優秀工具。
一個rsync至關於scp,cp,rm,可是還優於他們每個命令。架構
scp 遠程拷貝 cp 本地拷貝 rm 刪除功能 rsync能夠是一個網絡服務(port端口 socket服務)
rsync命令是客戶端命令參數:併發
-a(archive)歸檔模式,表示以遞歸方式傳輸文件,並保持全部文件屬性 -v(verbose)詳細模式輸出,傳輸時的進度等信息 -z(compress)傳輸時進行壓縮以提升傳輸效率,--compress-level=HUM可按級別壓縮 -r(recursive)對子目錄以遞歸模式,即目錄下的全部目錄都一樣傳輸 -t(times)保持文件時間信息 -o(owner)保持文件屬主信息 -p(perms)保持文件權限 -g(group)保持文件屬組信息 -P(progress)顯示同步的過程及傳輸時的進度等信息 -D(devices)保持設備文件信息 -l(link)保留軟連接
第一種工做模式:local(本地)
rsync -avz /etc/hosts /tmp/ =====cp 增量同步到/tmp/下,若是同樣不一樣步。 # -avz保持屬性 rsync -avz --delete /null/ /tmp/ =====rm 前面有啥,後面有啥;前面沒有,後面的刪掉,絕對同樣。
第二種工做模式:(remote shell 遠程的shell)
push(推): rsync -avzP -e 'ssh -p 22' /tmp/ root@192.168.153.133:/tmp/ # -e指定隧道,-p 22 隧道的端口 pull(拉): rsync -avzP -e 'ssh -p 22' root@192.168.153.133:/tmp/ /tmp/
rsync配置文件:/etc/rsyncd.conf
啓動rsync服務:rsync --daemon 查看進程:ps -ef|grep rsync|grep -v grep 殺進程:pkill 進程名=========pkill rsync killall 進程名=========killall rsync kill pid(-9強制,不建議用)=======kill -HUP `cat /var/run/rsyncd.pid`(平緩) 取端口號:netstat -lntup|grep rsync ss -lntup|grep rsync lsof -i :873 鏈接遠程主機:telnet 192.168.153.136 鏈接遠程主機rsync端口:telnet 192.168.153.136 873 查看防火牆狀態:/etc/init.d/iptables status 關閉:/etc/init.d/iptables stop 安全優化:rsync --daemon --address=192.168.153.136 只有訪問192.168.153.136這個ip才和你對話,其餘的都不理你。
rsync配置服務端
useradd rsync -s /sbin/nologin -M 添加虛擬用戶,不建立家目錄。 mkdir /backup chown -R rsync /backup/ 客戶端連上就是rsync權限 echo "rsync_backup:oldboy" >/etc/rsync.password 建立帳戶和密碼的文件 chmod 600 /etc/rsync.password 把這個文件權限改爲600
總步驟:
服務端配置 rsync
一、在rsync配置文件里加上上面那些配置
客戶端配置rsync
一、建立密碼文件 echo "oldboy" >/etc/rsync.password chmod 600 /etc/rsync.passsword ls -ld /etc/rsync.password cat /etc/rsync.password 二、rsync(推、拉) push(推): rsync -avz /tmp/ rsync_backup@192.168.153.136::backup --password-file=/etc/rsync.password pull(拉): rsync -avz rsync_backup@192.168.153.136::backup /tmp/ --password-file=/etc/rsync.password rsync優勢:
增量備份同步,支持socket(daemon),集中備份。
rsync缺點:
一、大量小文件同步的時候,對比時間較長,有的時候,rsync進程中止。 解決:a、打包同步。 b、 drbd(文件系統同步複製block) 二、同步大文件,10G這樣的大文件有時也會出現問題,中斷。未完整同步以前,是隱藏文件,同步完成後改成正常文件。
客戶端rsync命令排除:
客戶端定時同步:
添加到定時任務(crontab -e)
inotify是一種強大的、細粒度的、異步的文件系統事件監控機制。
在nfs上安裝inotify
一、mkdir -p /home/oldboy/tools ###建立存放的目錄 二、cd /home/oldboy/tools/ 三、wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz ###inotity下載的網址 四、ls -l /proc/sys/fs/inotify/ ###看是否支持 五、tar zxf inotify-tools-3.14.tar.gz cd inotify-tools-3.14 ###解包並切換路徑 六、./configure --prefix=/usr/local/inotify-tools-3.14 ###軟件包安裝到/usr/local/inotify-tools-3.14 路徑下 七、make && make install 八、ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify-tools ###建立軟連接
工具集介紹:(cd /usr/local/inotify-tools && ll bin)
一、inotifywait:監控目錄的變化,守護進程。
二、inotifywatch:收集被監視的文件系統使用度統計數據,指文件系統事件發生的次數統計。
NFS實時監控/data目錄的變化(create,close_write,delete增,改,刪)/usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create,close_write,delete /data
腳本實現NFS服務器與backup實時同步(inotify.sh)(200到300張併發環境)
--delete 無差別同步
而後將 /bin/sh server/scripts/inotify.sh & 放到/etc/rc.local裏
實時同步的優化
inotify 優缺點: