方案背景:A服務器和B服務器之間(可1對1,也可多對多,在此以簡單的1對1舉例)需要數據同步,此方案常用於遠程災備。 |
同步方案根據應用場景大約有兩種,定時同步和實時同步。定時同步具有同步時間固定、實時性差、消耗資源較小的特點;實時同步具有實時性強、同步密集、較耗資源等特點。
1、安裝軟件:
yum install rsync -y
2、免密登錄(也可使用明文采用模擬交互式登錄方式,但是從安全角度出發還是建議使用免密登錄):
ssh-keygen -t rsa
生成後可以進入目錄cd ~/.ssh/ 把生成的密鑰~/.ssh/id_rsa.pub內容複製到遠程主機的/root/.ssh/authorized_keys中
在這裏很多同學對以上的操作爲什麼就不用輸入密碼的問題感到好奇,瞭解免密登錄的同學可以跳過這段介紹。這裏介紹下免密登錄的原理:
rsa又稱非對稱密鑰算法,對應的是對稱密鑰算法。
所謂對稱密鑰算法就是A和B通信,爲了雙方能確認對方的身份,A和B約定一個雙方都知道的密鑰k來確定身份如下:
A => (mk) B A發送m明文和K密鑰跟B,B確認K密鑰和之前A約定的一樣,就能確定A的身份是真實的。反之B到A的通信也是如此。
非對稱加密需要兩個密鑰:公鑰 (publickey) 和私鑰 (privatekey)。公鑰和私鑰是一對,如果用公鑰對數據加密,那麼只能用對應的私鑰解密。如果用私鑰對數據加密,只能用對應的公鑰進行解密。因爲加密和解密用的是不同的密鑰,所以稱爲非對稱加密。
所以以上的操作把A服務器的公鑰共享跟了B服務器(遠程主機),所以A服務器登錄B服務器就不再需要傳統的交互式輸入密碼登錄,B服務器能通過A服務器的公鑰而確認A服務器的真實性(私鑰)。
[root@localhost ~]# cd ~/.ssh/ [root@localhost .ssh]# ls id_rsa id_rsa.pub known_hosts
[root@localhost ~]# vim back.sh #!/bin/sh rsync -avz -e 'ssh -p 22' [email protected]:/XXX/pub /data/
注意:rsync的數據同步分爲拉和推兩種不同的動作,在編寫腳本之前,一定要測試命令是否能正常執行。
4、crontab定時執行配置(每天3點執行腳本)
到此,定時同步就配置好了。
Inotify簡介
Inotify 是一個 Linux特性,從版本2.6.13開始提供,它監控文件系統操作,比如讀取、寫入和創建。Inotify 反應靈敏,用法非常簡單,並且比 cron 任務的繁忙輪詢高效得多。
開始配置Inotify
注:在開始之前需要在服務器A和B上都安裝好rsync。
1、在服務器B上調整inotify內核參數,vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384 fs.inotify.max_user_instances = 1024 fs.inotify.max_user_watches = 1048576
2、使調整inotify內核參數立刻生效
sysctl -p
3、安裝Inotify-Tool工具
# 先安裝擴展包源,否則inotify-tools找不到 yum install epel-release yum install inotify-tools
4、打開兩個終端,一個終端執行創建刪除等操作,另一個執行Inotify-Tool工具,測試Inotify-Tool工具時候正常
inotifywait -mrq -e modify,create,move,delete /var/www/ inotifywait:用於持續監控,實時輸出結果 inotifywatch:用於短期監控,任務完成後再出結果
5、編寫腳本
vim /root/tongbu.sh
#!/bin/bash INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /root/cs" RSYNC_CMD="rsync -avz -e 'ssh -p 22' /root/cs/ [email protected]:/root/cs/ " $INOTIFY_CMD | while read DIRECTORY EVENT FILE do if [ $(pgrep rsync | wc -l) -le 0 ] ; then $RSYNC_CMD fi done
注:這裏要特別注意,邏輯關係不要搞混了,是B服務器推送跟A服務器。
6、添加開機自動後臺自動運行,編輯/etc/profile文件,在最後一行加入下面語句
/bin/bash /root/tongbu.sh &
到此定時同步和實時同步都講解完畢。根據不同的場景應用不同的方案,需要靈活應對,特別要注意一點的是。實時同步的方案,監控目錄千萬不能設置成日誌目錄,不然服務器cpu飆升很有可能會宕機。