詳細検索

Verificar a operação do MHA e a verificação de transição

Avatar
por komi

Verificar a operação do MHA e a verificação de transição
Traduzido do 日本語 • Ver original

Confirmação de operação MHA e verificação de comutação Esta é a continuação do artigo anterior. Teste para comutar conforme mostrado na figura abaixo.

mha_after_failover  *Essa verificação consiste em 1 mestre, 2 escravos e 1 gerente. (A configuração em múltiplos estágios é evitada porque tornará a recuperação em caso de falha de um nó intermediário obsoleta)
  Se você deixar o escravo morar com o gerente, parece que a troca pode não ser boa se você colocar purge_relay_logs nele.
 *Parece que há casos em que só há duas unidades e a comutação não funciona bem. Veja abaixo.
  http://heartbeats.jp/hbblog/2013/05/mysql-mha-haproxy.html

(6) Checagem pré-partida

・Verifique o funcionamento do SSH
[shell] # masterha_check_ssh --conf=/etc/app1.cnf [/shell] Se estiver bem, o resultado final é o seguinte:
[shell] Ter 23 Out 15:02:22 2012 - [info] Todos os testes de conexão SSH foram aprovados com sucesso. [/shell]
・Verificando a operação da replicação
[shell] # masterha_check_repl --conf=/etc/app1.cnf [/shell] Se estiver OK, a saída final é a seguinte (*A partir do mysql5.6, dependendo da versão MHA, você pode falhar aqui se não definir para binlog-checksum=NENHUM).
[shell] A Saúde da Replicação MySQL está OK. [/shell] *Padrão que falha
As regras de filtragem de replicação não estão corretas
Se o gerenciador LVS e MHA estiverem fazendo carpooling, o tempo de verificação se sobrepondrá e será rejeitado pelo servidor de banco de dados para cada host (esvaziar hosts;)

(7) Verifique o arquivo atualizado de VIP IF
DB01/DB02
[shell] cat /etc/sysconfig/network-scripts/ifcfg-eth1:0 ===================================================== # Intel Corporation 82576 Gigabit Network Connection DEVICE=eth0:0 BOOTPROTO=static BROADCAST=192.168.100.255 #HWADDR= IPADDR=192.168.100.5 NETMASK=255.255.255.0 NETWORK=192.168.100.0 ONPARENT=no ===================================================== [/shell] *No caso do IF virtual, ONPARENT=no é especificado porque ONBOOT não responde.

DB01
[shell] # ifup eth1:0 [/shell]
(8) Iniciar, confirmar e parar o Gerente de MHA

  • Gerente de Início
    [shell] # masterha_manager --conf=/etc/app1.cnf & [/shell] *Padrão que falha
    Configuração de replicação quebrada
    Já foi trocado e um arquivo de status mostrando a conclusão é impresso
    Tenha cuidado para não mudar bem se você olhar o log com cauda no terminal onde você iniciou o gerenciador.

  • Verificação de status do treinador
    [shell] # masterha_check_status --conf=/etc/app1.cnf [/shell] OK
    [shell] app1 (PID:9883) está rodando(0:PING_OK), master:192.168.100.1 [/shell]
    [shell] app1 é parado(2:NÃO_RUNNING). [/shell] No caso do status de inicialização imediatamente após a inicialização, ele é enviado assim.
    *Se esse estado continuar por muito tempo, uma eliminação de -9 pode exigir uma parada forçada.

・Suspensão dos treinadores
[shell] # masterha_stop --conf=/etc/app1.cnf

# masterha_check_status --conf=/etc/app1.cnf [/shell] ・Se o gerenciador não parar quando está no estado inicializado,
[shell] # ps -ef|grep master [/shell] Copiar o id do processo
[shell] # kill -9 [/shell] Cole o PID copiado para forçar a morte
[shell] # masterha_check_status --conf=/etc/app1.cnf # ls -l /var/log/masterha/app1/ [/shell] Exclua o arquivo de status se ele permanecer.

■Teste de Comutação MHA, Confirmação e Recuperação■

*Atualização de dados e teste de comutação são omitidos. É principalmente para verificar se o mestre foi descartado e comutado. Acho também uma boa ideia verificar ainda que ele não comute ao desligar o escravo.

(1) Teste de comutação
・Pré-verificação
[shell] # tail -f /var/log/masterha/app1/manager.log # masterha_check_status --conf=/etc/app1.cnf # ls -lh /var/log/masterha/app1/ # masterha_check_repl --conf=/etc/app1.cnf [/shell] ・Teste para dropar mysqld
No velho mestre
[shell] # serviço MySQL Parar # Serviço Status MySQL [/shell] Certifique-se de que MySQL seja parado

・Teste para eliminar a interface
No velho mestre
[shell] #ifdown eth1 #ifdown eth1:1 [/shell] ・ Teste para fechar a porta no mysqld
No velho mestre
[shell] # iptables -p entrada aceitar # iptables -A ENTRADA -p tcp --dport 3306 -j DROP # netstat -lnpt [/shell] Basicamente aceita todos os pacotes de entrada
Pacotes dropados destinados à porta TCP 3306
Verifique o fechamento da porta 3306

(2) Confirmação

・Verifique o status do gerente MHA
[shell] # tail -f /var/log/masterha/app1/manager.log # masterha_check_status --conf=/etc/app1.cnf # ls -lh /var/log/masterha/app1/ [/shell] Verifique se existe um arquivo de conclusão de troca chamado app1.failover.complete

・Verifique se o VIP foi trocado
Nos mestres antigo e novo
[shell] # ifconfig -a [/shell] Confirme que o VIP da atualização foi removido do mestre antigo e que o VIP da atualização foi transferido para o novo mestre
・Confirme que o escravo do novo mestre está parado e que o escravo está olhando para o novo mestre.
[sql] > mostrar o status de escravo\G [/sql] Certifique-se de que o escravo\\\_Running do novo mestre esteja definido como Não
Mestre de Escravos_Host: Garante que o novo mestre esteja enfrentando
[sql] > mostrar variáveis globais como 'ler_only'; [/sql] O novo mestre está desligado e pode ser atualizado.

  • Verificar se o peso do servidor LVS é o esperado (LVS01)
    [shell] # ipvsadm -L --sort # ls -la /etc/ha.d/ldirectord.cf* [/shell] YYYMMMMDD. Certifique-se de que os arquivos HHMM estejam salvos
    [shell] # diff /etc/ha.d/ldirectord.cf{,.failover} [/shell] Certifique-se de que não haja diffs (certifique-se de que o arquivo de failover seja sobrescrito com sucesso)

(3) Restauração da configuração

  • Iniciar o antigo mestre mysqld
    [shell] # netstat -lnpt # iniciar serviço mysqld # status serviço mysqld [/shell] ・iniciar a interface do mestre antigo (DB01)
    [shell] # ifup eth1 # ifconfig [/shell] ・Inicialize o bloco de portas do antigo mestre
    [shell] # service iptables restart # iptables -ln [/shell] ・Restaurar a configuração da replicação (*Se houver diferença de dados, você precisa despejar e inserir a diferença)
    No velho mestre
    [sql] # mysql -u root -p'cat /path_to_file' > reiniciar o mestre; > mostrar o status do mestre; > mostrar o status do escravo\G [/sql] no novo mestre e escravo
    [sql] # mysql -u root -p'cat /_to_file' > mostrar variáveis globais como 'read_only'; > definir leitura global_only=1; > parar o escravo; > resetar o escravo; > MUDAR MESTRE PARA MESTRE_HOST='192.168.100.1', MESTRE_USER='repl', MESTRE_PASSWORD='***', MASTER_LOG_FILE='mysql-bin.000001', MESTRE_LOG_POS=106; > iniciar escravo; > mostrar status do escravo\\G [/sql] ・Reverter para o peso do servidor LVS
    [shell] # ls -la /etc/ha.d/ldirectord.cf* [/shell] YYYMMMMDD. Confira o arquivo HHMM
    [shell] # mv /etc/ha.d/ldirectord.cf.YYYYMMDD.HHMM /etc/ha.d/ldirectord.cf [/shell] ・Apagar arquivos desnecessários
    [shell] # ls -lh /var/log/masterha/app1/ # rm -f /var/log/masterha/app1/app1.failover.complete # rm -f /var/log/masterha/app1/app1.failover.error # rm -f /var/log/masterha/app1/saved_master_binlog_from_192* [/shell] Exclua o arquivo comutado
    Exclua um arquivo de terminação de troca
    Exclua backups binários de logs de mestres antigos
    *Está desligado porque é um ambiente de exame.

・Substituição manual da renovação VIP
Novo Mestre
[shell] # ifdown eth1:0 # ifconfig eth1:0 [/shell] Certifique-se de que o IP não está anexado

Velho Mestre
[shell] #ifup eth1:0 #ifconfig eth1:0 [/shell] Certifique-se de que o IP está ligado
Se você estiver em uma VPC da AWS, não poderá acessá-la de fora sem mudar seu endereço privado na AWS.
ec2-unassign-endereços-ip-privados --interface-de-rede eni-7060xxxx --endereço-ip-privado-privado-secundário (PrivateIP)
ec2-assignar-endereços-ip-privados --interface-de-rede eni-4b64xxxx --endereço-ip-privado-privado-secundário (PrivateIP)

・Reiniciar o MHA Manager
Confirme
[shell] # masterha_check_repl --conf=/etc/app1.cnf # masterha_check_status --conf=/etc/app1.cnf [/shell] Start
[shell] # masterha_manager --conf=/etc/app1.cnf & # masterha_check_status --conf=/etc/app1.cnf # tail -f /var/log/masterha/app1/manager.log # ls -lh /var/log/masterha/app1/ [/shell] ・Se o gerenciador MHA permanecer no estado inicializado por muito tempo
[shell] # masterha_stop --conf=/etc/app1.cnf [/shell] Se esse comando falhar, force kill.
[shell] # masterha_check_status --conf=/etc/app1.cnf # ps -ef|grep master [/shell] Copie o ID do processo e especifique no comando kill
[shell] # matar -9 # masterha_check_status --conf=/etc/app1.cnf # ls -l /var/log/masterha/app1/ [/shell] Apague o arquivo de status se ele permanecer

・Se o gerente MHA estiver fora do ar e você quiser trocar manualmente o master (e VIP para renovação)
[shell] # masterha_master_switch --master_state=alive --conf=/etc/app1.cnf [/shell] *Vão me perguntar se realmente consigo fazer isso, então concordo. Se o gerente de MHA começar, vou ser repreendido para desistir.
(*VIP não muda a menos que você adicione processamento)
Por favor, veja aqui para detalhes

Se quiser trocar de VIP também, modifique da seguinte forma (por favor, compare a informação do IF ao ambiente)
[shell] ========================== 33,40d32 < my $vip = '192.168.0.245/24'; # Write Virtual IP < my $orig_master_host = "192.168.0.248"; < my $key = "0"; < 47c39 < my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down"; < my $new_master_host = "192.168.0.249"; < 'master_state=s' =>< my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip"; < my $ssh_user = "root"; \$master_state, --- > 'master_state=s' => \$master_state 50,58d41< # A simple system call that enable the VIP on the new master < sub start_vip() { ****< `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`; < sleep 1; < } < &start_vip(); < 72,76d54 < } < sleep 1; < } 80,84d57 < if ( $exit_code eq 0 ) { < if ( $exit_code eq 0 ) { < `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`; < &stop_vip(); < # A simple system call that disable the VIP on the old_master < &start_vip(); < &stop_vip(); < sub stop_vip() { < } ========================== [/shell] ・secondaryが生きているか確認

[shell] # masterha_secondary_check -s 192.168.0.249 --user=root --master_host=test-db02 --master_ip=192.168.0.245 --master_port=3306 [/shell] ※-sの後ろを追加すれば複数確認できる

■参考資料■
・MHAの動作フェーズ
[shell] # grep Phase manager.log |head -20|grep -v completed * Phase 1: Configuration Check Phase.. * Phase 2: Dead Master Shutdown Phase.. * Phase 3: Master Recovery Phase.. * Phase 3.1: Getting Latest Slaves Phase.. * Phase 3.2: Saving Dead Master's Binlog Phase.. * Phase 3.3: Determining New Master Phase.. * Phase 3.3: New Master Diff Log Generation Phase.. * Phase 3.4: Master Log Apply Phase.. * Phase 4: Slaves Recovery Phase.. * Phase 4.1: Starting Parallel Slave Diff Log Generation Phase.. * Phase 4.2: Starting Parallel Slave Log Apply Phase.. * Phase 5: New master cleanup phease.. [/shell]
フェイルオーバ時の動作は以下のとおり。(ログから追った動き)

※SQL処理のスレッド実行が終わった後
①config(/etc/app1.cnf)から各ノード情報を読み込む
②newMasterのVIPを停止する
③newMasteのmysqldを停止
④各Slaveリレーログを解析して次マスターの選出と差分位置を特定
⑤oldMasterにアクセス可能であればバイナリーログをローカルに(/var/log/masterha/app1)コピーする
⑥⑤で引き上げた最新のバイナリーログをnewMaster(/var/log/masterha/app1)にコピー
⑦oldMasterとの差分をnewMasterで更新
⑧newMasterにVIPを付与する
⑨newMasterのread-onlyを解除
⑩⑤で引き上げた最新のバイナリーログをnewSlave(/var/log/masterha/app1)にコピー
⑪oldMasterサーバとの差分をnewSlaveで更新
⑫newSlaveで最新のバイナリーログとrelayログとの差分を確認して適用
⑬newSlaveのMasterをoldMasterサーバからnewMasterサーバに変更しreplication再開
⑭managerにてapp1.failover.completeを/var/log/masterha/app1に出力してmasterha_managerを停止する

・エラーメッセージと意味

これはmanagerが2重に起動したときに出るログ。
Wed May 29 16:02:19 2013 - [error][/usr/lib/perl5/vendor_perl/MHA/ServerManager.pm, ln917]
Getting advisory lock failed on 10.0.0.86(10.0.0.86:3306). Maybe failover script or purge_relay_logs script is running on the same slave?
Wed May 29 16:02:19 2013 - [error][/usr/lib/perl5/vendor_perl/MHA/ManagerUtil.pm, ln178] Got ERROR:
at /usr/lib/perl5/vendor_perl/MHA/MasterFailover.pm line 305

これは完了ファイルがあるときのエラー
Fri May 24 11:46:01 2013 - [error][/usr/lib/perl5/vendor_perl/MHA/ManagerUtil.pm, ln178] Got ERROR:
at /usr/bin/masterha_manager line 65

以上。ご覧いただきありがとうございました!
MHA verificação de operação e verificação de troca Esta é a continuação do artigo anterior. Teste para comutar conforme mostrado no diagrama a seguir.

mha_after_failover  *Essa verificação consiste em 1 mestre, 2 escravos e 1 gerente. (A configuração em múltiplos estágios é evitada porque tornará a recuperação em caso de falha de um nó intermediário obsoleta)
  Se você deixar o escravo morar com o gerente, parece que a troca pode não ser boa se você colocar purge_relay_logs nele.
 *Parece que há casos em que só há duas unidades e a comutação não funciona bem. Veja abaixo.
  http://heartbeats.jp/hbblog/2013/05/mysql-mha-haproxy.html

(6) Checagem pré-partida

・Verifique o funcionamento do SSH
[shell] # masterha_check_ssh --conf=/etc/app1.cnf [/shell] Se estiver bem, o resultado final é o seguinte:
[shell] Ter 23 Out 15:02:22 2012 - [info] Todos os testes de conexão SSH foram aprovados com sucesso. [/shell]
・Verificando a operação da replicação
[shell] # masterha_check_repl --conf=/etc/app1.cnf [/shell] Se estiver OK, a saída final é a seguinte (*Do mysql 5.6, falha aqui, provavelmente porque há muitas mudanças no formato binário do log e outras alterações)
[shell] A Saúde da Replicação MySQL está OK. [/shell] *Padrão que falha
As regras de filtragem de replicação não estão corretas
Se o gerenciador LVS e MHA estiverem fazendo carpooling, o tempo de verificação se sobrepondrá e será rejeitado pelo servidor de banco de dados para cada host (esvaziar hosts;)

(7) Verifique o arquivo atualizado de VIP IF
DB01/DB02
[shell] cat /etc/sysconfig/network-scripts/ifcfg-eth1:0 ===================================================== # Intel Corporation 82576 Gigabit Network Connection DEVICE=eth0:0 BOOTPROTO=static BROADCAST=192.168.100.255 #HWADDR= IPADDR=192.168.100.5 NETMASK=255.255.255.0 NETWORK=192.168.100.0 ONPARENT=no ===================================================== [/shell] *No caso do IF virtual, ONPARENT=no é especificado porque ONBOOT não responde.

DB01
[shell] # ifup eth1:0 [/shell]
(8) Iniciar, confirmar e parar o Gerente de MHA

  • Gerente de Início
    [shell] # masterha_manager --conf=/etc/app1.cnf & [/shell] *Padrão que falha
    Configuração de replicação quebrada
    Já foi trocado e um arquivo de status mostrando a conclusão é impresso
    Tenha cuidado para não mudar bem se você olhar o log com cauda no terminal onde você iniciou o gerenciador.

  • Verificação de status do treinador
    [shell] # masterha_check_status --conf=/etc/app1.cnf [/shell] OK
    [shell] app1 (PID:9883) está rodando(0:PING_OK), master:192.168.100.1 [/shell]
    [shell] app1 é parado(2:NÃO_RUNNING). [/shell] No caso do status de inicialização imediatamente após a inicialização, ele é enviado assim.
    *Se esse estado continuar por muito tempo, uma eliminação de -9 pode exigir uma parada forçada.

・Suspensão dos treinadores
[shell] # masterha_stop --conf=/etc/app1.cnf

# masterha_check_status --conf=/etc/app1.cnf [/shell] ・Se o gerenciador não parar quando está no estado inicializado,
[shell] # ps -ef|grep master [/shell] Copiar o id do processo
[shell] # kill -9 [/shell] Cole o PID copiado para forçar a morte
[shell] # masterha_check_status --conf=/etc/app1.cnf # ls -l /var/log/masterha/app1/ [/shell] Exclua o arquivo de status se ele permanecer.

■Teste de Comutação MHA, Confirmação e Recuperação■

*Atualização de dados e teste de comutação são omitidos. É principalmente para verificar se o mestre foi descartado e comutado. Acho também uma boa ideia verificar ainda que ele não comute ao desligar o escravo.

(1) Teste de comutação
・Pré-verificação
[shell] # tail -f /var/log/masterha/app1/manager.log # masterha_check_status --conf=/etc/app1.cnf # ls -lh /var/log/masterha/app1/ # masterha_check_repl --conf=/etc/app1.cnf [/shell] ・Teste para dropar mysqld
No velho mestre
[shell] # serviço MySQL Parar # Serviço Status MySQL [/shell] Certifique-se de que MySQL seja parado

・Teste para eliminar a interface
No velho mestre
[shell] #ifdown eth1 #ifdown eth1:1 [/shell] ・ Teste para fechar a porta no mysqld
No velho mestre
[shell] # iptables -p entrada aceitar # iptables -A ENTRADA -p tcp --dport 3306 -j DROP # netstat -lnpt [/shell] Basicamente aceita todos os pacotes de entrada
Pacotes dropados destinados à porta TCP 3306
Verifique o fechamento da porta 3306

(2) Confirmação

・Verifique o status do gerente MHA
[shell] # tail -f /var/log/masterha/app1/manager.log # masterha_check_status --conf=/etc/app1.cnf # ls -lh /var/log/masterha/app1/ [/shell] Verifique se existe um arquivo de conclusão de troca chamado app1.failover.complete

・Verifique se o VIP foi trocado
Nos mestres antigo e novo
[shell] # ifconfig -a [/shell] Confirme que o VIP da atualização foi removido do mestre antigo e que o VIP da atualização foi transferido para o novo mestre
・Confirme que o escravo do novo mestre está parado e que o escravo está olhando para o novo mestre.
[sql] > mostrar o status de escravo\G [/sql] Certifique-se de que o escravo\\\_Running do novo mestre esteja definido como Não
Mestre de Escravos_Host: Garante que o novo mestre esteja enfrentando
[sql] > mostrar variáveis globais como 'ler_only'; [/sql] O novo mestre está desligado e pode ser atualizado.

  • Verificar se o peso do servidor LVS é o esperado (LVS01)
    [shell] # ipvsadm -L --sort # ls -la /etc/ha.d/ldirectord.cf* [/shell] YYYMMMMDD. Certifique-se de que os arquivos HHMM estejam salvos
    [shell] # diff /etc/ha.d/ldirectord.cf{,.failover} [/shell] Certifique-se de que não haja diffs (certifique-se de que o arquivo de failover seja sobrescrito com sucesso)

(3) Restauração da configuração

  • Iniciar o antigo mestre mysqld
    [shell] # netstat -lnpt # iniciar serviço mysqld # status serviço mysqld [/shell] ・iniciar a interface do mestre antigo (DB01)
    [shell] # ifup eth1 # ifconfig [/shell] ・Inicialize o bloco de portas do antigo mestre
    [shell] # service iptables restart # iptables -ln [/shell] ・Restaurar a configuração da replicação (*Se houver diferença de dados, você precisa despejar e inserir a diferença)
    No velho mestre
    [sql] # mysql -u root -p'cat /path_to_file' > reiniciar o mestre; > mostrar o status do mestre; > mostrar o status do escravo\G [/sql] no novo mestre e escravo
    [sql] # mysql -u root -p'cat /_to_file' > mostrar variáveis globais como 'read_only'; > definir leitura global_only=1; > parar o escravo; > resetar o escravo; > MUDAR MESTRE PARA MESTRE_HOST='192.168.100.1', MESTRE_USER='repl', MESTRE_PASSWORD='***', MASTER_LOG_FILE='mysql-bin.000001', MESTRE_LOG_POS=106; > iniciar escravo; > mostrar status do escravo\\G [/sql] ・Reverter para o peso do servidor LVS
    [shell] # ls -la /etc/ha.d/ldirectord.cf* [/shell] YYYMMMMDD. Confira o arquivo HHMM
    [shell] # mv /etc/ha.d/ldirectord.cf.YYYYMMDD.HHMM /etc/ha.d/ldirectord.cf [/shell] ・Apagar arquivos desnecessários
    [shell] # ls -lh /var/log/masterha/app1/ # rm -f /var/log/masterha/app1/app1.failover.complete # rm -f /var/log/masterha/app1/app1.failover.error # rm -f /var/log/masterha/app1/saved_master_binlog_from_192* [/shell] Exclua o arquivo comutado
    Exclua um arquivo de terminação de troca
    Exclua backups binários de logs de mestres antigos
    *Está desligado porque é um ambiente de exame.

・Substituição manual da renovação VIP
Novo Mestre
[shell] # ifdown eth1:0 # ifconfig eth1:0 [/shell] Certifique-se de que o IP não está anexado

Velho Mestre
[shell] #ifup eth1:0 #ifconfig eth1:0 [/shell] Certifique-se de que o IP está ligado
Se você estiver em uma VPC da AWS, não poderá acessá-la de fora sem mudar seu endereço privado na AWS.
ec2-unassign-endereços-ip-privados --interface-de-rede eni-7060xxxx --endereço-ip-privado-privado-secundário (PrivateIP)
ec2-assignar-endereços-ip-privados --interface-de-rede eni-4b64xxxx --endereço-ip-privado-privado-secundário (PrivateIP)

・Reiniciar o MHA Manager
Confirme
[shell] # masterha_check_repl --conf=/etc/app1.cnf # masterha_check_status --conf=/etc/app1.cnf [/shell] Start
[shell] # masterha_manager --conf=/etc/app1.cnf & # masterha_check_status --conf=/etc/app1.cnf # tail -f /var/log/masterha/app1/manager.log # ls -lh /var/log/masterha/app1/ [/shell] ・Se o gerenciador MHA permanecer no estado inicializado por muito tempo
[shell] # masterha_stop --conf=/etc/app1.cnf [/shell] Se esse comando falhar, force kill.
[shell] # masterha_check_status --conf=/etc/app1.cnf # ps -ef|grep master [/shell] Copie o ID do processo e especifique no comando kill
[shell] # kill -9 # masterha_check_status --conf=/etc/app1.cnf # ls -l /var/log/masterha/app1/ [/shell] Apague o arquivo de status se ele permanecer.

・Se o gerente MHA estiver fora do ar e você quiser trocar manualmente o master (e VIP para renovação)
[shell] # masterha_master_switch --master_state=alive --conf=/etc/app1.cnf [/shell] *Vão me perguntar se realmente consigo fazer isso, então concordo. Se o gerente de MHA começar, vou ser repreendido para desistir.
(*VIP não muda a menos que você adicione processamento)
Por favor, veja aqui para detalhes

Se quiser trocar de VIP também, modifique da seguinte forma (por favor, compare a informação do IF ao ambiente)
[shell] ========================== 33,40d32< my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip"; < my $key = "0"; < my $ssh_user = "root"; < my $new_master_host = "192.168.0.249"; < my $orig_master_host = "192.168.0.248"; < my $vip = '192.168.0.245/24'; # Write Virtual IP < 47c39 < my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down"; < 'master_state=s' => \$master_state, --- > 'master_state=s' => \$master_state 50,58d41 < # A simple system call that enable the VIP on the new master < sub start_vip() { < `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`; < } < # A simple system call that disable the VIP on the old_master < sub stop_vip() { < `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`; < } < 72,76d54 < if ( $exit_code eq 0 ) { < &stop_vip(); < sleep 1; < &start_vip(); < } 80,84d57 < if ( $exit_code eq 0 ) { < &stop_vip(); < sleep 1; < &start_vip(); < } ========================== [/shell] ・secondaryが生きているか確認

[shell] # masterha_secondary_check -s 192.168.0.249 --user=root --master_host=test-db02 --master_ip=192.168.0.245 --master_port=3306 [/shell] ※-sの後ろを追加すれば複数確認できる

■参考資料■
・MHAの動作フェーズ
[shell] # grep Phase manager.log |head -20|grep -v completed * Phase 1: Configuration Check Phase.. * Phase 2: Dead Master Shutdown Phase.. * Phase 3: Master Recovery Phase.. * Phase 3.1: Getting Latest Slaves Phase.. * Phase 3.2: Saving Dead Master's Binlog Phase.. * Phase 3.3: Determining New Master Phase.. * Phase 3.3: New Master Diff Log Generation Phase.. * Phase 3.4: Master Log Apply Phase.. * Phase 4: Slaves Recovery Phase.. * Phase 4.1: Starting Parallel Slave Diff Log Generation Phase.. * Phase 4.2: Starting Parallel Slave Log Apply Phase.. * Phase 5: New master cleanup phease.. [/shell]
フェイルオーバ時の動作は以下のとおり。(ログから追った動き)

※SQL処理のスレッド実行が終わった後
①config(/etc/app1.cnf)から各ノード情報を読み込む
②newMasterのVIPを停止する
③newMasteのmysqldを停止
④各Slaveリレーログを解析して次マスターの選出と差分位置を特定
⑤oldMasterにアクセス可能であればバイナリーログをローカルに(/var/log/masterha/app1)コピーする
⑥⑤で引き上げた最新のバイナリーログをnewMaster(/var/log/masterha/app1)にコピー
⑦oldMasterとの差分をnewMasterで更新
⑧newMasterにVIPを付与する
⑨newMasterのread-onlyを解除
⑩⑤で引き上げた最新のバイナリーログをnewSlave(/var/log/masterha/app1)にコピー
⑪oldMasterサーバとの差分をnewSlaveで更新
⑫newSlaveで最新のバイナリーログとrelayログとの差分を確認して適用
⑬newSlaveのMasterをoldMasterサーバからnewMasterサーバに変更しreplication再開
⑭managerにてapp1.failover.completeを/var/log/masterha/app1に出力してmasterha_managerを停止する

・エラーメッセージと意味

これはmanagerが2重に起動したときに出るログ。
Wed May 29 16:02:19 2013 - [error][/usr/lib/perl5/vendor_perl/MHA/ServerManager.pm, ln917]
Getting advisory lock failed on 10.0.0.86(10.0.0.86:3306). Maybe failover script or purge_relay_logs script is running on the same slave?
Wed May 29 16:02:19 2013 - [error][/usr/lib/perl5/vendor_perl/MHA/ManagerUtil.pm, ln178] Got ERROR:
at /usr/lib/perl5/vendor_perl/MHA/MasterFailover.pm line 305

これは完了ファイルがあるときのエラー
Fri May 24 11:46:01 2013 - [error][/usr/lib/perl5/vendor_perl/MHA/ManagerUtil.pm, ln178] Got ERROR:
at /usr/bin/masterha_manager line 65

以上。ご覧いただきありがとうございました!

Related Articles