Rsync是Unix/Linux下的一款應用軟體,利用它可以使多台伺服器資料保持同步一緻性,第一次同步時 rsync 會複制全部内容,但在下一次隻傳輸修改過的檔案。
Rsync 在傳輸資料的過程中可以實行壓縮及解壓縮操作,是以可以使用更少的帶寬。可以很容易做到保持原來檔案的權限、時間、軟硬連結等。rsync有兩種同步方式,一種基于ssh同步不需要配置,一種需要自身秘鑰同步就需要進行檔案配置了。以下我采用的是自身秘鑰的方式:企業用的居多
-
RSYNC安裝
實驗兩台虛拟機:服務端192.168.2.222,用戶端192.168.2.183
便于實驗,我這裡采用yum安裝方式:yum install rsync -y
-
我這裡自定義rsync配置目錄mkdir /home/lijq/.rsync/ -p ; 建立配置檔案添加以下内容vi rsyncd.conf;
uid = nobody
gid = nobody
use chroot = no
max connections = 30
pid file = /home/lijq/.rsync/rsyncd.pid
lock file = /home/lijq/.rsync/rsyncd.lock
log file = /home/lijq/.rsync/rsyncd.log
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[test1]
read only = no
path = /data/www
comment = www
auth users = test
secrets file = /home/lijq/.rsync/rsync.pas
hosts allow = 192.168.2.183
- cd /home/lijq/.rsync;建立rsync.pas密鑰檔案test:123456 并給權限chmod 666 rsync.pas
-
然後啟動服務,我這裡是自定義配置路徑和端口所有啟動指令為下:
/usr/bin/rsync --daemon --config=/home/lijq/.rsync/rsyncd.conf --port 7001
使用ps -ef | grep rsync可以檢視服務啟動情況
- 用戶端配置,隻需要在cd /home/lijq/.rsync/下建立rsync.pas密碼檔案内容123456并賦予600權限即可
- 然後建立服務端的同步目錄,上面配置檔案定義的是/data/www
- 用戶端執行rsync -aP --delete [email protected]::test1 /root/lijq --port=7001 --password-file=/home/lijq/.rsync/rsync.pas
- 上面指令是用戶端同步伺服器檔案裡面的内容,,/root/lijq為用戶端目錄可以自己定義,端口是我自己定義的,test1是我服務端定義的同步子產品名稱
- 如果報錯@ERROR: auth failed on module test1請檢查秘鑰配置檔案,如果報錯:rsync: failed to connect to 192.168.2.222: No route to host (113)請檢查防火牆和selinux,部落客深受其害
- 同步指令執行後,會發現,伺服器上的/data/www/下面的檔案都同步到了用戶端/root/lijq下面了,,done
二.上面的用戶端執行的指令同步是伺服器上的目錄檔案同步到用戶端來相當于備份,而企業中很多都是從用戶端更新資料到服務端故此:在用戶端可以執行下列指令就好了
/usr/bin/rsync -avzP --progress --delete --password-file=rsyncd1.pas --port=7001 /root/lijq/ [email protected]::test1 rsyncd1.pas是我在目前目錄建立的一個秘鑰檔案,,也可以寫成之前的那個路徑。
如果報錯rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]請檢查服務端目錄權限其他使用者要有寫的權限哦,done
腳本實作同步:這裡的腳本是用戶端資料同步到服務端的,其他的可以自己定義:
#!/bin/bash
#use for : sh 33.sh test server
SYSUSER=test
export MOKUAI=test1
export PORT=7001
SRC_DIR=/root/lijq/
SERVERIP=192.168.2.222
SERVERNO=$1
case "$2" in
test)
echo ${rsyncsource%/*}
;;
server)
/usr/bin/rsync -avzP --progress --delete --password-file=rsyncd1.pas --port=${PORT $SRC_DIR $SYSUSER@$SERVERIP::$MOKUA
I
;;
esac
done
後續研究持續更新