【MYSQL】MHA引數列表說明

ai3707發表於2016-03-25
使用MHA配置MYSQL高可用叢集時,對於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 0.53後開始支援) 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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29018063/viewspace-2063845/,如需轉載,請註明出處,否則將追究法律責任。

相關文章