MHA的配置文件可以分為兩部分,global_configfile和configfile,分別是全局的配置文件和對應(yīng)MySQL集群的配置文件。
全局配置文件中,設(shè)置了通用配置。比如:
[server default]
user=root
password=nopass
ssh_user=mha
repl_user=repl
repl_password=repl
manager_workdir=/opt/soft/mha/
remote_workdir=/work/mha/
master_ip_failover_script=/opt/soft/mha/scripts/master_ip_failover
master_ip_online_change_script=/opt/soft/mha/scripts/master_ip_online_change
report_script=/opt/soft/mha/scripts/send_report
ping_interval=1
上面的配置參數(shù)中,寫明了MHA Server上的一些通用配置,如連接MySQL集群的賬號、密碼,ssh的用戶等。這樣方便管理MHA Server的配置,只需要更改這個全局文件即可。
MySQL集群的配置,可單獨(dú)指定配置文件:
[server default]
manager_log=/opt/soft/mha/logs/6666-1.log
master_binlog_dir=/work/mysql6666/var/
secondary_check_script=/opt/soft/mha/bin/masterha_secondary_check -s 10.136.198.28 -s 10.136.198.77 --user=root
[server1]
hostname=192.168.1.1
port=6666
[server2]
hostname=192.168.1.2
port=6666
candidate_master=1
check_repl_delay=0
[server3]
hostname=192.168.1.3
port=6666
no_master
上面就是一個MySQL集群的MHA配置,Server1是現(xiàn)有主庫、Server2是備主、Server3不允許切換為主。
其實MHA在處理配置文件時,主要分為兩類。一類是[server default],一類是[serverxxx],也就是說無論是在global_configfile還是configfile,只要是在相同section下,就可以一起使用。
MHA的配置文件,由Config.pm處理,下面做簡單說明。
my @PARAM_ARRAY =
qw/ hostname ip port ssh_host ssh_ip ssh_port ssh_connection_timeout ssh_options node_label candidate_master no_master ignore_fail skip_init_ssh_check skip_reset_slave user password repl_user repl_password disable_log_bin master_pid_file handle_raw_binlog ssh_user remote_workdir master_binlog_dir log_level manager_workdir manager_log check_repl_delay check_repl_filter latest_priority multi_tier_slave ping_interval ping_type secondary_check_script master_ip_failover_script master_ip_online_change_script shutdown_script report_script init_conf_load_script client_bindir client_libdir use_gtid_auto_pos MHA_status/;
MHA的參數(shù),寫在一個數(shù)組中,如果想增加一個參數(shù),在末尾添加一個即可。比如上面代碼中,我們添加了一個參數(shù),叫MHA_status,放在配置文件中的serverxxx的section下。
那么如何解析這個參數(shù)呢?
Config.pm 中的parse_server函數(shù)負(fù)責(zé)這件事。改函數(shù)的參數(shù)中,$param_arg和$default分別是配置文件中serverxxx和server default section的對象。我們前面的添加的參數(shù)在serverxxx這個section下,那么解析方法如下:
$value{MHA_status} = $param_arg->{MHA_status};
if ( !defined( $value{MHA_status} ) ) {
$value{MHA_status} = $default->{MHA_status};
$value{MHA_status} = 1 unless ( $value{MHA_status} );
}
上述代碼的含義是,解析配置文件中的MHA_status,賦值到value這個哈希中。如果在serverxxx中沒有定義MHA_status,則去default中拉取,如果再沒有,則賦予默認(rèn)值1。
如何在MHA中使用我們加的參數(shù)呢?
直接上代碼:
use MHA::Config;
## 聲明變量,用來初始化配置文件對象
my @servers_config;
## 調(diào)用讀取配置文件方法,初始化對象
my ( $sc_ref, $binlog_server_ref ) = new MHA::Config(
logger => $log,
globalfile => $g_global_config_file,
file => $g_config_file
)->read_config();
## 假如我們在Server1中配置了MHA_status,下面的方法可以得到該值
@servers_config = @$sc_ref;
my $MHA_status = $servers_config[0]->{MHA_status};
## 后續(xù)處理
...
綜上,給MHA增加參數(shù)也沒有那么難搞。