1. 程式人生 > >nfs詳解及實現全網備份

nfs詳解及實現全網備份

1.統一hosts

cat /etc/hosts
172.16.1.5    lb01
172.16.1.6    lb02
172.16.1.7    web02
172.16.1.8    web01
172.16.1.51    db01
172.16.1.31    nfs01
172.16.1.41    backup
172.16.1.61    m01

2.服務端軟體安裝及啟動

rpm -qa nfs-utils rpcbind
yum -y install nfs-utils rpcbind
# 注意啟動順序,rpcbind在前,nfs在後
/etc/init.d/rpcbind start
# 檢視有沒有'房源'
rpcinfo -p localhost
# 使用yum/rpm包安裝的軟體,推薦使用/etc/init.d/nfs start這樣的啟動方式
/etc/init.d/nfs start
chkconfig nfs on
chkconfig rpcbind on
# 開機啟動的順序在指令碼中寫著
ls /etc/rc.d/rc3.d/ | egrep "nfs|rpcbind"
S13rpcbind
S14nfslock
S30nfs

3.伺服器端配置

mkdir /data
chown nfsnobody.nfsnobody /data/
# sync是直接寫入磁碟,async是先寫到快取,再統一寫到磁碟
cat /etc/exports
/data 172.16.1.0/24(rw,sync)
# reload的作用:讓已經到達伺服器的連線正常被處理,並拒絕新連線
/etc/init.d/nfs reload
# reload相當於下面的命令,exportfs還支援不用配置檔案就可以把目錄共享出去
/usr/sbin/exportfs -rv
/usr/sbin/exportfs -o rw,sync 172.16.1.0/24:/data2
# 檢視有沒有把目錄'共享出去'
showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
# 檢視nfs掛載出去的目錄的所有情況
cat /var/lib/nfs/etab

4.客戶端(web01)安裝及啟動,優化掛載

yum -y install nfs-utils rpcbind
/etc/init.d/rpcbind start
chkconfig rpcbind on
# 掛載之前檢測
showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
mount -t nfs 172.16.1.31:/data /mnt
umount /mnt
# 如果發現了device is busy,不要用fuser此類的命令,直接用lf(lazy、force)引數
umount -lf /mnt
# 優化的引數有下面這些,但預設的其實就行(效能引數越多,速度可能越慢)
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 172.16.1.31:/data /mnt
echo 'mount -t nfs 172.16.1.31:/data /mnt' >> /etc/rc.local
# 服務端進行NFS核心優化
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

5.故障修復案例:人為失誤損壞fstab檔案,錯誤導致系統無法啟動

進入救援模式:
mount -o rw,remount /
然後修改/etc/fstab
檔案系統只讀故障修復案例:
問題產生原因:
a.RSYNC bug
b.檔案系統內部自動一致性導致稱為ro(只讀)
解決辦法:進入救援模式
mount -o rw,remount /

6.如何把掛載nfs資訊寫在/etc/fstab中,並能開機掛載成功

172.16.1.31:/mnt  /mnt  nfs defaults  0 0
chkconfig netfs on 
all_squash:將遠端訪問的所有普通使用者對映為匿名使用者或使用者組(一般為nfsnobody)
root_squash:將root使用者及所屬使用者組都對映為匿名使用者
# 客戶端/etc/exports中新增如下配置:
/data1 172.16.1.0/24(rw,sync,all_squash,root_squash,anonuid=888,anongid=888)
useradd -u 888 zuma -s /sbin/nologin -M
chown -R zuma.zuma /data1/
# 就這樣,客戶端不論是root來還是普通使用者來,都被對映為zuma這個使用者.

7.實現全網備份指令碼

#!/bin/bash
IP=$(ifconfig eth1|awk -F '[ :]+' 'NR==2 {print$4}')
Path=/backup
if [$(date +%w) -eq 0]
then
    Time="week_$(date +%F-%w -d "-1day")"
else
    Time=$(date +%F -d "-1day")
fi
mkdir $Path/$IP/ -p

cd /
tar zcvfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html/* app/logs/*
md5sum $Path/$IP/backup_$Time.tar.gz > $Path/$IP/flag_$Time.log
rsync -az $Path/ [email protected]::conf --password-file=/etc/rsync.password
find /backup/ -type f -mtime +7 \( -name "*.tar.gz" -o -name "*.log" \) | xargs rm -f

8.find實戰

# 找7天以內指定的檔案
find /backup/ -type f -mtime -7 \( -name "*.tar.gz" -o -name "*.log" \)
# backup上保留180天以內的資料,但週六的資料都保留
find /backup/ -type f -mtime +180 ! -name "*week*_6*"|xargs rm -f
# 查詢當天的flag日誌,並檢查檔案完整性(備份伺服器的目錄結構得和客戶端一模一樣)
find /backup -type f -name "*${Time}*.log"|xargs md5sum -c

9.備份伺服器上的指令碼

cat check_and_del.sh
Path=/backup
if [$(date +%w) -eq 0]
then
    Time="week_$(date +%F-%w -d "-1day")"
else
    Time=$(date +%F -d "-1day")
fi
LANG=en
find /backup -type f -name "*${Time}*.log"|xargs md5sum -c >> $Path/${Time}_result.log 2>&1
mail -s "$Time bak result" [email protected] < $Path/${Time}_result.log
find /backup/ -type f -mtime +180 ! -name "*week*_6*"|xargs rm -f