Print
카테고리: [ MariaDB ]
조회수: 22776

--.1 MHA란

 
-Master DB가 장애로 서비스가 불가능한 상태가 되면, 자동으로 failover를 수행하여
slave DB를 master DB로 승격시켜 서비스 다운타임을 최소화 하는 HA 모듈.
 
--동작 원리
 
 
1) 마스터DB 장애 발생 -> 두 대의 slave DB 중 가장 최신의 slave DB 탐색
2) 나머지 slave DB의 SQL thread가 relay log 를 모두 읽을 때 까지 대기
3) 이후 , 최신 slave DB와 비교 하여 값 적용
4) 장애가 발생한 master DB와 최신 slave DB 간의 binary log 적용
 
--최신 slave 찾는 방법

1)show slave status\G로 각 slave DB의 relay log를 확인
2)relay log에서 end_log_pos 값 비교
 
-- 사전준비사항
aws ec2 2대
VIP 
maria 10.0.28
mha 0.57 master 
mha 0.57 node
perl 설치
 

--2.master-slave replication 구성

1) vi /etc/hosts
 
## Master
52.78.108.151 ip-172-31-11-94  
## Slave, manager
52.78.212.75 ip-172-31-18-38
##VIP
52.78.212.77
 
 
2)master,slave my.cnf 수정
 
--master
### Replication set
##Master
server-id=1
## Slave
#server-id=2
relay-log=/logs001/masvc01/TEST/relay/relay-bin
#read_only=1
 
--slave
### Replication set
##Master
#server-id=1
## Slave
server-id=2
relay-log=/logs001/masvc01/TEST/relay/relay-bin
read_only=1
 
Master DB는 server-id 1, slave는 server-id 2를 사용,
slave DB는 read_only=1 옵션을 줘서 dml이 불가능하도록 설정함
 
 
 
3)replication 계정생성 (master,slave 모두)
 
 create user 'repliUser'@'%' identified by 'test';
 grant replication slave, replication client on *.* to repliUser;
 flush privileges;
 ->repliUser 계정을 통해 master DB에서 slave DB로 데이터를 가져옴
 
 
4)replication master 등록 및 기동
 
--master 
MariaDB [(none)]> show master status\G;
*************************** 1. row ***************************
            File: mysql-bin.000011
        Position: 1165
    Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
 
--slave
change master to
master_host='52.78.108.151',
master_user='repliUser',
master_password='test',
master_port=3310,
master_log_file='mysql-bin.000011',
master_log_pos=1165,
master_connect_retry=10;
 
 start slave;
 show slave status\G;
 

 
 
 
 

--3. MHA 설치

 
1) mhauser 생성 및 ssh key 설정
 
ssh-keygen -t rsa 로 공개키 생성 뒤
각 node의 id_rsa.pub 의 내용을 다른 node의 authorized_keys 에 복사하여 추가
vi /home/mhauser/.ssh/id_rsa.pub
 
 
SSH KEY 등록 후 SSH TEST
 
2) ifconfig 수행을 위한 mhauser sudo 권한 설정 (vip 할당 하기 위해 필요)
##mhauser
mhauser ALL=(ALL) NOPASSWD:/sbin/ifconfig, /usr/sbin/pcs
 
3)mha node 설치 (1번 , 2번 서버 모두)
 
 tar -zxvpf mha4mysql-node-0.57.tar.gz
 cd mha4mysql-node-0.57
 perl Makefile.PL
 make
 make install
 
3-2) mha manager 설치 (2번서버만)
 
 tar -zxvpf mha4mysql-manager-0.57.tar.gz
 cd mha4mysql-node-0.57
 perl Makefile.PL
 make
 make install
 
 
 3-3) mha directory 생성
 
mkdir -p /engn001/mha/bin   --> 자주 사용 되는 스크립트
mkdir -p /logs001/mha  -->mha manager 로그
chown -R mhauser:mysql /engn001/mha /logs001/mha
 
3-4) mha.cnf 설정
 
3-5) MHA 스크립트 생성
 
1)change_virtual_ip_master_to_slave.sh -> vip 전환 (master to slave)
 
#!/bin/sh
ssh 이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다. sudo /sbin/ifconfig eth0:0 down
ssh 이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다. sudo /sbin/ifconfig eth0:0 52.78.212.77 up
ssh 이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다. /sbin/arping -c3 -D -I eth0 -s 52.78.212.77 52.78.212.77
 
1)change_virtual_ip_slave_to_master.sh -> vip 전환 (master to slave)
 
#!/bin/sh
ssh 이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다. sudo /sbin/ifconfig eth0:0 down
ssh 이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다. sudo /sbin/ifconfig eth0:0 52.78.212.77 netmask 255.255.255.0 broadcast 10.185.217.255 up
ssh 이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다. /sbin/arping -c3 -D -I eth0 -s 52.78.212.77 52.78.212.77
 
 
3)master_ip_failover 
 cp /engn001/mha4mysql-manager-0.57/samples/scripts/master_ip_failover /engn001/mha/bin
 vi /engn001/mha/bin/master_ip_failover
위에서 생성한 vip 전환 스크립트를 수행하도록 구문 추가
 
4)master_ip_online_change
 cp /engn001/mha4mysql-manager-0.57/samples/scripts/master_ip_failover /engn001/mha/bin
 vi /engn001/mha/bin/master_ip_online_change
 
5)mha_start.sh
su - mhauser -c 'nohup /engn001/mha4mysql-manager-0.57/bin/masterha_manager --conf=/etc/mha.cnf --ignore_last_failover < /dev/null > /logs001/mha/mha.log 2>&1 &'
 
masterha_manager는 포어그라운드에서 실행되기 때문에 nohup으로 기동시켜야함
 
 
3.6) MHA Manager script 확인
 
1)masterha_check_ssh -> manager 와 DB 서버 간의 SSH 접속 가능 확인
 
2)masterha_check_repl -> DB서버 간의 replication check
 
3)masterha_manager -> MHA manager 기동, master서버의 상태가 비정상일 때 자동 페일오버 시도
4)masterha_stop -> MHA manager 중단
5)masterha_master_switch ->수동으로 master->slave failover 수행
 
 

--4. masterha_manager 기동 후 Failover Test

1) mha manager 기동
 
2) Failover 전 master DB 확인 
->master DB에선 show slave status가 확인되지 않으며, read_only off 로 설정한 상태
 
 
2-1) Failover 전 slave DB 확인
->slave DB는 read_only on 으로 설정한 상태
 
 
3) Master DB shutdown 장애 발생
 
 
4) Failover 후, slave DB가 master DB로 승격된 것 확인 
 
 
5) Failover 로그 확인 (mha.log)
 
--1. master DB Down 확인
 
 
 
--2. 위의 동작원리에서 살펴본 최신 slave DB 탐색 과정
 
 
--3. master DB의 최신 binary log를 최신 slave DB에 적용
 
 
--4. Failover 확인