NFS 儲存以及 rsync 備份工具
一、NFS(network file system)網路檔案共享服務
適合於中小型網站叢集架構。
大型網站,會用到分散式檔案系統 Moosefs( mfs),glusterfs,FastDFS
功能:通過網路讓不同的主機系統之間可以共享檔案或目錄。
NFS在企業中的應用場景
在企業架構的工作環境中,NFS網路檔案系統一般用來儲存共享視訊、圖片、附件等靜態資原始檔,一般是把網站使用者上傳的檔案都放到NFS共享裡。
NFS 工作原理
NFS的RPC服務,在Centos5.X下稱為portmap,在Centos6.X下稱為rpcbind
NFS軟體列表
1、nfs-utils:這個NFS服務主程式
包括rpc.nfsd、rpc.mountd 兩個daemons和相關文件說明及執行命令檔案等。
2、rpcbind:Centos6.x下面RPC的主程式。
安裝: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服務端
1、NFS服務端配置檔案路徑:/etc/exports,預設是空的。
2、/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
/etc/init.d/nfs reload 相當於 exportfs -rv ===============平滑生效
(reload和exportfs -r作用一樣的原因):
[[email protected] ~]# grep "reload" -A 1 /etc/init.d/nfs
reload | force-reload)
/usr/sbin/exportfs -r
在客戶端執行掛載:
mount -t nfs 192.168.153.134:/data /mnt=============掛載
df -h============檢視掛載
mount==========檢視掛載
cat /proc/mounts=====檢視掛載
ls /mnt/==========檢視掛載點/mnt/,就會讀到目錄/data/下的檔案。
(sync讀寫到磁碟)
在客戶端實現掛載服務端/data目錄 (umount 解除安裝掛載)
首先檢視服務端能否掛載 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=======嘗試重新掛載一個已經掛載了的檔案系統
有關案例:
一、fstab修改錯誤導致系統無法啟動故障修復案例
維護模式或救援模式:mount -o rw,remount / 然後修改/etc/fstab
二、檔案系統只讀故障修復案例
維護模式或救援模式:mount -o rw,remount /
mount掛載效能優化引數選項
1、安全掛載引數
mount -t nfs -o nosuid,noexec,nodev,rw 192.168.153.134:/data /mnt
2、效能優化掛載
① 禁止更新目錄及檔案時間戳掛載
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是一款開源的、快速的、多功能的、可實現全量和增量的本地或遠端資料同步備份的優秀工具。
一個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/ [email protected]:/tmp/ # -e指定隧道,-p 22 隧道的埠
pull(拉):
rsync -avzP -e 'ssh -p 22' [email protected]:/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
1、在rsync配置檔案里加上上面那些配置
客戶端配置rsync
1、建立密碼檔案
echo "oldboy" >/etc/rsync.password
chmod 600 /etc/rsync.passsword
ls -ld /etc/rsync.password
cat /etc/rsync.password
2、rsync(推、拉)
push(推): rsync -avz /tmp/ [email protected]::backup --password-file=/etc/rsync.password
pull(拉): rsync -avz [email protected]::backup /tmp/ --password-file=/etc/rsync.password
rsync優點:
增量備份同步,支援socket(daemon),集中備份。
rsync缺點:
1、大量小檔案同步的時候,對比時間較長,有的時候,rsync程序停止。
解決:a、打包同步。 b、 drbd(檔案系統同步複製block)
2、同步大檔案,10G這樣的大檔案有時也會出現問題,中斷。未完整同步之前,是隱藏檔案,同步完成後改為正常檔案。
客戶端rsync命令排除:
客戶端定時同步:
新增到定時任務(crontab -e)
三、實時同步:(inotify或sersync)
inotify是一種強大的、細粒度的、非同步的檔案系統事件監控機制。
在nfs上安裝inotify
1、mkdir -p /home/oldboy/tools ###建立存放的目錄
2、cd /home/oldboy/tools/
3、wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz ###inotity下載的網址
4、ls -l /proc/sys/fs/inotify/ ###看是否支援
5、tar zxf inotify-tools-3.14.tar.gz cd inotify-tools-3.14 ###解包並切換路徑
6、./configure --prefix=/usr/local/inotify-tools-3.14 ###軟體包安裝到/usr/local/inotify-tools-3.14 路徑下
7、make && make install
8、ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify-tools ###建立軟連結
工具集介紹:(cd /usr/local/inotify-tools && ll bin)
1、inotifywait:監控目錄的變化,守護程序。
2、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 優缺點: