為了避免服務器故障導致數據丟失飘诗,我們通常會將一臺機器上的數據在多臺機器上進行備份掐暮。下面介紹一下如何使用crontab+rsync在服務器間進行數據備份。
假設有兩臺服務器10.0.0.1和10.0.0.2斟赚,希望將10.0.0.1上的~/test
文件夾備份到10.0.0.2上的/data/backup/1/test
文件夾
手動數據備份
一個簡單的數據備份方式是使用rsync手動同步:
rsync [OPTION...] <source folder> <target folder>
e.g. rsync -avzl --delete 10.0.0.1:~/test 10.0.0.2:/data/backup/1
(傳輸時進行壓縮废菱,同步刪除)
具體用法查看rsync --help
定時自動數據備份
手動操作比較麻煩,而且可能出現遺漏化漆。為了更穩(wěn)定便捷地備份數據估脆,我們希望數據能夠定時自動備份。
crontab可以實現定時執(zhí)行指令座云,但是由于rsync將數據傳輸到另一臺機器時需要手動輸入密碼疙赠,我們不能簡單地使用crontab執(zhí)行上面的rsync命令,而是需要將用來備份的機器配置為daemon模式服務端朦拖。
配置daemon模式服務端
- 在服務端創(chuàng)建rsync配置文件
/etc/rsyncd.conf
#客戶端以如下兩行的用戶權限連過來
uid = rsync
gid = rsync
#與安全相關
use chroot = no
#設置可以允許多少客戶端的連接
max connections = 2000
#超時600秒即自動斷開
timeout = 600
#Rsync daemon進程號存放的文件地址
pid file = /var/run/rsyncd.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.1/2
#host deny = 0.0.0.0/32
#相當于用來作驗證的名字(不需要創(chuàng)建),放在secrets file中的格式為: rsync_backup:pwd.
auth users = rsync_backup
secrets file = /etc/rsync.password
##################################
# test module
[test]
path = /data/backup/1
hosts allow = 10.0.0.1
(參考rsync備份工具使用)
- 在服務器端創(chuàng)建
/etc/rsyncd.conf
指定uid gid的相應虛擬用戶.
sudo useradd -M -s /sbin/nologin rsync - 將
/etc/rsyncd.conf
指定的auth users和密碼以<auth user>:<password>
格式(e.g.rsync_backup:hahaha
)寫入/etc/rsync.password
- 修改密碼文件及備份路徑權限
sudo chmod 600 /etc/rsync.password
sudo chown -R rsync.rsync /data/backup/1
- 啟動rsync daemon服務
sudo rsync --daemon
查看服務是否開啟ps -ef | grep rsync
將rsync --daemon
寫入/etc/rc.local
圃阳,以便開機時自動啟動
配置客戶端
- 將daemon服務端中指定的密碼(hahaha)寫入密碼文件(e.g.
/etc/rsync_<deamon_name>.password
) - 修改密碼文件權限
sudo chmod 600 /etc/rsync_<deamon_name>.password
設置crontab
- 打開crontab配置文件
sudo crontab -e
- 寫入文件備份指令
e.g.* * * * * rsync -avzl --delete 10.0.0.1:~/test 10.0.0.2:/data/backup/1
(每分鐘備份一次)
e.g.30 4 * * 0 rsync -avzl --delete 10.0.0.1:~/test 10.0.0.2:/data/backup/1
(每周日凌晨4:30備份一次) - 查看crontab定時任務
crontab -l
- 查看crontab執(zhí)行情況
sudo tail -f /var/log/cron.log
(如果沒有日志,將/etc/rsyslog.d/50-default.conf
中#cron.*
的注釋去掉璧帝,重啟rsyslog服務:sudo service rsyslog restart
捍岳,重啟cron服務:sudo service cron restart
)
配置和權限可能有坑,建議先用一個測試文件夾測試全部流程睬隶。