天天看點

Linux-Rsync兩台機器檔案資料同步傳輸

rsync 伺服器是指以 deamon 方式運作 rsync 服務的伺服器,需要打開 rsync deamon 和啟動 xinetd 服務。預設端口873。rsync 用戶端是發起 rsync 連接配接的伺服器,安裝rsync即可。rsync 用戶端發起連接配接後,rsync 伺服器會檢查 rsync 用戶端送出 rsync 伺服器内建的戶名和密碼是否正确,如果通過認證檢測,則開始檔案傳輸,傳輸的過程是按要求先比對檔案的大小、屬性、權限、MD5值等資訊,如果兩端檔案資訊不一緻,則按要求同步檔案的差別塊。

安裝:
wget https://xxx/pub/rsync/rsync-3.1.2.tar.gz、
tar -xzf rsync-3.1.2.tar.gz
cd rsync-3.1.2
./configure --prefix=/usr/local/rsyncd
make && make install

伺服器端配置:
mkdir /etc/rsyncd
touch /etc/rsyncd/rsyncd.conf
touch /etc/rsyncd/rsyncd.secrets
touch /etc/rsyncd/rsyncd.motd
chmod 600 /etc/rsyncd/rsyncd.secrets
vim /etc/rsyncd/rsyncd.conf 
#程序 pid 檔案所在位置
pid file = /var/run/rsyncd.pid
#指定監聽端口,預設是873,可以自己指定
port = 873 
#伺服器監聽的IP位址,可省略
address = 192.168.1.171 
#守護程序所屬的uid,預設是nobody,可能會碰到檔案或目錄權限問題,此處偷懶用的 root
uid = root
#守護程序的gid 
gid = root 
#chroot,即改變程式執行時所參考的根目錄位置,在傳輸檔案之前,伺服器守護程式在将chroot 到檔案系統中的目錄中
#這樣做的好處是可能保護系統被安裝漏洞侵襲的可能。缺點是需要超級使用者權限。另外對符号連結檔案,将會排除在外
#也就是說,你在 rsync伺服器上,如果有符号連結,你在備份伺服器上運作用戶端的同步資料時,隻會把符号連結名同步下來,并不會同步符号連結的内容
use chroot = yes
#隻讀選擇,隻讓用戶端從伺服器上讀取檔案
read only = no
#隻寫選擇,隻讓用戶端到伺服器上寫入 
write only = yes 
#允許通路的IP,可以指定單個IP,也可以指定整個網段,能提高安全性。格式是 ip 與 ip 之間、ip 和網段之間、網段和網段之間要用空格隔開;
hosts allow = 192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0
#用戶端最多連接配接數 
max connections = 5 
#當使用者登入時會看到這個資訊。比如顯示目前時間、公告等
motd file = /etc/rsyncd/rsyncd.motd
#rsync 伺服器的日志;
log file = /var/log/rsync.log 
#記錄傳輸檔案的日志
transfer logging = yes 
#日志格式
log format = %t %a %m %f %b
#日志級别 
syslog facility = local3 
#通過該選項可以覆寫客戶指定的IP逾時時間。可以確定rsync伺服器不會永遠等待一個崩潰的用戶端。逾時機關為秒鐘,0表示沒有逾時定義,這也是預設值。對于匿名rsync伺服器來說,一個理想的數字是600。
timeout = 300 
 
#子產品定義
#每個子產品都要以[name]形式。這個名字就是在 rsync 用戶端看到的名字。
#但是伺服器真正同步的資料是通過 path 指定的。可以依次建立多個子產品。
#每個子產品要指定認證使用者、密碼檔案,但排除并不是必須的。
[ logs ] #子產品名,以下配置都屬于此子產品
#檔案目錄所在位置
path = /var/log
#當檢視伺服器上提供了哪些目錄時是否列出來,no比較安全 
list = no
#忽略I/O錯誤 
ignore errors 
#指定由空格或逗号分隔的使用者名清單,隻有這些使用者才允許連接配接該子產品。這裡的使用者和系統使用者沒有任何關系,是 rsyncd.secrets 中的使用者名!
#如果"auth users"被設定,那麼用戶端發出對該子產品的連接配接請求以後會被rsync請求challenged進行驗證身份。
#這裡使用的 challenge/response 認證協定。
#使用者的名和密碼以明文方式存放在"secrets file"選項指定的檔案中。預設情況下無需密碼就可以連接配接子產品(也就是匿名方式)。
auth users = zhangzk
secrets file = /etc/rsyncd/rsyncd.secrets #密碼檔案
exclude = error_log httpd.pid #忽略的檔案或目錄
comment this is my log #本子產品注釋,可選
vim /etc/rsyncd/rsyncd.secrets 密碼檔案,使用者名稱與密碼以冒号分隔,多個使用者名和密碼可以多行
zhangzk:239fjdalk@893246dasaATDFBSad
zhangab:669fjbalk@8sadf$3246dasaATDFBSaf
vim /etc/rsyncd/rsyncd.motd
Welcome to use rsync           
伺服器端啟動:
1.直接使用 --daemon 參數 
/usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf
2.xinet方式
    1).修改 /etc/services,加入以下内容,如果已經有可以不加,如果端口改了,需要改掉 873 端口為指定端口
rsync  873/tcp  # rsync 
rsync  873/udp  # rsync
2).修改 /etc/xinetd.d/rsync,主要是要打開rsync這個daemon, 一旦有rsync client要連接配接時, xinetd會把它轉介給 rsyncd(port 873)。
service rsync
{
    disable = no
    socket_type     = stream
    wait            = no
    user            = root
    server          = /usr/bin/rsync
    server_args     = --daemon --config=/etc/rsyncd/rsynd.conf
    log_on_failure  += USERID
}
重新開機 xinetd
service xinetd restart           
用戶端配置:
建立密碼檔案,/etc/rsyncd/rsyncd.pass,并修改為 600 權限
touch /etc/rsyncd/rsyncd.pass
chmod 600 /etc/rsyncd/rsyncd.pass
  /etc/rsyncd/rsyncd.pass 其内密碼需要和服務端内/etc/rsyncd/rsyncd.pass指定使用者的密碼保持一緻
239fjdalk@893246dasaATDFBSad  
七、用戶端向服務端傳輸檔案,如果是 873 端口,可以把 --port 去掉
rsync -vzrtopg --delete --progress /var/log/access.log [email protected]::logs  --password-file=/etc/rsyncd/rsyncd.pass --port=873
  若有需要也可以從服務端拉取檔案,需要把伺服器的 /etc/rsyncd/rsyncd.conf 中的 write only = yes 給去掉
#拉取整個目錄
rsync -vzrtopg --delete --progress  --password-file=/etc/rsyncd/rsyncd.pass --port=873 [email protected]::logs  /var/log
 
#拉取單個檔案
rsync -vzrtopg --delete --progress  --password-file=/etc/rsyncd/rsyncd.pass --port=873 [email protected]::logs/a.log  /var/log