--.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 확인