探索MySQL高可用架构之MHA(6)
探索MySQL高可用架構之MHA(6)
-----構建mysql高可用系列(共9篇)
? ? 上一篇文章介紹了本次架構的Atlas讀寫分離!
????本篇文章主要介紹本次架構中的keepalive部分!
????什么是Keepalived呢????
????????keepalived是一款c語言寫的實現在linux系統上實現負載均衡和高可用的軟件。它遵從于GNU是一款優秀的開源軟件。keepalived觀其名可知,保持存活,在網絡里面就是保持在線了,也就是所謂的高可用或熱備,用來防止單點故障的發生。
????兩個關鍵詞的解釋
????????負載均衡
????????keepalived內置了對ipvs函數的調用支持。可以直接在keepalived中按照語法配置ipvs然后keepalived就可以實現對ipvs的配置。
????????高可用
????????keepalived是以VRRPVirtual Router Redundancy Protocol協議為實現基礎的即虛擬路由冗余協議。虛擬路由冗余協議可以認為是實現路由器高可用的協議即將N臺提供相同功能的路由器組成一個路由器組這個組里面有一個master和多個backupmaster上面有一個對外提供服務的vip該路由器所在局域網內其他機器的默認路由為該vipmaster會發組播當backup收不到vrrp包時就認為master宕掉了這時就需要根據VRRP的優先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。
????????本套架構中keepalive的作用????
????????由于mysql+replication方案中master和slave的關系是一對多的關系,整個系統中只有一個master節點(寫入節點),多個slave節點,那么master節點一旦down機后,整個系統的數據寫入操作將癱瘓,對系統造成嚴重后果。為此引入了keepalive工具,讓這個系統的master和slave關系是多對多的關系,對master節點進行雙機熱備,以達到整個系統的高可用性。其中keepalive工具負責對兩個master節點進行不間斷監聽,一旦工作中的master節點停止工作后,那么備份master節點就會接管 ,讓這個系統正常工作。向外提供一個虛擬ip以供proxy訪問master,虛擬ip對應了兩個實ip的maser節點。
? ? 下面就讓我們開始操作吧:
????????源碼包安裝keepalive
????????make時可能報錯如下:
????????解決方法:
cd?keepalived-1.2.2????#進入源碼目錄 vi?keepalived/libipvs-2.6/ip_vs.h????#修改如下 (1)#include?<linux/types.h>????????/*?For?__beXX?types?in?userland?*/ #找到上面這一行 (2)#include?<sys/types.h> #把(1)這一行,放在(2)代碼下面,接下來順利make了。????????編輯keepalived資源配置文件
vi?/etc/keepalived/keepalived.conf????#修改如下 !?Configuration?File?for?keepalived global_defs?{router_id?MYSQL-ha????#為router_id命名 } vrrp_script?check_running?{script"/etc/keepalived/keepalived_check_mysql.sh"???#判斷實例是running的腳本interval?5???#每5秒執行一次,判斷實例是running的腳本 } vrrp_instance?PWRD_1?{??????#指定vrrp_instance實例state?BACKUP????????#指定狀態為備份interface?bond0?????#網絡端口為bond0virtual_router_id?88???priority?150?#[另一臺是100]???#本機權重advert_int?1nopreempt?#[另一臺不加]????#當主機恢復時,不搶占authentication{auth_type?PASS??????#密碼驗證auth_pass?99999}virtual_ipaddress?{10.142.132.49???#指定VIP}track_script?{check_running}notify_master/etc/keepalived/master.sh???#當前服務器為主時,觖發執行的腳本notify_backup/etc/keepalived/slave.sh???#當前服務器為備時,觖發執行的腳本notify_fault/etc/keepalived/notify_fault.sh??#當前服務器出現問題時,觖發執行的腳本notify_stop/etc/keepalived/down.sh??#當前服務器為down時,觖發執行的腳本 }? ? ? ? 編寫判斷mysql服務是否正常的腳本
vi?keepalived_check_mysql.sh???#增加如下內容 #!/bin/bash MYSQL=/app/mysql/bin/mysql?????#指定mysql命令 MYSQL_HOST=localhost?????????#指定主機IP MYSQL_USER=root????????#指定Mysql登錄用戶 MYSQL_PASSWORD=mysql?????#指定Mysql登錄密碼 CHECK_COUNTS=3????????#控制循環次數變量#mysql?is?working?MYSQL_OK?is?0?,?mysql?isnot?working?MYSQL_OK?is?1 MYSQL_OK=0???#標識mysql狀態變量function?check_Mysql_Runing?(){$MYSQL?-h?$MYSQL_HOST?-u?$MYSQL_USER?-p${MYSQL_PASSWORD}-e?"show?grants;"?>/dev/null?2>&1#在操作系統層面,調用mysql命令 if?[?$??=?0?]?;thenMYSQL_OK=0????????#如果上面操作成功,證明Mysql正常elseMYSQL_OK=1?????????#如果上面操作不成功,證明Mysql不正常fi return?$MYSQL_OK??????????#返回Mysql狀態}while?[?$CHECK_COUNTS?-ne?0?]??????#循環控制dolet"CHECK_COUNTS?-=?1"?????#CHECK_COUNTS變量做自減1check_Mysql_Runing???????#調用上面的函數if?[?$MYSQL_OK=?0?]?;?then???????#MYSQL_OK=0,mysql工作正常echo?"mysql?is?runing!"exit?0fiif?[?$MYSQL_OK-eq?1?]?&&?[?$CHECK_COUNTS?-eq?0?]??#MYSQL_OK=1和CHECK_COUNTS=0,mysql沒有正常運行thenecho?"mysql?is?not?runing!"exit?1fisleep?1???#休眠1秒 done? ? ? ? 編寫當前服務器為主時的腳本
vi?/etc/keepalived/master.sh???#增加如下內容 #!/bin/bash echo?"#`date?+"%Y-%m-%d%H:%M"`?change?master?status!!!?"?>>?/etc/keepalived/change.log #輸出當前時間到日志中? ? ? ? 編寫當前服務器為備時的腳本
vim/etc/keepalived/slave.sh #!/bin/bash echo?"#`date?+"%Y-%m-%d%H:%M"`?change?slave?status!!!"?>>?/etc/keepalived/change.log #輸出當前時間到日志中?? ? ? ? 編寫當前服務器不正常時的腳本
vim/etc/keepalived/notify_fault.sh #!/bin/bash echo?"#`date?+"%Y-%m-%d%H:%M"`?change?notify_fault?status!!!"?>>/etc/keepalived/change.log #輸出當前時間到日志中 sleep?3???#休眠3秒 echo?"#`date?+"%Y-%m-%d%H:%M"`?try?startup?mysql!!!"?>>?/etc/keepalived/change.log #輸出當前時間到日志中????? service?mysql?start?????#啟動Mysql服務器?? ? ? ? 編寫當前服務器wodn時的腳本
vim/etc/keepalived/down.sh #!/bin/bash echo?"#`date?+"%Y-%m-%d%H:%M"`?keepalived?is?down!!!"?>>?/etc/keepalived/change.log #輸出當前時間到日志中?? ? ? ? 為所有腳本授予可執行權限
chmod?+x?keepalived_check_mysql.sh chmod?+x?/etc/keepalived/master.sh chmod?+x?/etc/keepalived/slave.sh chmod?+x?/etc/keepalived/notify_fault.sh chmod?+x?/etc/keepalived/down.sh?? ? ? ? 通過vip登錄Mysql服務器
(1)?mysql?-h10.142.132.49?-ulipengfei-plipengfei SHOW?VARIABLES?LIKE?'server_id';??#查看當前是哪個mysql主機,當前mysql主庫 (2)?把mysql主庫停止 (3)?mysql?-h10.142.132.49?-ulipengfei-plipengfei SHOW?VARIABLES?LIKE?'server_id';??#查看當前是哪個mysql主機,當前是mysql備主????可以看出主庫停了,vip會自動漂移到備主上。
????到此為止,咱們的keepalived功能就配置結束了!
????只要朋友們仔細點按著我寫的文章一步一步操作,相信你也可以成功的,加油吧!
轉載于:https://blog.51cto.com/51power/1672220
總結
以上是生活随笔為你收集整理的探索MySQL高可用架构之MHA(6)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java、上转型对象
- 下一篇: linux 下一个 osw先从操作系统和