詳細検索

MHA 작동 및 전환 검증

아바타
글쓴이 komi

MHA 작동 및 전환 검증
日本語에서 번역 • 원문 보기

MHA 작동 확인 및 스위칭 검증 이전 글의 연장선입니다. 아래 그림에 나와 같이 스위칭 테스트를 진행합니다.

mha_after_failover  *이 검증은 1개의 마스터, 2개의 슬레이브, 1개의 관리자로 구성됩니다. (중간 노드 고장 시 복구가 매우 어려워지기 때문에 다단계 구성을 피합니다)
  노예를 관리자와 함께 살게 두면, 퍼지_relay_logs을 적용하면 전환이 잘 안 될 것 같습니다.
 *두 유닛만 있고 스위칭이 잘 안 되는 경우도 있는 것 같습니다. 아래를 참조하세요.
  http://heartbeats.jp/hbblog/2013/05/mysql-mha-haproxy.html

(6) 사전 시작 점검

・SSH 작동 상태 확인해
[shell] # masterha_check_ssh --conf=/etc/app1.cnf [/shell] 괜찮으시면 최종 출력은 다음과 같습니다:
[shell] 2012년 10월 23일 화요일 15:02:22 - [정보] 모든 SSH 연결 테스트가 성공적으로 통과했습니다. [/shell]
・복제 동작 확인
[shell] # masterha_check_repl --conf=/etc/app1.cnf [/shell] 괜찮다면 최종 출력은 다음과 같습니다 (*mysql5.6부터는 MHA 버전에 따라 binlog-checksum=NONE으로 설정하지 않으면 실패할 수 있습니다).
[shell] MySQL 복제 건강은 정상입니다. [/shell] *실패하는 패턴
복제 필터링 규칙은 올바르지 않습니다
LVS와 MHA 관리자가 카풀 중이라면, 체크 타이밍이 겹치고 각 호스트별로 DB 서버에서 거부됩니다(플러시 호스트;)

(7) 최신 VIP IF 파일 확인
DB01/DB02
[shell] cat /etc/sysconfig/network-scripts/ifcfg-eth1:0 ===================================================== # 인텔 코퍼레이션 82576 기가비트 네트워크 연결 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] *가상 IF의 경우, ONBOOT가 응답하지 않으므로 ONPARENT=no가 지정됩니다.

DB01
[shell] # 이걸 에스1:0 [/shell]
(8) MHA 매니저의 시작, 확인, 중단

  • 스타트 매니저
    [shell] # masterha_manager --conf=/etc/app1.cnf & [/shell] *실패하는 패턴
    복제 구성이 깨졌습니다
    이미 전환되었고 완료 상태를 보여주는 상태 파일이 인쇄되어 있습니다
    터미널에서 매니저를 시작한 로그에서 꼬리 로그를 볼 때는 잘 전환하지 않도록 조심하세요.

  • 관리자 상태 확인
    [shell] # masterha_check_status --conf=/etc/app1.cnf [/shell] 좋아
    [shell] app1 (PID:9883) 실행 중(0:PING_OK), 마스터:192.168.100.1 [/shell]
    [shell] app1은 stopped(2:NOT_RUNNING). [/shell] 시작 직후 초기화 상태의 경우, 그대로 출력됩니다.
    *이 상태가 오래 지속될 경우, -9의 킬은 강제 정지가 필요할 수 있습니다.

·감독 정직
[shell] # 마스터하_stop --conf=/etc/app1.cnf

# masterha_check_status --conf=/etc/app1.cnf [/shell] ·관리자가 초기화 상태에서 멈추지 않으면,
[shell] # ps -ef|grep master [/shell] 프로세스 ID 복사
[shell] # 킬 -9 [/shell] 복사한 PID를 붙여넣어 강제 죽임을
[shell] # masterha_check_status --conf=/etc/app1.cnf # ls -l /var/log/masterha/app1/ [/shell] 상태 파일이 남아 있으면 삭제하세요.

■MHA 스위칭 테스트 및 확인 및 회복 ■

*데이터 업데이트와 스위칭 테스트는 생략되었습니다. 주로 마스터가 드롭되고 스위칭되었는지 확인하는 것입니다. 슬레이브를 드롭해서 스위칭이 되지 않는지도 추가로 확인하는 것이 좋다고 생각합니다.

(1) 스위칭 테스트
‧사전 점검
[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] ·MySQLd 드롭 테스트
옛 주인님 앞에서
[shell] # 서비스 mysqld 정지 # 서비스 mysqld 상태 [/shell] mysqld 정지 확인

・인터페이스 해제 테스트
옛 주인님 앞에서
[shell] #ifdown eth1 #ifdown eth1:1 [/shell] · mysqld에서 포트 닫기 테스트
옛 주인님 앞에서
[shell] # iptables -P 입력 수락 # iptables -A INPUT -p tcp --dport 3306 -j DROP # netstat -inpt [/shell] 기본적으로 모든 인바운드 패킷을 수락합니다
TCP 포트 3306으로 향하는 패킷 드롭
포트 3306이 닫혔는지 확인하세요

(2) 견진성

・MHA 관리자 상태 확인해
[shell] # tail -f /var/log/masterha/app1/manager.log # masterha_check_status --conf=/etc/app1.cnf # ls -lh /var/log/masterha/app1/ [/shell] app1.failover.complete라는 전환 완료 파일의 존재를 확인하세요

・VIP가 바뀌었는지 확인해
옛 거장들과 새 거장 사이에서
[shell] # ifconfig -a [/shell] 업데이트 VIP가 이전 마스터에서 제거되었고, 업데이트 VIP가 새 마스터로 이전되었는지 확인하세요
·새 주인의 노예가 멈춰 있고 노예가 새 주인을 바라보고 있는지 확인해.
[sql] > 슬레이브 상태 표시\G [/sql] 새 마스터의 슬레이브_*_Running가 '아니오'로 설정되어 있는지 확인하세요
노예 주인_Host: 새 주인이 마주하게 만드는 것
[sql] > 'read_only'와 같은 전역 변수를 표시합니다; [/sql] 새 마스터는 꺼져 있으며 업데이트가 가능합니다.

  • LVS 서버의 가중값이 예상 범위 (LVS01) 정상인지 검증
    [shell] # ipvsadm -L --정렬 # is -la /etc/ha.d/ldirectord.cf* [/shell] YYYYMMDD. HHMM 파일이 백업되었는지 확인하세요
    [shell] # diff /etc/ha.d/ldirectord.cf{,.failover} [/shell] diff가 없는지 확인하세요 (failover 파일이 성공적으로 덮어쓰였는지 확인하세요)

(3) 구성 복원

  • 구마스터 mysqld 시작
    [shell] # netstat -lnpt # 서비스 mysqld 시작 # 서비스 mysqld 상태 [/shell] ・구 마스터 인터페이스 시작 (DB01)
    [shell] # ifup eth1 # ifconfig [/shell] ·구 마스터의 포트 블록을 초기화하세요
    [shell] # 서비스 iptables 재시작 # iptables -inn [/shell] ·복제 설정 복원 (*데이터 차이가 있으면 덤프하고 차이를 입력해야 함)
    옛 주인님 앞에서
    [sql] # mysql -u 루트 -p'cat /path_to_file' > 리셋 마스터; > 마스터 상태 표시; > 새 마스터와 슬레이브에서 슬레이브 상태 \G [/sql] 표시
    [sql] # mysql -u root -p'cat /path_to_file' > 'read_only' 같은 전역 변수를 표시; > 전역 read_only=1을 설정; > 슬레이브 중지; 슬레이브 리셋>; > 마스터를 마스터로 변경_HOST='192.168.100.1', MASTER_USER='repl', MASTER_PASSWORD='***', MASTER_LOG_FILE='mysql-bin.0000001', MASTER_LOG_POS=106; > 슬레이브 시작; > 슬레이브 상태 표시\\G [/sql] ·LVS 서버의 가중치로 되돌립니다
    [shell] # is-la /etc/ha.d/ldirectord.cf* [/shell] YYYYMMDD. HHMM 파일 확인해
    [shell] # mv /etc/ha.d/ldirectord.cf.YYYYMMDD.HHMM /etc/ha.d/ldirectord.cf [/shell] ·불필요한 파일 삭제
    [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] 스위치된 파일을 삭제하세요
    전환 종료 파일을 삭제하세요
    오래된 마스터의 바이너리 로그 백업을 삭제하세요
    *시험 환경이기 때문에 꺼져 있습니다.

·갱신 VIP 수동 교체
새로운 주인
[shell] # ifdown eth1:0 # ifconfig eth1:0 [/shell] IP가 연결되어 있지 않은지 확인하세요

노선생님
[shell] #ifup eth1:0 #ifconfig eth1:0 [/shell] IP가 켜져 있는지 확인해
AWS VPC에 연결되어 있다면, AWS에서 개인 주소를 변경하지 않고는 외부에서 접근할 수 없습니다.
ec2-unassign-private-ip-addresses --network-interface eni-7060xxxx --secondary-private-ip-address (PrivateIP)
ec2-assign-private-ip-addresses --network-interface eni-4b64xxxx --secondary-private-ip-address (PrivateIP)

・MHA 매니저 재시작
확인해
[쉘] # 마스터하_check_repl --conf=/etc/app1.cnf # 마스터하_check_status --conf=/etc/app1.cnf [/shell] 시작
[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] ·MHA 매니저가 초기화 상태를 오래 유지할 경우
[shell] # masterha_stop --conf=/etc/app1.cnf [/shell] 이 명령이 실패하면 강제 죽임.
[shell] # masterha_check_status --conf=/etc/app1.cnf # ps -ef|grep master [/shell] 프로세스 ID를 복사하고 킬 명령어에 명시하세요
[쉘] # 죽여 -9 # masterha_check_status --conf=/etc/app1.cnf # ls -l /var/log/masterha/app1/ [/shell] 상태 파일이 남아 있으면 삭제하세요

・MHA 매니저가 다운되어 마스터(및 VIP)를 수동으로 전환하고 싶을 때,
[shell] # masterha_master_switch --master_state=살아있음 --conf=/etc/app1.cnf [/shell] *정말 할 수 있냐고 물어볼 테니 동의합니다. MHA 매니저가 시작한다면, 혼날 거예요.
(*VIP는 처리 처리를 추가하지 않으면 전환하지 않습니다)
자세한 내용은 여기를 참고하세요

VIP도 전환하고 싶다면, 다음과 같이 수정하세요(IF 정보를 환경에 맞게 지정해 주세요).
[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 운영 검증 및 전환 검증 이전 기사의 연속입니다. 다음 도표에 표시된 대로 전환 테스트를 해보세요.

mha_after_failover  *이 검증은 1개의 마스터, 2개의 슬레이브, 1개의 관리자로 구성됩니다. (중간 노드 고장 시 복구가 매우 어려워지기 때문에 다단계 구성을 피합니다)
  노예를 관리자와 함께 살게 두면, 퍼지_relay_logs을 적용하면 전환이 잘 안 될 것 같습니다.
 *두 유닛만 있고 스위칭이 잘 안 되는 경우도 있는 것 같습니다. 아래를 참조하세요.
  http://heartbeats.jp/hbblog/2013/05/mysql-mha-haproxy.html

(6) 사전 시작 점검

・SSH 작동 상태 확인해
[shell] # masterha_check_ssh --conf=/etc/app1.cnf [/shell] 괜찮으시면 최종 출력은 다음과 같습니다:
[shell] 2012년 10월 23일 화요일 15:02:22 - [정보] 모든 SSH 연결 테스트가 성공적으로 통과했습니다. [/shell]
・복제 동작 확인
[shell] # masterha_check_repl --conf=/etc/app1.cnf [/shell] 괜찮다면 최종 출력은 다음과 같습니다 (*mysql 5.6에서 실패한 경우, 아마도 이진 로그 형식 및 기타 변경이 많아서 실패)
[shell] MySQL 복제 건강은 정상입니다. [/shell] *실패하는 패턴
복제 필터링 규칙은 올바르지 않습니다
LVS와 MHA 관리자가 카풀 중이라면, 체크 타이밍이 겹치고 각 호스트별로 DB 서버에서 거부됩니다(플러시 호스트;)

(7) 최신 VIP IF 파일 확인
DB01/DB02
[shell] cat /etc/sysconfig/network-scripts/ifcfg-eth1:0 ===================================================== # 인텔 코퍼레이션 82576 기가비트 네트워크 연결 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] *가상 IF의 경우, ONBOOT가 응답하지 않으므로 ONPARENT=no가 지정됩니다.

DB01
[shell] # 이걸 에스1:0 [/shell]
(8) MHA 매니저의 시작, 확인, 중단

  • 스타트 매니저
    [shell] # masterha_manager --conf=/etc/app1.cnf & [/shell] *실패하는 패턴
    복제 구성이 깨졌습니다
    이미 전환되었고 완료 상태를 보여주는 상태 파일이 인쇄되어 있습니다
    터미널에서 매니저를 시작한 로그에서 꼬리 로그를 볼 때는 잘 전환하지 않도록 조심하세요.

  • 관리자 상태 확인
    [shell] # masterha_check_status --conf=/etc/app1.cnf [/shell] 좋아
    [shell] app1 (PID:9883) 실행 중(0:PING_OK), 마스터:192.168.100.1 [/shell]
    [shell] app1은 stopped(2:NOT_RUNNING). [/shell] 시작 직후 초기화 상태의 경우, 그대로 출력됩니다.
    *이 상태가 오래 지속될 경우, -9의 킬은 강제 정지가 필요할 수 있습니다.

·감독 정직
[shell] # 마스터하_stop --conf=/etc/app1.cnf

# masterha_check_status --conf=/etc/app1.cnf [/shell] ·관리자가 초기화 상태에서 멈추지 않으면,
[shell] # ps -ef|grep master [/shell] 프로세스 ID 복사
[shell] # 킬 -9 [/shell] 복사한 PID를 붙여넣어 강제 죽임을
[shell] # masterha_check_status --conf=/etc/app1.cnf # ls -l /var/log/masterha/app1/ [/shell] 상태 파일이 남아 있으면 삭제하세요.

■MHA 스위칭 테스트 및 확인 및 회복 ■

*데이터 업데이트와 스위칭 테스트는 생략되었습니다. 주로 마스터가 드롭되고 스위칭되었는지 확인하는 것입니다. 슬레이브를 드롭해서 스위칭이 되지 않는지도 추가로 확인하는 것이 좋다고 생각합니다.

(1) 스위칭 테스트
‧사전 점검
[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] ·MySQLd 드롭 테스트
옛 주인님 앞에서
[shell] # 서비스 mysqld 정지 # 서비스 mysqld 상태 [/shell] mysqld 정지 확인

・인터페이스 해제 테스트
옛 주인님 앞에서
[shell] #ifdown eth1 #ifdown eth1:1 [/shell] · mysqld에서 포트 닫기 테스트
옛 주인님 앞에서
[shell] # iptables -P 입력 수락 # iptables -A INPUT -p tcp --dport 3306 -j DROP # netstat -inpt [/shell] 기본적으로 모든 인바운드 패킷을 수락합니다
TCP 포트 3306으로 향하는 패킷 드롭
포트 3306이 닫혔는지 확인하세요

(2) 견진성

・MHA 관리자 상태 확인해
[shell] # tail -f /var/log/masterha/app1/manager.log # masterha_check_status --conf=/etc/app1.cnf # ls -lh /var/log/masterha/app1/ [/shell] app1.failover.complete라는 전환 완료 파일의 존재를 확인하세요

・VIP가 바뀌었는지 확인해
옛 거장들과 새 거장 사이에서
[shell] # ifconfig -a [/shell] 업데이트 VIP가 이전 마스터에서 제거되었고, 업데이트 VIP가 새 마스터로 이전되었는지 확인하세요
·새 주인의 노예가 멈춰 있고 노예가 새 주인을 바라보고 있는지 확인해.
[sql] > 슬레이브 상태 표시\G [/sql] 새 마스터의 슬레이브_*_Running가 '아니오'로 설정되어 있는지 확인하세요
노예 주인_Host: 새 주인이 마주하게 만드는 것
[sql] > 'read_only'와 같은 전역 변수를 표시합니다; [/sql] 새 마스터는 꺼져 있으며 업데이트가 가능합니다.

  • LVS 서버의 가중값이 예상 범위 (LVS01) 정상인지 검증
    [shell] # ipvsadm -L --정렬 # is -la /etc/ha.d/ldirectord.cf* [/shell] YYYYMMDD. HHMM 파일이 백업되었는지 확인하세요
    [shell] # diff /etc/ha.d/ldirectord.cf{,.failover} [/shell] diff가 없는지 확인하세요 (failover 파일이 성공적으로 덮어쓰였는지 확인하세요)

(3) 구성 복원

  • 구마스터 mysqld 시작
    [shell] # netstat -lnpt # 서비스 mysqld 시작 # 서비스 mysqld 상태 [/shell] ・구 마스터 인터페이스 시작 (DB01)
    [shell] # ifup eth1 # ifconfig [/shell] ·구 마스터의 포트 블록을 초기화하세요
    [shell] # 서비스 iptables 재시작 # iptables -inn [/shell] ·복제 설정 복원 (*데이터 차이가 있으면 덤프하고 차이를 입력해야 함)
    옛 주인님 앞에서
    [sql] # mysql -u 루트 -p'cat /path_to_file' > 리셋 마스터; > 마스터 상태 표시; > 새 마스터와 슬레이브에서 슬레이브 상태 \G [/sql] 표시
    [sql] # mysql -u root -p'cat /path_to_file' > 'read_only' 같은 전역 변수를 표시; > 전역 read_only=1을 설정; > 슬레이브 중지; 슬레이브 리셋>; > 마스터를 마스터로 변경_HOST='192.168.100.1', MASTER_USER='repl', MASTER_PASSWORD='***', MASTER_LOG_FILE='mysql-bin.0000001', MASTER_LOG_POS=106; > 슬레이브 시작; > 슬레이브 상태 표시\\G [/sql] ·LVS 서버의 가중치로 되돌립니다
    [shell] # is-la /etc/ha.d/ldirectord.cf* [/shell] YYYYMMDD. HHMM 파일 확인해
    [shell] # mv /etc/ha.d/ldirectord.cf.YYYYMMDD.HHMM /etc/ha.d/ldirectord.cf [/shell] ·불필요한 파일 삭제
    [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] 스위치된 파일을 삭제하세요
    전환 종료 파일을 삭제하세요
    오래된 마스터의 바이너리 로그 백업을 삭제하세요
    *시험 환경이기 때문에 꺼져 있습니다.

·갱신 VIP 수동 교체
새로운 주인
[shell] # ifdown eth1:0 # ifconfig eth1:0 [/shell] IP가 연결되어 있지 않은지 확인하세요

노선생님
[shell] #ifup eth1:0 #ifconfig eth1:0 [/shell] IP가 켜져 있는지 확인해
AWS VPC에 연결되어 있다면, AWS에서 개인 주소를 변경하지 않고는 외부에서 접근할 수 없습니다.
ec2-unassign-private-ip-addresses --network-interface eni-7060xxxx --secondary-private-ip-address (PrivateIP)
ec2-assign-private-ip-addresses --network-interface eni-4b64xxxx --secondary-private-ip-address (PrivateIP)

・MHA 매니저 재시작
확인해
[쉘] # 마스터하_check_repl --conf=/etc/app1.cnf # 마스터하_check_status --conf=/etc/app1.cnf [/shell] 시작
[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] ·MHA 매니저가 초기화 상태를 오래 유지할 경우
[shell] # masterha_stop --conf=/etc/app1.cnf [/shell] 이 명령이 실패하면 강제 죽임.
[shell] # masterha_check_status --conf=/etc/app1.cnf # ps -ef|grep master [/shell] 프로세스 ID를 복사하고 킬 명령어에 명시하세요
[shell] # kill -9 # masterha_check_status --conf=/etc/app1.cnf # ls -l /var/log/masterha/app1/ [/shell] 상태 파일이 남아 있으면 삭제하세요.

・MHA 매니저가 다운되어 마스터(및 VIP)를 수동으로 전환하고 싶을 때,
[shell] # masterha_master_switch --master_state=살아있음 --conf=/etc/app1.cnf [/shell] *정말 할 수 있냐고 물어볼 테니 동의합니다. MHA 매니저가 시작한다면, 혼날 거예요.
(*VIP는 처리 처리를 추가하지 않으면 전환하지 않습니다)
자세한 내용은 여기를 참고하세요

VIP도 전환하고 싶다면, 다음과 같이 수정하세요(IF 정보를 환경에 맞게 지정해 주세요).
[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