Linux 服務器數據同步利器!

前言

大家好,這裏是浩道 linux,主要給大家分享 linuxpython網絡通信相關的 IT 知識平臺。

今天浩道跟大家分享 linux 服務器相關的好用工具,關於數據同步的

 文章來源:https://www.cnblogs.com/george-guo/p/7718515.html

一、簡介

1 認識

Rsync(remote synchronize)是一個遠程數據同步工具,可通過 LAN/WAN 快速同步多臺主機間的文件。Rsync 使用所謂的 “Rsync 算法” 來使本地和遠 程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快;

Rsync 支持大多數的類 Unix 系統,無論是 Linux、Solaris 還是 BSD 上都經過了良好的測試;

此外,它在 windows 平臺下也有相應的版本,如 cwRsync 和 Sync2NAS 等工具

2 原理

Rsync 本來是用於替代 rcp 的一個工具,目前由 rsync.samba.org 維護,所以 rsync.conf 文件的格式類似於 samba 的主配 置文件;

Rsync 可以通過 rsh 或 ssh 使用,也能以 daemon 模式去運行
在以 daemon 方式運行時 Rsync server 會打開一個 873 端口,等待客戶端去連接。

連接時,Rsync server 會檢查口令是否相符,若通過口令查覈,則可以開始進行文件傳輸。第一次連通完成時,會把整份文件傳輸一次,以後則就只需進行增量備份。

3 特點

  1. 可以鏡像保存整個目錄樹和文件系統;

  2. 可以很容易做到保持原來文件的權限、時間、軟硬鏈接等;

  3. 無須特殊權限即可安裝;

  4. 優化的流程,文件傳輸效率高;

  5. 可以使用 rsh、ssh 等方式來傳輸文件,當然也可以通過直接的 socket 連接;

  6. 支持匿名傳輸

二、ssh 模式

1 本地間同步

環境:172.16.22.12

# mkdir src
# touch src/{1,2,3,4}
# mkdir dest
# rsync -av src/ dest/ --將 src 目錄裏的所有的文件同步至 dest 目錄(不包含src本身)
# rsync -av src dest/ --將 src 目錄包括自己整個同步至 dest 目錄
# rsync -avR src/ dest/ --即使 src 後面接有 / ,效果同上

2、局域網間同步

環境:172.16.22.11

# mkdir src
# touch src/{a,b,c,d}
# mkdir dest
# rsync -av 172.16.22.12:/data/test/src/ dest/ --遠程同步至本地,需輸入root密碼
# rsync -av src/ 172.16.22.12:/data/test/dest/ --本地文件同步至遠程
# rsync -av src 172.16.22.12:/data/test/dest/ --整個目錄同步過去
# rm -rf src/d --刪除一個文件 d
# rsync -av --delete src/ 172.16.22.12:/data/test/dest/ --delete,從目標目錄裏面刪除無關的文件

3、局域網指定用戶同步

—172.16.22.12

# useradd george
# passwd george
# mkdir /home/george/test
# touch /home/george/test/g{1,2,3,4}

—172.16.22.11

# rsync -av src '-e ssh -l george' 172.16.22.12:/home/george --本地同步至遠程
# rsync -av 172.16.22.12:/home/george/test/g* '-e ssh -l george -p 22' dest/

三、daemon 模式

環境:192.168.22.11

1、服務啓動方式

1.1、對於負荷較重的 rsync 服務器應該使用獨立運行方式
# yum install rsync xinetd --服務安裝
# /usr/bin/rsync --daemon
1.2、對於負荷較輕的 rsync 服務器可以使用 xinetd 運行方式
# yum install rsync xinetd --服務安裝
# vim /etc/xinetd.d/rsync --配置託管服務,將下項改爲 no
disable = no
# /etc/init.d/xinetd start --啓動託管服務 xinetd
# chkconfig rsync on
# netstat -ntpl | grep 873 --查看服務是否啓動

2、配置詳解

兩種 rsync 服務運行方式都需要配置 rsyncd.conf,其格式類似於 samba 的主配置文件

全局參數

模塊參數
模塊參數主要用於定義 rsync 服務器哪個目錄要被同步。模塊聲明的格式必須爲 [module] 形式,這個名字就是在 rsync 客戶端看到的名字,類似於 Samba 服務器提供的共享名。而服務器真正同步的數據是通過 path 來指定的

基本模塊參數

模塊控制參數

模塊文件篩選參數

模塊用戶認證參數

模塊訪問控制參數

模塊日誌參數

3、服務端配置

# vim /etc/rsyncd.conf --爲 rsyncd 服務編輯配置文件,默認沒有,需自己編輯
# mkdir /data/test/src --創建基礎目錄
# mkdir /data/test/src/george --再創建一個目錄
# touch /data/test/src/{1,2,3}
# echo "web:123" > /etc/web.passwd --創建密碼文件
# chmod 600 /etc/web.passwd
# service xinetd restart

四、測試

1、客戶端

環境:192.168.22.12

# yum -y install rsync
# mkdir /data/test

2、小試參數

# rsync -avzP web@192.168.22.11::web1 /data/test/ --輸入密碼 123;將服務器 web1 模塊裏的文件同步至 /data/test,參數說明:

-a —參數,相當於 - rlptgoD,
-r —是遞歸
-l —是鏈接文件,意思是拷貝鏈接文件
-i —列出 rsync 服務器中的文件
-p —表示保持文件原有權限
-t —保持文件原有時間
-g —保持文件原有用戶組
-o —保持文件原有屬主
-D —相當於塊設備文件
-z —傳輸時壓縮
-P —傳輸進度
-v —傳輸時的進度等信息,和 - P 有點關係

# rsync -avzP --delete web@192.168.22.11::web1 /data/test/ --讓客戶端與服務器保持完全一致, --delete
# rsync -avzP --delete /data/test/ web@192.168.22.11::web1 --上傳客戶端文件至服務端
# rsync -avzP --delete /data/test/ web@192.168.22.11::web1/george --上傳客戶端文件至服務端的 george 目錄
# rsync -ir --password-file=/tmp/rsync.password web@192.168.22.11::web1 --遞歸列出服務端 web1 模塊的文件
# rsync -avzP --exclude="*3*" --password-file=/tmp/rsync.password web@192.168.22.11::web1 /data/test/ --同步除了路徑以及文件名中包含 “3” *的所有文件

3、通過密碼文件同步

# echo "123"> /tmp/rsync.password
# chmod 600 /tmp/rsync.password
# rsync -avzP --delete --password-file=/tmp/rsync.password web@192.168.22.11::web1 /data/test/ --調用密碼文件

4、客戶端自動同步

# crontab -e

10 0 * rsync -avzP —delete —password-file=/tmp/rsync.password web@192.168.22.11::web1 /data/test/

# crontab -l

五、數據實時同步

環境:Rsync + Inotify-tools

1、inotify-tools

2、安裝 inotify-tools

下載地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

# yum install –y gcc --安裝依賴
# mkdir /usr/local/inotify
# tar -xf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.14
# ./configure --prefix=/usr/local/inotify/
# make && make install

3、設置環境變量

# vim /root/.bash_profile

export PATH=/usr/local/inotify/bin/:$PATH

# source /root/.bash_profile
# echo '/usr/local/inotify/lib' >> /etc/ld.so.conf --加載庫文件
# ldconfig
# ln -s /usr/local/inotify/include /usr/include/inotify

4、常用參數

5、測試一

檢測源目錄中是否有如下動作:modify,create,move,delete,attrib;

一旦發生則發佈至目標機器;

方式爲 ssh
src: 192.168.22.11(Rsync + Inotify-tools) dest: 192.168.22.12

兩臺機器需要做好 ssh 免密登錄

    # mdkir /data/test/dest/ --dest機器
    # mdkir /data/test/src/ --src機器
    # rsync -av --delete /data/test/src/ 192.168.22.12:/data/test/dest --測試下命令
    # vim /data/test/test.sh
    #!/bin/bash
/usr/local/inotify/bin/inotifywait -mrq -e modify,create,move,delete,attrib /data/test/src | while read events
do
rsync -a --delete /data/test/src/ 192.168.22.12:/data/test/dest
echo "`date +'%F %T'` 出現事件:$events" >> /tmp/rsync.log 2>&1
done
    # chmod 755 /data/test/test.sh
    # /data/test/test.sh &
    # echo '/data/test/test.sh &' >> /etc/rc.local --設置開機自啓

我們可以在目標機上也寫一個這樣的腳本: 

rsync -a —delete /data/test/dest/ 192.168.22.11:/data/test/src ;

這樣可以實現雙向同步

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/ZiZ-5ZeZoxoqUHp7j05sQQ