什么是rsync
rsync一款快速增量備份工具 Remote Sync,遠程同步 支持本地復制,或者與其他SSH、rsync主機同步。
三種主要的傳輸數據的方式
1. 單個主機本地之間的數據傳輸
2. 借助rcp, ssh等通道來傳輸數據
3. 以守護進程(socket)的方式傳輸數據(需要服務端客戶端配合, centos中自帶了客戶端)
單個主機本地之間的數據傳輸:
#將a目錄內容同步到b目錄 rsync -r a b #將/etc/hosts文件復制到/tmp/目錄下 rsync /etc/hosts /tpm/
借助ssh通道來傳輸數據:
#將a目錄下內容復制到遠程主機的~/b目錄下 rsync -r a/ -e 'ssh -p 22' huangxm@192.168.0.138:~/b #將目錄a復制到遠程主機的~/b目錄下,注意與上面的區別 rsync -r a -e 'ssh -p 22' huangxm@192.168.0.138:~/b
它相當與scp命令,同時也需要手動輸入密碼;如果不想手動輸入密碼,可以使用sshpass, 這樣我們就可以寫入crontab,做到定時同步
#安裝sshpass yum install -y sshpass #同步目錄a和遠程主機的目錄b rsync -r a/ -e 'sshpass -pgoitinfo ssh -p22' huangxm@192.168.0.138:~/b
常用參數
-v 詳細模式輸出,給出傳輸進度等信息
-z 壓縮傳輸 --compress-level=NUM 指定壓縮級別 1-9, 9是最大壓縮級別
-a 以歸檔方式傳輸,保留文件屬性
-r 遞歸傳輸
-t 保持文件時間信息
-o 保持文件屬主信息
-p 保持文件權限
-g 保持文件屬組信息
-P 顯示同步過程及進度等信息
-D 保持設備文件信息
-l 保持軟鏈接
這些參數加起來等於 –a
-e 使用的信道協議,如ssh
--exclude=PATTERN 指定排除不需要傳輸的文件
--exclude-from=FILE 排除FILE中記錄的文件
--delete 保證兩邊數據完全一樣,如果源里沒有該文件,就在目標目錄刪除
說明:
-avz 相當於 –vzrtopgDl
生產環境中常用: –avz 或 –vzrtopg
守護進程模式:
安裝服務端:
#yum install rsync
配置文件:/etc/rsyncd.conf
vim /etc/rsyncd.conf uid = rsync #用戶id gid = rsync use chroot = no #安全性,內網一般不考慮,設為no max connections = 200 #最多有多少個客戶端連接我 timeout = 300 #超時時間,秒 pid file = /var/run/rsyncd.pid #pid文件 lock file = /var/run/rsync.lock #傳輸時會給文件加鎖 log file = /var/log/rsyncd.log #日志文件 [test] #模塊 path = /test/ #客戶端來同步,就是同步該目錄 ignore errors #傳輸過程中遇到錯誤,自動忽略 read only = false #可讀可寫 list = false #不允許列表 hosts allow = 10.0.0.0/24 #允許的IP段 hosts deny = 0.0.0.0/32 #拒絕 auth users = rsync_backup #這是個虛擬用戶 secrets file = /etc/rsync.password #虛擬用戶對應的密碼文件
創建系統用戶rsync用來啟動服務
useradd rsync -s /sbin/nologin 授權 chown -R rsync.rsync /test
在/etc/rsync.password中添加虛擬用戶
echo "rsync_backup:1234" > /etc/rsync.password
用戶名和密碼用:分隔。
設置權限密碼文件權限
chmod 600 /etc/rsync.password
啟動服務端, 以守護進程方式
#rsync --daemon
端口: tcp 873
添加開機啟動
echo "/usr/bin/rsync --daemon" >> /etc/rc.local
客戶端:
客戶端只需要密碼文件,文件里只存放密碼:
echo "1234" > /etc/rsync.password
設置文件權限:
chmod 600 /etc/rsync.password
從服務端拉取文件:
rsync -avz rsync_backup@10.0.0.7::/test /data --password-file=/etc/rsync.password
注意:test是指test模塊,也就是服務端配置文件中的[test];而且有兩個冒號。
或者使用rsync協議
rsync -avz rsync://rsync_backup@10.0.0.7/test /data --password-file=/etc/rsync.password
往服務端推送文件:
rsync -avz /data/ rsync_backup@10.0.0.7::/test --password-file=/etc/rsync.password
排除指定文件和目錄
排除文件a:
rsync -avz --exclude=a /data/ rsync_backup@10.0.0.7::/test --password-file=/etc/rsync.password
排除多個文件:
rsync -avz --exclude={a,b} /data/ rsync_backup@10.0.0.7::/test --password-file=/etc/rsync.password
也可以將要排除的文件和目錄寫入一個文件,一行一個:
vim excefile.conf
test.py *.log dir1
使用—exclude-from
rsync -avz --exclude-from=excefile.conf /data/ rsync_backup@10.0.07::/test --password-file=/etc/rsync.password
在服務端設置要排除的文件:
在配置文件中加上:
exclude=a b c/d #c/d是指c目錄下的d
重啟:
kill `cat /var/run/rsyncd.pid`
rsync –daemon
服務器端共享多個目錄
uid = rsync #用戶id gid = rsync use chroot = no #安全性,內網一般不考慮,設為no max connections = 200 #最多有多少個客戶端連接我 timeout = 300 #超時時間,秒 pid file = /var/run/rsyncd.pid #pid文件 lock file = /var/run/rsync.lock #傳輸時會給文件加鎖 log file = /var/log/rsyncd.log #日志文件 ignore errors #傳輸過程中遇到錯誤,自動忽略 read only = false #可讀可寫 list = false #不允許列表 hosts allow = 10.0.0.0/24 #允許的IP段 hosts deny = 0.0.0.0/32 #拒絕 auth users = rsync_backup #這是個虛擬用戶 secrets file = /etc/rsync.password #虛擬用戶對應的密碼文件 [test] #模塊 path = /test/ #客戶端來同步,就是同步該目錄 [data] path = /data/
寫配置文件時,盡量把相同的配置放到公共區域,自己特有的放到自己的模塊下。
