MHA的配置文件可以分为两部分,global_configfile
和configfile
,分别是全局的配置文件和对应MySQL集群的配置文件。
全局配置文件中,设置了通用配置。比如:
[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
上面的配置参数中,写明了MHA Server上的一些通用配置,如连接MySQL集群的账号、密码,ssh的用户等。这样方便管理MHA Server的配置,只需要更改这个全局文件即可。
MySQL集群的配置,可单独指定配置文件:
[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是现有主库、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的参数,写在一个数组中,如果想增加一个参数,在末尾添加一个即可。比如上面代码中,我们添加了一个参数,叫MHA_status
,放在配置文件中的serverxxx
的section下。
那么如何解析这个参数呢?
Config.pm
中的parse_server
函数负责这件事。改函数的参数中,$param_arg
和$default
分别是配置文件中serverxxx
和server default
section的对象。我们前面的添加的参数在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
中拉取,如果再没有,则赋予默认值1。
如何在MHA中使用我们加的参数呢?
直接上代码:
use MHA::Config;
## 声明变量,用来初始化配置文件对象
my @servers_config;
## 调用读取配置文件方法,初始化对象
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};
## 后续处理
...
综上,给MHA增加参数也没有那么难搞。
网友评论