rsync + ssh – 完成服務器之間的批量數據同步

現有需求如下:需對若干服務器做相同的環境配置,且配置工作相當複雜,若人工一臺一臺的處理比較耗時且容易出錯。我們可以考慮先完成一臺服務器的配置工作,確認配置無誤後,再通過腳本,將相應的配置工作同步到其他所有的服務器中。設有已完成配置的服務器:A (192.168.0.2) 和 待配置的服務器B ~ Z(192.168.0.101 ~ 126)。
實現上述需求,關鍵有兩點:1). 通過ssh信任登錄,避免每次同步時要求輸入密碼;2). 通過rsync命令實現服務器之間文件的同步。具體實現細節如下:
1. 完成單向Trusted SSH Authorized
首先在A產生public/private dsa key pair:
……………………………………………………………………………………………………
[root@kplan-test3 .ssh]# ssh-keygen -d
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
f3:47:3b:b0:2a:50:f8:77:7e:ca:29:85:e8:d9:05:9b root@kplan-test3
[root@kplan-test3 .ssh]#
……………………………………………………………………………………………………
完成上述命令後,會在系統/root/.ssh目錄生成兩個文件:id_dsa與id_dsa.pub。現在複製id_dsa.pub到B服務器,並更名爲 authorized_keys2
……………………………………………………………………………………………………
[root@kplan-test3 .ssh]# scp id_dsa.pub 192.168.0.101:/root/.ssh/authorized_keys2
[email protected]’s password:
id_dsa.pub 100% |*****************************************************| 612 00:00
[root@kplan-test3 .ssh]#
……………………………………………………………………………………………………
如果上述步驟順利完成的話,現在您可以執行”ssh 192.168.0.101”,無需輸入登錄密碼,即可登錄到B服務器了。
2.使用rsync 做Remote sync﹕
rsync特性簡介: rsync是unix-like系統下的數據鏡像備份工具,從命名上就可以看出來了remote sync。它的特性如下:
1、可以鏡像保存整個目錄樹和文件系統。
2、可以很容易做到保持原來文件的權限、時間等等。
3、無須特殊權限即可安裝。
4、優化的流程,文件傳輸效率高。
5、可以使用rcp、ssh等方式來傳輸文件,當然也可以通過直接的socket連接。
6、支持匿名傳輸。
參數意義如下﹕
-a, –archive
It is a quick way of saying you want recursion and want to preserve almost everything.
-v, –verbose
This option increases the amount of information you are given during the transfer.
-l, –links
When symlinks are encountered, recreate the symlink on the destination.
-R, –relative
Use relative paths. 保留相對路徑…纔不會讓子目錄跟 parent 擠在同一層…
–delete
是指如果Server端刪除了一文件,那客戶端也相應把這一文件刪除,保持真正的一致。
-e ssh
建立起加密的連接。
3、同步腳本
創建腳本,實現自動配置工作。
……………………………………………………………………………………………………
[root@kplan-test3 backup]# vi install_env.sh
#!/bin/bash
WEBSERVER=’kplan-test1 kplan-test2 kplan-test3′
echo “auto install envirment … ————————”
for webserver in $WEBSERVER
do
    echo “install server:$webserver’s envirment.”
    echo ‘transport file : /etc/profile & /etc/hosts’
    rsync -v -r -l -H -p -g -t -S -e ssh –delete /etc/profile root@$webserver:/etc/profile
    rsync -v -r -l -H -p -g -t -S -e ssh –delete /etc/hosts root@$webserver:/etc/hosts
    echo ‘run shell command : /home/init_env.sh’
    ssh -q -o StrictHostKeyChecking=no root@$webserver “/home/init_env.sh”
    ssh -q -o StrictHostKeyChecking=no  root@$webserver “rm -f /home/init_env.sh”
    echo ” $webserver is end  ————————- ”
done
sleep 1
clear
……………………………………………………………………………………………………
4、其他
如果你想用來做自動備份,則在crontab中加入備份腳本即可。如在每天0時0分做備份(設/root目錄下已有完成備份的腳本 backup.sh):
……………………………………………………………………………………………………
[root@kplan-test3 backup]# crontab -e
0 0 * * * /root/backup.sh
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章