MySQL高可用組件MHA參數詳解
MHA目前在 MySQL高可用方面是一個相對成熟的解決方案,它由日本人開發,是一套優秀的作為 MySQL高可用性環境下故障切換和主從提升的高可用軟體。MHA提供了一系列配置參數,深入理解每個參數的具體含義,對最佳化配置、合理使用MHA非常重要,很多高可用性也都是通過合理配置一些參數而實現的。下面我們來詳細介紹一些在使用MHA過程中可能用到的一些參數~
Local :指每一個配置塊內部。 Local功能的參數需要放置在[server_xxx] 塊下面
App :參數作用於master/slave, 這些參數需要配置在[server_default]塊的下面
Global :作用於master/slave, Global層級的參數用於管理多組master/slave結構,可以統一化管理一些參數。
hostname:配置MySQL伺服器的機器名或是IP地址,這個配置項是必須的,而且只能配置在[server_xxx]這個塊下面。
如:參數名 是否必須 範圍 預設值 例子及說明
hostname Yes Local Only – hostname=mysql_server1, hostname=192.168.0.1, etc
ip:MySQL伺服器的ip地址。 預設從gethostname($hostname)中獲得。 預設不用配置這個參數,MHA可以通過hostname自動擷取,MHA通過IP地址串連MySQL伺服器及SSH串連。
如:
參數名 是否必須 範圍 預設值 例子及說明
ip No Local Only 通過gethostbyname($hostname)獲得 ip=192.168.1.3
port:MySQL啟動並執行連接埠號碼。 預設是3306. MHA使用IP和連接埠號碼串連MySQL
如:
參數名 是否必須 範圍 預設值 例子及說明
port No Local/App/Glbal 3306 port=3306
ssh_host:MHA要ssh上MySQL目標伺服器使用hostname或是ip地址。這個參數主要用於在使用多個VLAN的環境中。為了安全原因ssh預設不允許。預設這個參數和hostname相同。
如:
參數名 是否必須 範圍 預設值 例子及說明
ssh_host No Local Only 和hostname相同 ssh_host=mysql_server1, ssh_host=192.168.0.1, etc
ssh_ip:(從MHA 0.53後開始支援) 和ssh_host作用相同。 預設是gethostname($ssh_host)獲得。
如:
參數名 是否必須 範圍 預設值 例子及說明
ssh_ip No Local Only gethostbyname($ssh_host) ssh_ip=192.168.1.3
ssh_port:(從MHA 0.53後開始支援) SSH使用的連接埠號碼,預設是22.
如:
參數名 是否必須 範圍 預設值 例子及說明
ssh_port No Local/App/Global 22 ssh_port=22
ssh_connection_timeout:(從MHA 0.54後支援)預設是5秒。在沒添加這個參數之前ssh逾時時間是寫死的。
如:
參數名 是否必須 範圍 預設值 例子及說明
ssh_connection_timeout No Local/App/Global 5 ssh_connect_timeout=5
ssh_options:(從MHA 0.53後支援)添加ssh命令列的支援參數,例如加上特別檔案名稱的key的支援等。
如:
參數名 是否必須 範圍 預設值 例子及說明
ssh_options No Local/App/Global “” 空的 ssh_options=”-i /root/.ssh/id_dsa2″
candidate_master:你可能對於同一組slave中有著不同的規劃,有的其望在Master故障時,提升為新的Master(如: Raid1的slave比Raid0的slave更適合做Master)
這個參數的作用是當設計candidate_master = 1時,這個伺服器有較高的優先權提升為新的master(還要具備: 開啟binlog, 複製沒有延遲)。 所以當設定了candidate_master = 1的機器在master故障時必然成為新的master. 但這是很有用的設定優先權的一個參數。
如果設定了多台機器的caddidate_master = 1 , 優先策略依賴於塊名字([server_xxx]). [server_1] 優銜權高於[server_2].
如:
參數名 是否必須 範圍 預設值 例子及說明
candidate_master No Local Only 0 candidate_mast=1
no_master
當設定了no_master = 1的伺服器,這個伺服器永遠不會提升為新的master. 這個參資料對於永遠不期望成為master的機器很有用。 如: 你可能需要在使用raid0的機器上設定no_master = 1 或是你希望在遠端idc裡運行一個slave. 注意: 當沒有可以成為新master的機器是MHA就直接退出來了同時停止監控和master故障切換。
如:
參數名 是否必須 範圍 預設值 例子及說明
no_master No Local Only 0 no_master=1
ignore_fail:在預設情況下,MHA manager不會在slave存在故障的情況下(已經不能通過SSH/MySQL進行串連,或是SQL Thread已經停止出錯,其它原因)的情況下進行Master的故障切換(當不存在slave時MHA manager也會退出)。 但有些情況下你期望在slave存在問題的情況下,也進行故障切換。 所以當設定了ignore_fail = 1時,MHA會在所有的機器有問題的時間也會進行故障切換。 預設是0.
如:
參數名 是否必須 範圍 預設值 例子及說明
ignore_fail No Local Only 0 ignore_fail=1
skip_init_ssh_check:在MHA manager啟動時跳過ssh檢查。
如:
參數名 是否必須 範圍 預設值 例子及說明
skip_init_ssh_check No Local Only 0 skip_init_ssh_check=1
skip_reset_slave::(從MHA 0.56開始支援) Master故障切換後新的master上執行RESET SLAVE(ALL).
如:
參數名 是否必須 範圍 預設值 例子及說明
skip_reset_slave No Local/App/Global 0 skip_reset_slave=1
user:用於管理MySQL的使用者名稱。這個最好使用root使用者,因為它需要執行:stop slave; change master to , reset slave. 預設: root
如:
參數名 是否必須 範圍 預設值 例子及說明
user No Local/App/Global root user=mysql_root
password:MySQL的系統管理使用者的密碼。 預設是空的
如:
參數名 是否必須 範圍 預設值 例子及說明
password No Local/App/Global 空的 password=rootpass
repl_user:MySQL用於複製的使用者,也是用於產生CHANGE MASTER TO 每個slave使用的使用者。 這個使用者必須有REPLICATION SLAVE許可權在新的Master上。預設情況下 repl_user會在將來成為master的機器上運行show slave status擷取到。
如:
參數名 是否必須 範圍 預設值 例子及說明
repl_user No Local/App/Global 從show slave status repl_user=repl
repl_password:MySQL中repl_user使用者的密碼。 預設是當前複製用的密碼。 當你使用online_master_switch時,當使用–orig_master_is_new_slave(原來的Master成為新Master的一個slave)時,如果沒有repl_password 開啟同步就會失敗了。因為當前master上用於複製的使用者名稱和密碼都是空的(MHA在原來的Master上執行change master to 時沒有帶複製的密碼,雖然其它slave上設定了複製的密碼)
如:
參數名 是否必須 範圍 預設值 例子及說明
repl_password No Local/App/Global 當前複製用的密碼 repl_password=replpas
disable_log_bin:當設定了這個參數,在slave應用差異的relay log時不會產生二進位日誌。內部實現通過mysqlbinlog的disable-log-bin實現。
如:
參數名 是否必須 範圍 預設值 例子及說明
disable_log_bin No Local/App/Global 0 disable_log_bin=1
master_pid_file:指定MySQL的pid檔案。這個參數在一台伺服器上運行多個MySQL服務進程時非常有用。
如:
參數名 是否必須 範圍 預設值 例子及說明
master_pid_file No Local/App/Global – master_pid_file=/var/lib/mysql/master1.pid
ssh_user:MHA Mananger, MHA node系統上的使用者。 這個帳號需要在遠程機器上有執行許可權(Manager->MySQL),在slave成員之間複製差異的relay-log(MySQL->MySQL)
這個使用者必須有讀取MySQL的binary/relay日誌和relay_log.info的許可權,還需要對遠程MySQL上remote_workdir目錄的寫入權限。
這個使用者還必須可以直接ssh到遠程機順上, 推薦使用ssh pbulic key . 一般使用的ssh_user也是運行manager那個那個使用者。
如:
參數名 是否必須 範圍 預設值 例子及說明
ssh_user No Local/App/Global 當前使用的系統使用者 ssh_user=root
remote_workdir:MHA node上工作目錄的全路徑名。如果不存在,MHA node會自動建立,如果不允許建立,MHA Node自動異常退出。 需要注意MHA manager 或是MHA node上需要檢查空間是否可用,所以需要注意檢查這個。 一般預設, remote_workdir是的”/var/tmp”
如:
參數名 是否必須 範圍 預設值 例子及說明
remote_workdir No Local/App/Global /var/tmp remote_workdir=/var/log/masterha/app1
master_binlog_dir:master上用於儲存binary日誌的全路徑。這個參數用於當master上mysql死掉後,通過ssh連到mysql伺服器上,找到需要binary日誌事件。這個參數可以協助用於無法找到master進程死掉後binary日誌儲存位置。
一般: master_binlog_dir是”/var/lib/mysql/, /var/log/mysql”. “/var/lib/mysql/”是大多數系統發行版本的存放位置,”/var/log/mysql”是ubuntu發行版本的存放位置。 你也可以設定多個存放位置用逗號隔開。
如:
參數名 是否必須 範圍 預設值 例子及說明
master_binlog_dir No Local/App/Gobal /var/lib/mysql master_binlog_dir=/data/mysql1,/data/mysql2
log_level:設定MHA manager記錄LOG的層級。 預設是info層級而且大多數情況也是比較適合。 同樣可以設定為: debug/info/warning/error.
如:
參數名 是否必須 範圍 預設值 例子及說明
log_level No App/Global info log_level=debug
manager_workdir:用於指定mha manager產生相關狀態檔案全路徑。 如果沒設定 預設是/var/tmp
如:
參數名 是否必須 範圍 預設值 例子及說明
manager_workdir No App /var/tmp manager_workdir=/var/log/masterha
manager_log:指定mha manager的絕對路徑的檔案名稱記錄檔。 如果沒設定MHA Manager將列印到STDOUT/STDERR。 當手工執行故障切換(互動模式切換),MHA Manager會忽略manager_log設定直接將日誌輸出到STDOUT/STDERR.
如:
參數名 是否必須 範圍 預設值 例子及說明
manager_log No App STDERR manager_log=/var/log/masterha/app1.log
check_repl_delay:在預設情況下,當一個slave同步延遲超過100M relay log(需要應用超過100M relay log), MHA在做故障切換時不會選擇這個slave做為新的master,因為恢複需要經過很長時間.當設定了check_repl_delay = 0, MHA將忽略被選擇的slave上的同步延遲。 這個選項在設定了candidate_master = 1特聲明的期望這台機器成為master的情況下特別有用。
如:
參數名 是否必須 範圍 預設值 例子及說明
check_repl_delay No App/Golbal 1 check_repl_delay=0
check_repl_filter:在預設下情況,當master和slave設定了不同了binary log/replication 過濾規則時,MHA直接報錯不會進行監控和故障切換。 這些將會導致出現一些異想不到的錯誤”Table not exists”。如果你100%確認不同的過濾規則不會導致恢複中的錯誤,設定check_repl_filter=0。 需要注意: 當使用了check_repl_filter = 0時,MHA不會檢查過濾規則在應用差異的relay日誌,所以有可能會出現”Table not exists”的錯誤。當你設定了這個參數請小心處理。
如:
參數名 是否必須 範圍 預設值 例子及說明
check_repl_filter No App/Global 1 check_repl_filter=0
latest_priority:在預設情況下,和Master最接近的slave(一個slave從Master上獲得了最一個binlog事件)是最有優先權成為新的master。 如果你想控制一下切換的策略(如: 先選擇host2,如果不行,選host3;host3不行,選host4…) 那麼設定latest_priority = 0 就可以了。
如:
參數名 是否必須 範圍 預設值 例子及說明
latest_priority No App/Global 1 latest_priority=0
multi_tier_slave:
從MHA 0.52開始, 多層複製可以支援了。在預設情況下,不支援三層或是更多層的複製配置。 如果: host2從host1上複製,host3從host2上複製。 在預設配置的情況下不支援寫host{1,2,3},因為這是一個三層的複製,MHA Manager會停止報錯。 當設定了multi_tier_slave, MHA Manager就不會在三層複製報錯停止。 但是會忽略第三層的機器。也就是如果host1掛了,host2將會成為新的master,host3還是從host2上進行複製。
這個參數在MHA Manager 0.52後的版開始支援。
如:
參數名 是否必須 範圍 預設值 例子及說明
muli_tier_slave No App/Global 0 multi_tier_slave=1
ping_interval:這個參數設定MHA Manager多長時間去ping一下master(執行一些SQL語句). 當失去和master三次償試,MHA Manager會認為MySQL Master死掉了。也就是說,最大的故障切換時間是4次ping_interval的時間,預設是3秒。
如果MHA Manager在和MySQL建立串連時都收到多串連錯誤或是認證錯誤,這個就不做重試就會認為master已經掛掉。
如:
參數名 是否必須 範圍 預設值 例子及說明
ping_interval No App/Global 3 ping_interval=5
ping_type:(從MHA 0.53後開始支援) 在預設情況下, MHA manager和MySQL建立一個串連執行”select 1″(ping_type=select)用於檢查master是否健康。 但有一些情況: 每次檢測都串連/然後斷開會比較好一點,這樣對於tcp方面的錯誤感知更快一點。設定ping_type=CONNECT 就行了。從MHA 0.56後pint_type=INSERT也被添加。
如:
參數名 是否必須 範圍 預設值 例子及說明
ping_type No App/Global SELECT ping_type=CONNECT
secondary_check_script:一般來講, 非常推薦使用更多網路上機器是不同路由策略上的機器來檢查MySQL Master是否存活。 預設情況下,只有MHA Manager通過一個路由來檢查Master是否存活。這個也是不推薦的。MHA可以通過外部secondary_check_script配置的指令碼來做到從多個路由策略下進行檢查。
secondary_check_script = masterha_secondary_check -s remote_host1 -s remote_host2
secondary_check_script包含在MHA Manager發行包中。 MHA中內建的secondary_check_script在大多數情況下工作良好,但並不是任何地都可以使用這個指令碼。
在上面的例子中, MHA Manager通過Manager->(A)->remote_host1->(B)->master_host 和Manager->(A)-remote_host2->(B)->master_host來檢查MySQL master是否存活。如果在串連過程中通過A可以都成功,通過B是都失敗,secondary_\check_\script返回0,而且認為master已經死掉,進行故障切換。如果通過A成功,但傳回碼為: 2,則MHA manager有會認為是網路問題,則不會進行故障切換。如果A成功,B也成功,masterha_secondary_check 退出返回:3 則MHA Manager就為認為MySQL Master為存活狀態, 則不會進行故障切換。
一般來講, remote_host1和remote_host2是和MHA Manager及MySQL Server位於不同的網段中。
MHA會調用secondary_check_script聲明的指令碼並自動帶上一些參數。 masterha_secondary_check在很多情境都是適用的,但是你也可以自已實現這個程式帶有更多的功能。
–user=(在遠程機器上使用的SSH使用者名稱。 ssh_user的值將被使用)
–master_host = (master的hostname)
–master_ip = (master的ip地址)
–master_port = ( master的連接埠號碼)
masterha_secondary_check:指令碼依賴於的Perl的IO::Socket::INET(Perl 5.6.0中是預設支援包含這個模組)。 masterha_secondary_check需要通過ssh串連到遠端機器上,所以需要manager到遠程機器上建立public key信任。另外masterha_secondary_check是通過和Master建立TCP的串連測試Master是否存活,所以mysql設定的max_connections不起作用。 但每次TCP串連成功後,MySQL的Aborted_connects 值都會加1。
如:
參數名 是否必須 範圍 預設值 例子及說明
secondary_check_script No App/Global null secondary_check_script= masterha_secondary_check -s remote_dc1 -s remote_dc2
master_ip_failover_script:
如:
參數名 是否必須 範圍 預設值 例子及說明
master_ip_failover_script No App/Global null master_ip_failover_script=/usr/local/custom_script/master_ip_failover
master_ip_online_changes_script:這個參數有點類似於master_ip_failover_script,但這個參數不用於master 故障轉意,只使用到master線上的切換。
凍結Master寫的過程:
–command=stop or stopssh
–orig_master_host = (當前master的主機名稱)
–orig_master_ip = (當前master的ip地址)
–orig_master_port = (當前master的port連接埠號碼)
–orig_master_user = (當前master的使用者)
–orig_master_password = (當前master的使用者名稱)
–orig_master_ssh_user = (從0.56支援,當前master的ssh的使用者名稱)
–orig_master_is_new_slave = (從 0.56 ,是否把原Master更改為新的slave)
新的Master接受寫的過程:
–command=start
–orig_master_host = ( 原master的機器名 )
–orig_master_ip = ( 原master的ip )
–orig_master_port = ( 原master的連接埠號碼 )
–new_master_host = (新master的機器名)
–new_master_ip = (新master的ip)
–new_master_port = (新master的連接埠號碼)
–new_master_user = (新master上的使用者名稱)
–new_master_password = (新master上的使用者名稱及密碼)
–new_master_ssh_user = (從0.56支援, 新master上的ssh使用者)
MHA在凍結寫的切換過程中會在Master上執行FlUSH TABLES WITH READ LOCK,在這個優雅的切換過程不會有任何寫入的。在新的Master在開始授權寫的過程中,你可以做和master_ip_failover_script一樣的事情。 例如: 建立使用者及許可權, 執行set global read_only=0, 更新資料庫路由表竺。 如果指令碼執行退出碼不是0 或是10, MHA Manager異常退出並發不會繼續進行master切換。
預設這個參數是空的,所以MHA Manager在預設情況下什麼也不做。
可以在(MHA Manager package)/samples/scripts/master_ip_online_change。裡找到例子指令碼。例子指令碼包含於MHA Manager源檔案或是GitHub的分支中。
如:
參數名 是否必須 範圍 預設值 例子及說明
master_ip_online_change_script No App/Global null master_ip_online_change_script= /usr/local/custom_script/master_ip_online_change
shutdown_script:
如:
參數名 是否必須 範圍 預設值 例子及說明
shutdown_script No App/Global null shutdown_script= /usr/local/custom_script/master_shutdown
report_script:
在Master故障完畢後,也許想發一個送一個報告(如email)報告一下切換完畢或是發生的錯誤。report_script可以完成這個工作。MHA Manager可以通過以下參數使用:
–orig_master_host = (死掉master機器名)
–new_master_host = (新的master機器名)
–new_slave_hosts = (新的slave機器名列表,用逗號隔開)
–subject = (郵件名)
–body = (本文)
預設這些參數是空的。 所以預設MHA Manager什麼事情也不做。
可以在(MHA Manager package)/samples/scripts/send_report裡找到例子指令碼。例子指令碼包含於MHA Manager源檔案或是GitHub的分支中。
如:
參數名 是否必須 範圍 預設值 例子及說明
report_script No App/Global null report_script= /usr/local/custom_script/report
init_conf_load_script:這個參數用於不想設定明文在設定檔中(如:密碼相關)。 只用返回”name=value”這樣的值。 這個可以用來複蓋global配置中的一些值。一個例子指令碼如下。
#!/usr/bin/perl
print “password=$ROOT_PASS\n”;
print “repl_password=$REPL_PASS\n”;
如:
參數名 是否必須 範圍 預設值 例子及說明
init_conf_load_script No App/Global null report_script= /usr/local/custom_script/init_conf_loader
http://www.bkjia.com/PHPjc/1097747.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1097747.htmlTechArticleMySQL高可用組件MHA參數詳解 MHA目前在 MySQL高可用方面是一個相對成熟的解決方案,它由日本人開發,是一套優秀的作為 MySQL高可用性環境下...