1. 程式人生 > >NFS 儲存以及 rsync 備份工具

NFS 儲存以及 rsync 備份工具

一、NFS(network file system)網路檔案共享服務

 適合於中小型網站叢集架構。
 大型網站,會用到分散式檔案系統 Moosefs( mfs),glusterfs,FastDFS
 功能:通過網路讓不同的主機系統之間可以共享檔案或目錄。

NFS在企業中的應用場景
在企業架構的工作環境中,NFS網路檔案系統一般用來儲存共享視訊、圖片、附件等靜態資原始檔,一般是把網站使用者上傳的檔案都放到NFS共享裡。
NFS 儲存以及 rsync 備份工具
NFS 儲存以及 rsync 備份工具
NFS 工作原理
NFS 儲存以及 rsync 備份工具
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
NFS 儲存以及 rsync 備份工具

 /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
NFS 儲存以及 rsync 備份工具

啟動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配置檔案里加上上面那些配置
NFS 儲存以及 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命令排除:
NFS 儲存以及 rsync 備份工具
客戶端定時同步:
NFS 儲存以及 rsync 備份工具
新增到定時任務(crontab -e)
NFS 儲存以及 rsync 備份工具

三、實時同步:(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 儲存以及 rsync 備份工具
指令碼實現NFS伺服器與backup實時同步(inotify.sh)(200到300張併發環境)
NFS 儲存以及 rsync 備份工具
--delete 無差異同步
然後將 /bin/sh server/scripts/inotify.sh & 放到/etc/rc.local裡
實時同步的優化
NFS 儲存以及 rsync 備份工具
inotify 優缺點:
NFS 儲存以及 rsync 備份工具
NFS 儲存以及 rsync 備份工具