MHA常用指令碼簡介
master_ip_failover
常見的HA環境下,大多是情況會給master分配一個虛擬IP,如果master當機,HA軟體像一個Pacemaker將虛擬IP轉移到備用的master上.
另外一種常見的方法就是建立一個全域性目錄資料庫,包含所有應用和writer/reader ip地址.例如{app_master1,192.168.0.1},{app_master2,192.168.0.2}...,代替使用虛擬IP,這種情況,你需要在master當機的時候更新目錄資料庫.
兩種方法都有好的或者不好的地方,MHA不強制要求使用哪一種,但是提供了master_ip_failover_script引數來完成此目的.換句話說,你需要寫一個指令碼來調整應用服務連線到新的master,然後定義master_ip_failover_script的引數,下面是一個例項:
master_ip_failover_script= /usr/local/sample/bin/master_ip_failover
你可以從(MHA Manager package)/samples/scripts/master_ip_failover找到一個簡單的指令碼.這個指令碼在manager的tarball和GitHUb branch中才包含.
MHA manager會呼叫master_ip_failover_script三次,第一次,在開始master monitor之前呼叫(目的是檢查指令碼是否可用),第二次是在呼叫shutdown_script指令碼前呼叫,第三次是在new master應用完所有的差異日誌以後,MHA manager會傳遞給指令碼如下引數.(你不用在配置檔案中指明這些引數)
power_manager (防止腦裂)
你可能需要強制關閉master伺服器,避免他再次提供服務,這對於避免腦裂很重要.下面是一個例項:
shutdown_script= /usr/local/sample/bin/power_manager
你可以從(MHA Manager package)/samples/scripts/power_manager找到一個簡單的指令碼.這個指令碼在manager的tarball和GitHUb branch中才包含.
在呼叫shutdown_script指令碼之前,MHA manager內部會透過ssh嘗試連線到mysql master,如果ssh可以連線(意思就是OS是存活的,但是Mysqld沒有執行),MHAmanager就會傳遞下面的引數:
--command=stopssh (這個意思就是指停止服務,不會關機)
--ssh_user=(ssh username so that you can connect to the master)
--host=(master's hostname)
--ip=(master's ip address)
--port=(master's port number)
--pid_file=(master's pid file)
如果master主機的ssh不能連線,那麼MHA會使用如下引數:
--command=stop (這個會透過fence裝置關掉電源)
--host=(master's hostname)
--ip=(master's ip address)
這個指令碼的大概功能如下,如果--command=stopssh被呼叫,指令碼會使用killall -9 殺掉目標伺服器上所有的mysqld_safe服務.如果--pid_file被設定,指令碼嘗試kill指定的程式.如果指令碼執行成功,那麼指令碼會退出返回狀態10.如果退出狀態為10,MHA manager後面會透過ssh連線到master,獲取需要的binary log.如果指令碼透過ssh連線到伺服器失敗,那麼就會傳遞--command=stop引數,這個引數嘗試關閉機器的電源,關閉電源依賴於H/W.HP(ILO),DELL(DRAC).如果power off成功,指令碼會然會狀態0,其他情況會返回狀態1.當返回狀態是0的時候MHA manager 開始failover.如果返回狀態不是0或者10,那麼MHA manager會意外終止.這個引數預設是空,所以MHA manager不會呼叫任何指令碼.
另外,MHA manager在啟動monitoring之前呼叫shutdown_script.這時候會傳遞下面的引數.目的是檢測指令碼是否可用,如果發現錯誤,你可以提前知道.
--command=status
--host=(master's hostname)
--ip=(master's ip address)
send_report
你希望當failover發生以後可以傳送一個報告(例如email),report_script可以達到這個目的,MHA manager傳遞下面的引數.
--orig_master_host=(dead master's hostname)
--new_master_host=(new master's hostname)
--new_slave_hosts=(new slaves' hostnames, delimited by commas)
--subject=(mail subject)
--body=(body)
預設這個引數是空的,所以MHA manager不呼叫任何指令碼.
你可以從(MHA Manager package)/samples/scripts/send_report找到一個簡單的指令碼.這個指令碼在manager的tarball和GitHUb branch中才包含.
master_ip_online_change
這是幾個簡單版本的master_ip_failover_script引數,但是master failover命令並不呼叫它.master online change命令會呼叫它.(masterha_master_switch --master_state=alive),傳遞以下引數:
Current master write freezing phase
--command=stop or stopssh
--orig_master_host=(current master's hostname)
--orig_master_ip=(current master's ip address)
--orig_master_port=(current master's port number)
--orig_master_user=(current master's user)
--orig_master_password=(current master's password)
--orig_master_ssh_user=(from 0.56, current master's ssh user)
--orig_master_is_new_slave=(from 0.56, notifying whether the orig master will be new slave or not)
New master granting write phase
--command=start
--orig_master_host=(orig master's hostname)
--orig_master_ip=(orig master's ip address)
--orig_master_port=(orig master's port number)
--new_master_host=(new master's hostname)
--new_master_ip=(new master's ip address)
--new_master_port(new master's port number)
--new_master_user=(new master's user)
--new_master_password=(new master's password)
--new_master_ssh_user=(from 0.56, new master's ssh user)
MHA在當前的master write freezing階段後執行FLUASH TABLES WITH READ LOCK, 在new mastergranting write階段你可以執行一些類似master_ip_failover_script的操作.比如建立一個有寫入許可權的使用者,執行SET GLOBAL read_only=0,更新目錄資料庫等.如果你的指令碼退出返回狀態不是1或者10,那麼MHA manager將會意外終止,停止master switch.
這個引數預設為空,所以MHA manager不做任何呼叫.
你可以從(MHA Manager package)/samples/scripts/master_ip_online_change找到一個簡單的指令碼.這個指令碼在manager的tarball和GitHUb branch中才包含.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2214306/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HTML 指令碼簡介HTML指令碼
- Bash 指令碼簡介指令碼
- pm2 簡介與常用指令
- [20200117]ashtop指令碼使用簡介.txt指令碼
- [20211118]mutexprof指令碼使用簡介.txtMutex指令碼
- linux常用指令介紹Linux
- Unity引擎與C#指令碼簡介UnityC#指令碼
- Python Plumbum 簡介:用 Python 來寫指令碼Python指令碼
- python 常用指令碼Python指令碼
- SQLServer 常用指令碼SQLServer指令碼
- 常用shell指令碼指令碼
- MySQL 常用指令碼MySql指令碼
- 常用索引簡介索引
- 常用指令碼學習手冊——Bat指令碼指令碼BAT
- Bash 常用指令碼片段指令碼
- Verilog 編譯指令簡介編譯
- Spring常用Annotation簡介Spring
- 手挽手帶你學VUE:一檔 VUE簡介以及常用內部指令Vue
- linux常用的shell指令碼Linux指令碼
- sqlmap常用繞過指令碼SQL指令碼
- linux 常用Mysql指令碼命令LinuxMySql指令碼
- Linux常用初級指令介紹和使用Linux
- Linux Bash Shell 指令碼入門(3)——Linux常用命令介紹Linux指令碼
- 持久記憶體指令(PMDK)簡介記憶體
- Dynamics CRM 2013 常用JS指令碼JS指令碼
- bat批處理常用指令碼BAT指令碼
- 簡話密碼學3 - 常用加密演算法介紹密碼學加密演算法
- RAP簡介教程&常用規則
- KVM常用命令簡介
- mysql 常用sql語句 簡介MySql
- 簡記一些常用的操作指令
- catalog.sql指令碼介紹SQL指令碼
- meterpreter常見指令碼介紹指令碼
- Shell指令碼介紹與使用指令碼
- Shell指令碼常用命令整理指令碼
- ORACLE常用定時備份指令碼Oracle指令碼
- 常用的WEB伺服器簡介Web伺服器
- JavaScript 教程之JavaScript常用框架簡介JavaScript框架