rsync實現服務器數據同步備份

rsync簡介

rsync,remote synchronize,顧名思義,它是一款實現遠程同步功能的軟件,它在同步文件的同時,能夠保持原來文件的權限、時間、軟硬連接等附加信息。html

rsync是用 「rsync 算法」提供了一個客戶機和遠程文件服務器的文件同步的快速方法,並且能夠經過ssh方式來傳輸文件,這樣其保密性也很是好,另外它仍是免費的軟件。linux

rsync 包括以下的一些特性:算法

能更新整個目錄和樹和文件系統;
有選擇性的保持符號鏈鏈、硬連接、文件屬於、權限、設備以及時間等;
對於安裝來講,無任何特殊權限要求;
對於多個文件來講,內部流水線減小文件等待的延時;
能用rsh、ssh 或直接端口作爲傳輸入端口;
支持匿名rsync 同步文件,是理想的鏡像工具。vim

更多用法參考:http://www.javashuo.com/article/p-kncfwfgv-m.html ,這裏就很少贅述。安全

安裝rsync

實現數據備份同步,須要兩臺機器,一臺做爲rsync服務器,一臺做爲rsync客戶端。這裏,rsync服務器的IP地址爲172.16.1.41,rsync客戶端的IP地址爲172.16.1.31。服務器

CentOS系統默認沒有rsync命令,因此須要安裝,且兩臺機器都要安裝。ssh

[root@rsync ~]# yum install -y rsync            //服務器安裝 rsync

[root@nfs ~]# yum install -y rsync            //客戶端安裝 rsync

關閉selinux和防火牆,防止後面有問題tcp

[root@rsync ~]# systemctl stop firewalld
[root@rsync ~]# systemctl disable firewalld
[root@rsync ~]# vim /etc/sysconfig/selinux          //作如下修改,而後重啓
SELINUX=disabled

[root@nfs ~]# systemctl stop firewalld
[root@nfs ~]# systemctl disable firewalld
[root@nfs ~]# vim /etc/sysconfig/selinux          //作如下修改,而後重啓
SELINUX=disabled

rsync同步備份

服務端配置

  • 配置rsync的配置文件 /etc/rsyncd.conf:
[root@rsync ~]# vim /etc/rsyncd.conf            //寫入下面內容
uid = root
 gid = root
 use chroot = no
 max connections = 4
 log file = /var/log/rsyncd.log
 pid file = /var/run/rsyncd.pid

 [backup]           //自定義模塊名爲backup
        path = /backup/
        ignore errors
        read only = false
        list = true
        hosts allow = 172.16.1.0/24
        auth users = rsync_backup
        secrets file = /etc/rsync.password

上面各類參數的含義:ide

 port:指定在哪一個端口啓動rsyncd服務,默認是873端口。
 log file:指定日誌文件。
 pid file:指定pid文件,這個文件的做用涉及服務的啓動、中止等進程管理操做。
 address:指定啓動rsyncd服務的IP。假如你的機器有多個IP,就能夠指定由其中一個啓動rsyncd服務,若是不指定該參數,默認是在所有IP上啓動。
 []:指定模塊名,裏面內容自定義。
 path:指定數據存放的路徑。
 use chroot true|false:表示在傳輸文件前首先chroot到path參數所指定的目錄下。這樣作的緣由是實現額外的安全防禦,但缺點是須要以roots權限,而且不能備份指向外部的符號鏈接所指向的目錄文件。默認狀況下chroot值爲true,若是你的數據當中有軟鏈接文件,建議你設置成false。
 max connections:指定最大的鏈接數,默認是0,即沒有限制。
 read only ture|false:若是爲true,則不能上傳到該模塊指定的路徑下。
 list:表示當用戶查詢該服務器上的可用模塊時,該模塊是否被列出,設定爲true則列出,false則隱藏。
 uid/gid:指定傳輸文件時以哪一個用戶/組的身份傳輸。
 auth users:指定傳輸時要使用的用戶名。
 secrets file:指定密碼文件,該參數連同上面的參數若是不指定,則不使用密碼驗證。注意該密碼文件的權限必定要是600。格式:用戶名:密碼
 hosts allow:表示被容許鏈接該模塊的主機,能夠是IP或者網段,若是是多個,中間用空格隔開。

  • 建立備份目錄:
[root@rsync ~]# mkdir /backup
[root@rsync ~]# ls -ld /backup/
drwxr-xr-x. 2 root root 30 8月   9 12:39 /backup/

  • 編輯 secrets file 保存後並要賦予600權限,若是權限不對,沒法完成同步:
[root@rsync ~]# echo "rsync_backup:grewan" > /etc/rsync.password
[root@rsync ~]# chmod 600 /etc/rsync.password

  • 啓動rsync服務:
[root@rsync ~]# rsync --daemon --config=/etc/rsyncd.conf 
[root@rsync ~]# ps aux |grep rsyncd
root      10270  0.0  0.0 114740   552 ?        Ss   12:09   0:00 rsync --daemon --config=/etc/rsyncd.conf
[root@rsync ~]# netstat -an |grep 873           
tcp        0      0 172.16.1.41:873         0.0.0.0:*               LISTEN           //已經在監聽873端口
[root@rsync ~]# cat /var/log/rsync.log 
2018/08/09 16:08:18 [897] rsyncd version 3.1.2 starting, listening on port 873
[root@rsync ~]# vim /etc/rc.d/rc.local           //開機啓動rsync,最後面添加下面一行
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf

客戶端配置

  • 編輯一個密碼文件:
[root@nfs ~]# echo "grewan" > /etc/rsync.password      //該密碼就是服務端rsync_backup用戶的密碼
[root@nfs ~]# chmod 600 /etc/rsync.password

若是服務端不設置auth users,那麼默認就是以root用戶身份來備份,在傳輸時候能夠加上指定用戶,也能夠不加工具

  • 測試數據備份:
[root@nfs ~]# mkdir /backup
[root@nfs ~]# touch /backup/123.txt /backup/1 /backup/222.sh
[root@nfs ~]# rsync -avL /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password          //推數據到服務器
sending incremental file list
./
1
123.txt
222.sh

sent 221 bytes  received 76 bytes  594.00 bytes/sec
total size is 0  speedup is 0.00

數據備份成功

數據備份及恢復

在生產環境下,對於生產服務器的數據確定是須要備份,咱們能夠在生產型服務器上配置好rsync 服務器,讓這臺備份服務器每隔一段時間同步備份一次服務器上的數據;而且讓每一個備份都是完整備份。這種備份至關於天天爲服務器的數據作一個鏡像,當生產型服務器發生事故時,咱們能夠輕鬆恢復數 據,能把數據損失降到最低。

假如如今要實現這個功能:「當數據丟失在2小時內恢復全部數據」,那就能夠每隔2小時執行一次備份,能夠經過腳原本實現,而且腳本能夠按期刪掉超過當前日期一段時間的備份,防止磁盤空間不足。

按期執行任務須要編輯crontab:

[root@nfs ~]# crontab -e
* */2 * * *  rsync -avL --delete /  rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

表示每隔2小時執行一次備份,而且是備份根目錄(固然備份根目錄有些不太好,實際狀況下是針對重要數據進行備份,這裏只是舉個例子)

若是數據丟失,那咱們也能夠進行恢復,經過腳本判斷數據丟失,結果爲真則向rsync服務器拉數據回來。


更多資料參考:

如何使用RSYNC搭建備份服務器

RSync實現文件備份同步

RSync實現文件同步備份配置詳解

相關文章
相關標籤/搜索