麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 課堂 > 基礎知識 > 正文

MHA源代碼之主庫采取

2024-09-12 20:29:54
字體:
來源:轉載
供稿:網友
        MHA源代碼之主庫選取:

一 、MHA 選舉主庫所維護的數組
      在講MHA選擇 master的代碼中,我們必須把維護的四個數組的來龍去脈講清楚
 
(1) Alive_slaves 數組 :
       server不是 master,且從庫正常, latest數組中的 server有足夠的中繼日志恢復這個落后的從庫 (追上主庫 ),則放入這個 Alive_slaves的數組中 (此段代碼在 ServerManager.pm: init_servers函數 )
 
 
    if ( $server->{dead} ) {
      $self->add_dead_server($server);
    }
    elsif ( $server->{unmanaged} ) {
      $self->add_unmanaged_slave($server);
    }
    #不是dead或者unmanaged就加入alive_server數組,如果show slave status 不是返回0E0,且這個server不是原來的主庫,并且sql線程無誤且可以用中繼日志來恢復,就加入alive_slave數據,否則加入failed——slave數組
    else {
      $self->add_alive_server($server);
      if ( $server->{not_slave} eq '0' && !$server->{orig_master} ) {
        if ( !$server->is_sql_thread_error() && !$server->{lack_relay_log} ) {
          $self->add_alive_slave($server);
        }
        else {
          $self->add_failed_slave($server);
        }
      }
}
(2)Latest 數組
在 alive_slaves數組中選取 relaylog最新的 server,這個數組如果有多個 server,則 server的 Read_master_log_pos,master_log_file一定相等(此段代碼在 ServerManager.pm: identify_latest_slaves函數)
 
(3)Perf 數組
這個無需多解釋,就是MHA配置文件中配置了 candidate_master的值,這個可以大于 1哦
 
(4)Bad 數組: ( 代碼見: ServerManager.pm:get_bad_candidate_masters)
1) 檢測有故障的server
 
2) MHA 配置文件設置了 no_master 的 server
 
3)log_bin 沒有打開的server
 
4) 版本不兼容的server (高版本復制到低版本是沒問題的,但是如果低版本的選為為主庫,嘿嘿)
 
5) 復制落后太多的server
 
二 、MHA 主庫的選舉
(1) 指定主庫切換的,優先級最高(通常這是在手動切換)
 
(2) 如果server 在 latest 數組中,且在 perf 數組中,則優先返回
 
(3) 如果server 在 alive_servers 數組中,且在 perf 數組中,則優先返回
 
(4) 如果server 在 lastest 中,則優先返回
 
(5) 如果server 在 alive_servers 中,則返回
 
(6) 否則選舉失敗
 
這里優先級為1->6,具體實現在 (ServerManager.pm: select_new_master)
 
 
sub select_new_master {
  my $self                    = shift;
  my $prio_new_master_host    = shift;
  my $prio_new_master_port    = shift;
  my $check_replication_delay = shift;
  $check_replication_delay = 1 if ( !defined($check_replication_delay) );
 
  my $log    = $self->{logger};
  my @latest = $self->get_latest_slaves();
  my @slaves = $self->get_alive_slaves();
 
  my @pref = $self->get_candidate_masters();
  my @bad =
    $self->get_bad_candidate_masters( $latest[0], $check_replication_delay );
  #切換指定了master,即優先級最高的
  if ( $prio_new_master_host && $prio_new_master_port ) {
    my $new_master =
      $self->get_alive_server_by_hostport( $prio_new_master_host,
      $prio_new_master_port );
    if ($new_master) {
      my $a = $self->get_server_from_by_id( /@bad, $new_master->{id} );
      unless ($a) {
        $log->info("$prio_new_master_host can be new master.");
        return $new_master;
      }
      else {
        $log->error("$prio_new_master_host is bad as a new master!");
        return;
      }
    }
    else {
      $log->error("$prio_new_master_host is not alive!");
      return;
 
  # none of latest servers can not be a master
  $log->info(" Searching from all slaves..");
  foreach my $s (@slaves) {
    my $a = $self->get_server_from_by_id( /@bad, $s->{id} );
    return $s unless ($a);
  }
  $log->info("  Not found.");
 
  return;

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美18一19sex性护士农村 | av免费在线免费观看 | 亚州综合网 | 国产99免费 | 国产精品刺激对白麻豆99 | 久章草影院 | 中文字幕亚洲欧美 | 性爱免费视频 | 91短视频网址| 56av国产精品久久久久久久 | 久久精品99国产国产精 | 欧美成人综合视频 | 欧美成人一区二区三区 | 亚洲综合视频网站 | 91精品观看91久久久久久国产 | 在线成人免费观看 | 亚洲国产精品高潮呻吟久久 | av电影在线免费 | 国产91亚洲精品一区二区三区 | 国内精品伊人久久 | 成年免费观看视频 | 欧美日韩免费一区 | 久久精品欧美电影 | 色网在线视频 | 欧美性久久久 | 日本欧美一区二区三区在线观看 | 亚洲一区二区三区视频 | 成人一级免费视频 | 亚洲成人精品国产 | 双性精h调教灌尿打屁股的文案 | 孕妇体内谢精满日本电影 | 136福利视频| 中国videos露脸hd | 美女黄网站免费观看 | 逼片视频 | 噜噜噜影院 | 久成人| 久久精品久 | 亚洲乱妇19p | 精品国产一区二区三区在线观看 | 色婷婷av一区二区三区久久 |