rsync遠程同步
技能目標
- 學會配置rsync備份源
- 學會使用rsync下行、上行異地備份
- 學會使用rsync+inotify實時備份
rsync的作用
正確、有效的備份方案是保障系統及數據安全的重要手段,在服務器中,通常會結合計劃性任務、shell腳本來執行本地備份。
爲了進一步提高備份的可靠性使用異地備份也是非常必要的
實驗實例
1:配置rsync源服務器
[root@localhost Packages] rpm -ivh rsync-3.0.9-18.el7.x86_64.rpm
警告:rsync-3.0.9-18.el7.x86_64.rpm: 頭V3 RSA/SHA256 Signature, 密鑰 ID f4a80eb5: NOKEY
準備中... ################################# [100%]
軟件包 rsync-3.0.9-18.el7.x86_64 已經安裝
2:建立/etc/rsyncd.conf配置文件
[root@localhost ~] vim /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = yes #//禁錮在本地源
address = 192.168.32.207 #//監聽本地地址
port 873 #//監聽端口
log file = /var/log/rsyncd.log #//日誌存放位置
pid file = /var/run/rsyncd.pid #//存放進程ID的文件位置
host allow = 192.168.32.0/24 #//允許訪問的客戶機地址
[wwwroot] #//共享模塊名稱
path = /var/www/html #//源目錄的實際路徑
comment = Document Root of www1.kgc.cn
read only = yes #//是否爲只讀
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #//同步時不再壓縮的文件類型
auth users = backuper #//授權賬戶
secrets file = /etc/rsyncd_users.db #//存放賬戶信息的數據文件
基於安全性的考慮,對於rsync的同步源最好允許以只讀方式做同步。另外,同步可以採用匿名的方式,只要將其中的auth users 和 secrets file 配置紀錄去掉就可以了
3:爲備份賬戶創建數據文件
[root@localhost ~] vim /etc/rsyncd_users.db
backuper:abc123
[root@localhost ~] chmod 600 /etc/rsyncd_users.db
備份用戶backuper需要對源目錄/var/www/html有相應的讀取權限,實際上只要other組有讀寫權限。則備份用戶backuper和運行用戶nobody也就有讀取權限
[root@localhost ~] mkdir -p /var/www/html
[root@localhost ~] ls -ld /var/www/html/
drwxr-xr-x. 2 root root 6 7月 31 09:36 /var/www/html/
4:啓動rsync服務程序,運行參數爲--daemon
完成上述操作後,執行rsync --daemon命令就可以啓動rsync服務,以獨立監聽的方式運行,若要關閉服務kill掉rsync的進程號(啓動前關閉防牆、setenforce 0)
[root@localhost ~] rsync --daemon
[root@localhost ~] netstat -ntap | grep rsync
tcp 0 0 192.168.32.207:873 0.0.0.0:* LISTEN 8830/rsync
4.1:使用rsync備份工具
有了同步源服務器之後,就可以使用rsync工具來執行遠程同步。
4.2:rsync命令的基本用法
絕大多數的備份程序要求指定原始位置和目標位置,rsync命令也一樣,最簡單的rsync用法類似於cp命令,例如:將/etc/fstab和目錄/boot/grub同步備份到/opt目錄下,其中“-r”選項表示遞歸整個目錄樹,”-l“選項用來備份鏈接文件
[root@localhost ~] rsync /etc/fstab /opt/
[root@localhost ~] cd /opt/
[root@localhost opt] ls
fstab rh
[root@localhost opt] cat fstab
#
# /etc/fstab
# Created by anaconda on Tue Jul 10 22:15:58 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=ca0fed2f-3b05-41a3-85b2-ef00661afa16 / xfs defaults 0 0
UUID=89c9c477-1d91-4581-b16d-240a37af2b2a /boot xfs defaults 0 0
UUID=d7521d72-fa9e-4d30-81c9-004547187a10 /home xfs defaults 0 0
UUID=a9dc5409-587d-48bb-91d1-cd1cfaea26d1 /opt xfs defaults 0 0
UUID=db2690ca-e206-4c8d-8209-3064cd31bf49 swap swap defaults 0 0
[root@localhost opt] rm -rf *
[root@localhost opt] ls
[root@localhost opt] rsync -rl /etc/fstab /var/log/ /opt/
[root@localhost opt] ls
amanda dmesg libvirt sa vmware-vgauthsvc.log.0 Xorg.2.log
anaconda dmesg.old maillog samba vmware-vmsvc.log Xorg.9.log
audit firewalld messages secure vmware-vmusr.log yum.log
boot.log fstab ntpstats speech-dispatcher wpa_supplicant.log
btmp gdm pluto spooler wtmp
chrony glusterfs ppp sssd Xorg.0.log
cron grubby_prune_debug qemu-ga tallylog Xorg.0.log.old
cups lastlog rhsm tuned Xorg.1.log
4.3:命令格式及常用備份選項
從以上操作可以看出,備份的基本格式爲”rsync [選項] 原始位置 目標位置“,其中常用的一些命令如下,根據實際需求做出選擇(如:-avz)
-r:遞歸模式,包含目錄及子目錄中的所有文件。
-l: 對於符號鏈接文件仍然複製爲符號鏈接文件。
-V: 顯示同步過程的詳細(verbose) 信息。
-a:歸檔模式,保留文件的權限、屬性等信息,等同於組合選項-rlptgoD.
-z: 在傳輸文件時進行壓縮(compress)
-p: 保留文件的權限標記。
-t:保留文件的時間標記。
-g:保留文件的屬組標記(僅超級用戶使用)。
-0: 保留文件的屬主標記(僅超級用戶使用)。
-H:保留硬連接文件。
-A:保留ACL屬性信息。
-D:保留設備文件及其他特殊文件。
--delete:刪除目標位置有而原始位置沒有的文件。
- --ehecksum:根據校驗和(而不是文件大小、修改時間)來決定是否跳過 文件
5:配置源地表示方法
#”rsync -avz 用戶名@主機地址::共享模塊“
[root@localhost ~] rsync -azv [email protected]::wwwroot/root
Password:
sent 4 bytes received 8 bytes 1.85 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1518) [Receiver=3.0.9]
#”rsync -avz rsync://用戶名@主機地址/共享模塊名“
[root@localhost ~] rsync -azv rsync://[email protected]/wwwroot/root
Password:
sent 4 bytes received 8 bytes 1.85 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1518) [Receiver=3.0.9]
6:rsync備份操作示例
執行以下操作將訪問源服務器中的wwwroot共享模塊,並下載到本地/myweb目錄下
[root@localhost ~]# mkdir /myweb
[root@localhost ~]# rsync -azvH --delete [email protected]::wwwroot /myweb
Password:
receiving incremental file list
./
index.php
sent 83 bytes received 161 bytes 44.36 bytes/sec
total size is 6 speedup is 0.02
[root@localhost ~]# ls /myweb/
index.php
7:實際生產環境中的備份工作通常是按計劃性任務重複執行的
例如:每天晚上22:30對服務器網站目錄進行一次同步,計劃性任務可以交給crond服務來完成
爲了避免計劃性任務的人機交互,可以在客戶端保存同步的用戶密碼,
[root@localhost ~] vim /opt/backuper.passwd
abc123
[root@localhost ~] chmod 600 /opt/backuper.passwd
[root@localhost ~] crontab -e
crontab: installing new crontab
30 22 * * * /usr/bin/rsync -az --delete --password-file=/opt/backuper.passwd [email protected]::wwwr
oot /myweb #//每天22:30執行任務
[root@localhost ~] service crond restart #//重新啓動計劃性任務
Redirecting to /bin/systemctl restart crond.service
[root@localhost ~] chkconfig crond on #//開啓開機自啓動
注意:正在將請求轉發到“systemctl enable crond.service”。