NFS重要問題 1、有關NFS客戶端普通用戶寫NFS的問題。 1)為什麼要普通用戶寫NFS。 2)exports加all_squash。 Rsync介紹 什麼是Rsync? Rsync是一款開源的、快速的、多功能的、可實現全量即增量的本地或遠程數據同步備份的優秀工具。Rsync軟體適用於unix、l... ...
NFS重要問題
1、有關NFS客戶端普通用戶寫NFS的問題。
1)為什麼要普通用戶寫NFS。
2)exports加all_squash。
Rsync介紹
什麼是Rsync?
Rsync是一款開源的、快速的、多功能的、可實現全量即增量的本地或遠程數據同步備份的優秀工具。Rsync軟體適用於unix、linux、windows等多種操作系統平臺。
Rsync簡介
Rsync英文全稱Remote synchronization。從軟體的名稱就可以看出來,Rsync具有可使本地和遠程兩台主機之間的數據快速複製同步鏡像、遠程備份的功能,這個功能類似ssh帶的scp命令,但又優於scp命令的功能,scp每次都是全量拷貝,而rsync可以增量拷貝。當然,Rsync還可以在本地主機的不同分區或目錄之間全量及增量的複製數據,這又類似cp命令,但同樣也優於cp命令,cp每次都是全量拷貝,而rsync可以增量拷貝。
利用rsync還可以實現刪除文件和目錄的功能,又相當於rm命令。
一個rsync相當於scp、cp、rm,但是還優於他們每一個命令。
Rsync的特性
1、支持拷貝特殊文件如鏈接文件、設備等。
2、可以有排除指定文件或目錄同步的功能,相當於打包命令tar的排除功能。
3、可以做到保持原文件或目錄的許可權、時間、軟硬鏈接、屬主、屬組等所有屬性均不改變-p。
4、可以實現增量同步,即只同步變化的數據,因此數據傳輸效率很高。
5、可以使用rcp、rsh、ssh等方式來配合傳輸文件(rsync本身不對數據加密)。
6、可以通過socket(進程方式)傳輸文件和數據(服務端和客戶端)。
7、支持匿名或認證的進程模式傳輸,可以實現方便安全的進行數據備份及鏡像。
Rsync的企業工作場景說明
兩台伺服器之間數據做定時同步cron+rsync
全網伺服器數據備份
rsync結合inotify的功能做實時的數據同步
Rsync的工作方式
rsync命令是客戶端命令。
Rsync大致使用三種主要的傳輸數據的方式。
1、單個主機本地之間的數據傳輸(此時類似cp命令的功能)。
2、藉助rcp、ssh等通道來傳輸數據(此時類似scp命令的功能)。
3、以守護進程(socket)的方式傳輸數據(rsync自身的重要功能)。
- [root@server ~]# rsync -avz /etc/hosts /tmp/ #cp
- sending incremental file list
- hosts
- sent 124 bytes received 31 bytes 310.00 bytes/sec
- total size is 158 speedup is 1.02
- [root@server ~]# ls /tmp
- hosts yum.log
- [root@server ~]# ll /tmp/
- total 4
- -rw-r--r--. 1 root root 158 Jan 12 2010 hosts
- -rw-------. 1 root root 0 Feb 4 09:06 yum.log
- [root@server ~]# mkdir /null #創建一個空目錄
- [root@server ~]# rsync -avz --delete /null/ /tmp/ #rm
- sending incremental file list
- ./
- deleting .ICE-unix/
- deleting yum.log
- deleting hosts
- sent 29 bytes received 15 bytes 88.00 bytes/sec
- total size is 0 speedup is 0.00
- [root@server ~]# ll /tmp/
- total 0
藉助ssh通道推送數據
源端:
- [root@server ~]# ll /tmp/
- total 4
- -rw-r--r--. 1 root root 158 Jan 12 2010 hosts
- [root@server ~]# rsync -avzP -e 'ssh -p 22' /tmp/ [email protected]:/tmp
- The authenticity of host '192.168.31.133 (192.168.31.133)' can't be established.
- RSA key fingerprint is 9e:4c:c8:4d:df:0e:d8:2a:48:8a:04:22:8f:80:64:9a.
- Are you sure you want to continue connecting (yes/no)? yes
- Warning: Permanently added '192.168.31.133' (RSA) to the list of known hosts.
- [email protected]'s password:
- sending incremental file list
- ./
- hosts
- 158 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/2)
- sent 141 bytes received 34 bytes 18.42 bytes/sec
- total size is 158 speedup is 0.90
目標端:
- [root@lamp ~]# ll /tmp/
- total 0
- -rw-------. 1 root root 0 Feb 4 09:10 yum.log
- [root@lamp ~]# ll /tmp/
- total 4
- -rw-r--r--. 1 root root 158 Jan 12 2010 hosts
- -rw-------. 1 root root 0 Feb 4 09:10 yum.log
藉助ssh通道拉取數據
源端:
- [root@server ~]# ll /tmp
- total 0
- [root@server ~]# rsync -avzP -e 'ssh -p 22' [email protected]:/tmp/ /tmp/
- [email protected]'s password:
- receiving incremental file list
- ./
- hosts
- 158 100% 154.30kB/s 0:00:00 (xfer#1, to-check=2/4)
- yum.log
- 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=1/4)
- .ICE-unix/
- sent 56 bytes received 235 bytes 38.80 bytes/sec
- total size is 158 speedup is 0.54
- [root@server ~]# ll /tmp
- total 4
- -rw-r--r--. 1 root root 158 Jan 12 2010 hosts
- -rw-------. 1 root root 0 Feb 4 09:10 yum.log
關鍵語法說明:
1、-avz相當於-vzrtopgD1,表示同步時文件和目錄屬性不變。
2、-P顯示同步的過程,可以用--progress替換。
3、-e 'ssh -p 22',表示通過ssh的通道傳輸數據,-p 22可省略。
4、[email protected]:/tmp/遠程的主機系統用戶、地址、路徑。
5、/tmp/本地的路徑。
Rsync命令同步參數選項
- Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
- Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
常用參數選項說明:
-v,--verbose:詳細模式輸出,傳輸時的進度等信息。
-z,--compress:傳輸時進行壓縮以提高傳輸效率,--compress-level=NUM可按級別壓縮。
-a,--archive:歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等於-rtopgDl。
-r,--recursive:對子目錄以遞歸模式,即目錄下的所有目錄都同樣傳輸,註意是小寫r。
-t,--times:保持文件時間信息。
-o,--owner:保持文件屬主信息。
-p,--perms:保持文件許可權。
-g,--group:保持文件屬組信息。
-P,--progress:顯示同步的過程及傳輸時的進度等信息。
-D,--devices:保持設備文件信息。
-l,--links:保留軟鏈接。
-e,--rsh=COMMAND:使用的通道協議,指定替代rsh的shell程式。例如:ssh。
--exclude=PATTERN:指定排除不需要傳輸的文件模式。
--exclude-from=file(文件名所在的目錄文件)
--bwlimit=PATE(限速) limit socket I/O bandwidth。
生產參數:-avz或者-vzrtopg。
查看rsync安裝包
- [root@backup ~]# rpm -qa rsync
- rsync-3.0.6-12.el6.x86_64
- [root@backup ~]# touch /etc/rsyncd.conf #創建rsync配置文件
- [root@backup ~]# cat /etc/rsyncd.conf
- #Rsync server
- #created by oldboy 13:42 2017-02-04
- ##rsyncd.conf start##
- uid = rsync #客戶端具有rsync用戶的許可權
- gid = rsync
- use chroot = no #與安全相關
- max connections = 2000 #客戶端最大連接數
- timeout = 600 #超時時間
- pid file = /var/run/rsyncd.pid #進程號文件
- lock file = /var/run/rsync.lock #鎖文件
- log file = /var/log/rsyncd.log #log文件
- ignore errors #忽略錯誤
- read only = false #可讀寫
- list = false #不可遠程列表
- hosts allow = 192.168.31/24 #允許的ip
- hosts deny = 0.0.0.0/32
- auth users = rsync_backup #遠程連接的用戶
- secrets file = /etc/rsync.password #存放用戶和密碼的文件
- #################################
- [backup] #模塊
- comment = backup server by oldboy 13:48 2017-02-04 #註釋
- path = /backup #共用的目錄
啟動rsync服務
- [root@backup ~]# rsync --daemon
- [root@backup ~]# ps -ef|grep rsync|grep -v grep
- root 1149 1 0 14:08 ? 00:00:00 rsync --daemon
- [root@backup ~]# netstat -lntup|grep rsync
- tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1149/rsync
- tcp 0 0 :::873 :::* LISTEN 1149/rsync
- [root@backup ~]# lsof -i:873
- COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
- rsync 1149 root 3u IPv4 9918 0t0 TCP *:rsync (LISTEN)
- rsync 1149 root 5u IPv6 9919 0t0 TCP *:rsync (LISTEN)
創建rsync用戶
- [root@backup ~]# useradd rsync -s /sbin/nologin -M
創建共用目錄/backup
- [root@backup ~]# mkdir /backup
- [root@backup ~]# chown -R rsync /backup/
- [root@backup ~]# ls -ld /backup
- drwxr-xr-x 2 rsync root 4096 Feb 4 14:16 /backup
創建密碼文件/etc/rsync.password
- [root@backup ~]# echo "rsync_backup:system">/etc/rsync.password
- [root@backup ~]# cat /etc/rsync.password
- rsync_backup:system #用戶名:密碼
修改密碼文件/etc/rsync.password的許可權
- [root@backup ~]# ll /etc/rsync.password
- -rw-r--r-- 1 root root 20 Feb 4 14:19 /etc/rsync.password
- [root@backup ~]# chmod 600 /etc/rsync.password
- [root@backup ~]# ll /etc/rsync.password
- -rw------- 1 root root 20 Feb 4 14:19 /etc/rsync.password
rsync server配置步驟
1、vi /etc/rsyncd.conf配置。
2、創建rsync用戶,及共用目錄/backup。
useradd rsync -s /sbin/nologin -M
id rsync
mkdir /backup
chown -R rsync /backup
3、創建密碼文件/etc/rsync.password。
echo "用戶名:密碼" >/etc/rsync.password
chmod 600 /etc/rsync.password
4、啟動服務
rsync --daemon
netstat -lntup|grep rsync
ps -ef|grep rsync|grep -v grep
5、加入開機自啟動
echo "rsync --daemon" >>/etc/rc.local
cat /etc/rc.local
rsync客戶端配置步驟
1、創建密碼文件
echo "密碼">/etc/rsync.password
chmod 600 /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 -avz rsync://[email protected]/backup /tmp/ --password-file=/etc/rsync.password
安全的優化:
pkill rsync #結束進程rsync
rsync --daemon --address=10.0.0.10
進程管理:
pkill 進程名
killall 進程名
kill pid(進程號)
平滑結束進程:
kill -HUP `cat /var/run/rsyncd.pid`
kill –USR2 `cat /var/run/rsyncd.pid`
Rsync服務端排錯
1、查看rsync服務配置文件路徑是否正確,正確的預設路徑為:/etc/rsyncd.conf。
2、查看配置文件里host allow、host deny允許的ip網段是否是允許客戶端訪問的ip網段。
3、查看配置文件中path參數里的路徑是否存在,許可權是否正確(正常應為配置文件中的UID參數對應的屬主和組)。
4、查看rsync服務是否啟動。查看命令為ps -ef|grep rsync。埠是否存在netstat -lnt|grep 873。
5、查看iptables防火牆和selinux是否開啟允許rsync服務通過,也可以關閉。
6、查看服務端rsync配置的密碼文件是否為600的許可權,密碼文件格式是否正確,正確格式:用戶名:密碼,文件路徑和配置文件里的secrect files參數對應。
7、如果是推送數據,要查看配置rsyncd.conf文件中用戶是否對模塊下目錄有可讀寫的許可權。
rsync優點
1、增量備份同步。
2、支持socket(daemon)。
3、集中備份。
rsync缺點
1、大量小文件同步的時候比對時間較長,有的時候rsync進程會停止。
解決辦法:a、打包同步。b、drbd(文件系統同步複製block)。
2、同步大文件時(10G以上)會有中斷。未完整同步前是隱藏文件,同步完成之後為正常文件。
無差異同步:--delete(慎用),使用該參數前先備份。
客戶端rsync命令排除
排除單個文
rsync -avz --exclude=a /data1/ [email protected]::oldboy --password-file=/etc/rsync.password
排除多個文件
rsync -avz --exclude={a,b} /data1/ [email protected]::oldboy --password-file=/etc/rsync.password
rsync -avz –exclude-from=paichu.log /data1/ [email protected]::oldboy --password-file=/etc/rsync.password
定時備份案例
- [root@lamp scripts]# cat /server/scripts/bak.sh
- #!/bin/sh
- path=/backup
- dir="`ifconfig eth0|awk -F '[ :]+' 'NR==2 {print $4}'`_$(date +%F)"
- mkdir $path/$dir -p &&\
- /bin/cp /var/spool/cron/root $path/$dir/cron_root_$(date +%F) &&\
- /bin/cp /etc/rc.local $path/$dir/rc.local_$(date +%F) &&\
- rsync -az $path/ [email protected]::backup --password-file=/etc/rsync.password
- [root@lamp scripts]# /bin/sh /server/scripts/bak.sh
- [root@lamp scripts]# crontab -e
- #rsync定時備份
- 00 01 * * * /bin/sh /server/scripts/bak.sh >dev/null 2>&1
用scp發送到另外一臺伺服器
- [root@lamp scripts]# scp /server/scripts/bak.sh [email protected]:/tmp