1. 程式人生 > 其它 >MYSQL之MHA高可用叢集

MYSQL之MHA高可用叢集

目錄:

1、概念

2、Rsync同步方式

3、優點

4、缺點

5、適用場景

6、常用Rsync命令

7、實驗

8、Rsync實時同步

  Rsync+inotify問題

  實驗

Rsync

概念

一款快速增量備份工具可以在不同主機之間映象同步整個目錄樹,支援增量備份,並保持連結和許可權,且採用優化的同步演算法,傳輸前執行壓縮,因此非常適用於異地備份、映象伺服器等應用。 在遠端同步任務中,負責發起rsync同步操作的客戶機稱為發起端,而負責響應來自客戶機的rsync同步操作的伺服器稱為同步源。在同步過程中,同步源負責提供檔案的原始位置,發起端應對該位置具有讀取許可權。 可實現全量備份與增量備份,保持連結和許可權且採用優化的同步演算法 傳輸前執行壓縮,因此非常適合用於架構集中式備份或異地備份等應用。同時支援本地複製或者與其他 SSH、rsync 主機同步   本地複製與rsync區別: cp將原始檔完整的複製到指定路徑下 rsync做本地複製 ①首先將原始檔和目標的位置檔案做比對 ②根據目的位置的檔案與原始檔差異的部,進行一致性同步   監聽的埠:873
C/S模式  

rsync同步方式:

(1)完整備份:每次備份都是從備份源將所有的檔案或目錄備份到目的地。 (2)差異備份:備份上次完全備份以後有變化的資料(他針對的上次的完全備份,他備份過程中不清除存檔屬性) (3)增量備份:備份上次備份以後有變化的資料(他才不管是那種型別的備份,有變化的資料就備份,他會清除存檔屬性)  

優點:

(1)可以映象儲存整個目錄樹和檔案系統。 (2)可以很容易做到保持原來檔案的許可權、時間、軟硬連結等等。 (3)無須特殊許可權即可安裝。 (4)快速:第一次同步時 rsync 會複製全部內容,但在下一次只傳輸修改過的檔案。rsync 在傳輸資料的過程中可以實行壓縮及解壓縮操作,因此可以使用更少的頻寬。 (5)安全:可以使用scp、ssh等方式來傳輸檔案,當然也可以通過直接的socket連線。 (6)支援匿名傳輸,以方便進行網站映象。 (7)跨平臺:可在不同作業系統之間同步資料  

缺點:

(1)客戶端需要對多個檔案資料塊進行多次計算與比較驗證碼,對 CPU 的消耗比較大;服務端需要根據原檔案和客戶端傳送過來的差異資料進行檔案內容重組,對 IO 的消耗比較大。 (2)rsync 每次同步都需要先進行所有檔案的掃描和計算、對比,最後才能進行差量傳輸。如果檔案數量達到了百萬甚至千萬量級,掃描所有檔案將是非常耗時的。而且如果改動的只是其中很小的一部分,這就是非常低效的方式。 (3)rsync 不能實時的去監測、同步資料,雖然它可以通過 crontab 守護程序的方式進行觸發同步,但是兩次觸發動作一定會有時間差,這樣就導致了服務端和客戶端資料可能出現不一致,無法在應用故障時完全的恢復資料(無法實現實時同步),而且繁忙的輪詢會消耗大量的資源。  

適用場景

需要同步的檔案改動越頻繁,則客戶端需要計算和比較的資料塊驗證碼就越多(遇到資料塊內容不相同時,只能跳過一個位元組繼續往後計算與比較,相同則可跳過一個數據塊),對 CPU 的消耗就會越大;需要同步的檔案越大,服務端每次都需要從一個很大的檔案中複製相同的資料塊進行新檔案重組,幾乎相當於直接 cp 了一個大檔案,對 IO 的消耗也就越大。 所以 rsync 適合對改動不頻繁、大小比較小的檔案進行同步,對於改動頻繁的大檔案,只能偶爾同步一次,相當於備份的功能,而不是同步。  

常用Rsync命令

格式: rsync [選項] 原始位置 目標位置 選項: -r:遞迴模式,包含目錄及子目錄中的所有檔案。 -l:對於符號連結檔案仍然複製為符號連結檔案。 -v:顯示同步過程的詳細(verbose)資訊。 -z:在傳輸檔案時進行壓縮(compress) -a:歸檔模式,遞歸併保留物件屬性,等同於 -rlptgoD -p:保留檔案的許可權標記。 -t:保留檔案的時間標記 -g:保留檔案的屬組標記(僅超級使用者使用) -o:保留檔案的屬主標記(僅超級使用者使用) -H:保留硬連線檔案 -A:保留ACL屬性資訊 -D:保留裝置檔案及其他特殊檔案。 --delete:刪除目標位置有而原始位置沒有的檔案 --checksum:根據物件的校驗和來決定是否跳過檔案  

實驗:

rpm -q rsync #正常情況下已安裝   vim /etc/rsyncd.conf uid = root gid = root use chroot = yes #禁錮在源目錄 address = 192.168.63.100 #監聽地址 port = 873 #監聽埠號 tcp/udp 873 log file =/var/log/rsycd.log #日誌地址 pid file = /var/run/rsyncd.pid #存放程序ID的檔案位置 host allow =192.168.63.0/24 #允許訪問的客戶機地址 dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 #同步時不再壓縮的檔案型別   [wwwroot] #共享模組名稱 path = /var/www/html #原目錄實際路徑 comment = web service #備註 read only = yes #是否只讀 auth users =backuper #授權賬戶,多個賬號以空格分隔 secrets file = /etc/rsyncd_users.db #存放賬戶資訊的資料檔案 #如果採用匿名的方式,只要將其中的“auth users” 和“secrets file” 配置項去掉即可     vim /etc/rsyncd_users.db #為備份賬戶建立資料檔案 backuper:123123 #建立同步使用者   chmod 600 /etc/rsyncd_users.db #一定要600 許可權(多了也不行)   yum install httpd -y chmod +r /var/www/html ls -ld /var/www/html   啟動rsync rsync --daemon #守護程序後臺執行 netstat -anpt |grep rsync       客戶端: 配置   // 配置源的2種表達方法: ① 使用者名稱@主機地址::共享模組名 rsync -avz [email protected]::wwwroot /opt/ ②rsync://使用者名稱@主機地址/共享模組名 rsync -avz rsync://[email protected]/wwwroot /opt/ //   rsync -avz [email protected]::wwwroot /opt/ 密碼:123123   免互動: echo "123123" > /etc/server.pass chmod 600 /etc/server.pass crontab -e 30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/   systemctl restart crond systemctl enable crond   測試: 服務端: vim index.html this is abc     客戶端: rsync -avz [email protected]::wwwroot /opt/ cd /opt ll 能看到同步了index   mv index.html index1.html rsync -avz [email protected]::wwwroot /opt/ ll 能看到再次同步過來index rsync -avz --delete [email protected]::wwwroot /opt/ ll 能看到,與伺服器不同的檔案全部刪除    

rsync實時同步

使用inotify通知介面,可以用來監控檔案系統的各種變化情況,如檔案存取、刪除、移動、修改等。利用這一機制,可以非常方便地實現檔案異動告警、增量備份,並針對目錄或檔案的變化及時作出響應。 將inotify機制與rsync相結合,可以實現觸發式備份(實時同步),即只要原始位置的文件發生變化,則立即啟動增量備份操作;否則處於靜默等待狀態。這樣,就避免了按固定週期備份時存在的延遲性、週期過密等問題。 因為inotify通知機制由 Linux核心提供,因此主要做本機監控,在觸發式備份中,應用時更適合上行同步。  

rsync + inotify 問題

1. 同一個操作會觸發多個事件。 2. inotifywait 存在缺陷,當向監控目錄下拷貝複雜層次目錄(多層次目錄中包含檔案),或者向其中拷貝大量檔案時,inotifywait 經常會隨機性地遺漏某些檔案。 3. 併發如果大於 200 個檔案(10-100K),同步會有延遲。 4. 監控到事件後,呼叫 rsync 同步是單執行緒的。  

實驗:

伺服器 vim /etc/rsyncd.conf read only = no #修改只讀模式為no   kill $(cat /var/run/rsyncd.pid) ss -ntap |grep rsync   chmod 777 /var/www/html/     客: 調整inotify核心引數 max_queue_events:監控佇列大小 預設16384 max_user_instances:最多監控例項數 預設 128 max_user_watches:每個例項最多監控檔案數 預設8192   cat /proc/sys/fs/inotify/max_queued_events 16383 cat /proc/sys/fs/inotify/max_user_instances 128 cat /proc/sys/fs/inotify/max_user_watches 8192   vi /etc/sysctl.conf fs.inotify.max_queued_events = 32768 fs.inotify.max_user_instances = 1024 fs.inotify.max_user_watches = 1048576   sysctl -p   安裝inotify (發起端→客戶端) 安裝inotify-tools輔助工具 inotifywait:用於持續監控,實時輸出結果(增刪改屬性修改) inotifywatch:用於短期監控,任務完成後再出彙總結果   yum install make gcc gcc-c++ -y cd /opt tar zxvf inotify-tools-3.14.tar.gz -C /opt cd inotify-tools-3.14/ ./configure make && make install   yum install httpd -y #可以先執行“inotifywait”命令,然後另外再開啟一個新的終端向 /var/www/html 目錄下新增檔案、移動檔案,在原來的終端中跟蹤螢幕輸出結果。 [root@localhost ~]# inotifywait -mrq -e modify,create,move,delete /var/www/html -e 用來指定要監控哪些事情 -m 表示持續監控 -r 表示遞迴整個目錄 -q 簡化輸出資訊   開啟客戶端的另外1個視窗後進行操作 vim /var/www/html/index1.html this is qwe 可以在客戶端的第一個視窗看到變動   指令碼觸發 vim /opt/inotify.sh #!/bin/bash INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /var/www/html" RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html [email protected]::wwwroot" $INOTIFY_CMD | while read DIRECTORY EVENT FILE do if [ $(pgrep rsync | wc -l) -le 0 ] ; then $RSYNC_CMD   fi done   chmod +x /opt/inotify.sh chmod 777 /var/www/html/ chmod +x /etc/rc.d/rc.local echo '/opt/inotify.sh' >> /etc/rc.d/rc.local bash /opt/inotify.sh   測試: 服: rsync --daemon cd /var/www/html/   客: 上述指令碼用來檢測本機/var/www/html 目錄的變動情況,一旦有更新發rsync 同步操作,上傳備份至伺服器 192.168.63.100 的 wwwroot共享目錄下。 在本機(客戶機)執行/opt/inotify.sh指令碼程式 用客戶機的另外1個視窗切換到本機(客戶機)的/var/www/html目錄 進行建立、修改等操作檢視變化 檢視服務端中的wwwroot目錄下的變化         擴充套件: sersync可以去看一看 級聯伺服器:   查埠去看: 用telnet ,偵測埠,他還可以用來防斷開(升級openssl)   參考: https://www.cnblogs.com/wujuntian/p/16410235.html