美文网首页DBA
如何在MHA中添加配置参数

如何在MHA中添加配置参数

作者: mysia | 来源:发表于2020-05-20 14:28 被阅读0次

    MHA的配置文件可以分为两部分,global_configfileconfigfile,分别是全局的配置文件和对应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分别是配置文件中serverxxxserver 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增加参数也没有那么难搞。

    相关文章

      网友评论

        本文标题:如何在MHA中添加配置参数

        本文链接:https://www.haomeiwen.com/subject/zvsiohtx.html