MHA4MySQL 설치 가이드

Dong yeong Kim·2021년 11월 8일
0

DBMS

목록 보기
3/15

OS : CentOS 7.9 64bit

MySQL : 8.0.25 - commercial

1 Master : 1 Slave Replication

Server : Localhost


MHA?
Master DB가 장애로 서비스가 불가능한 상태가 되면, 자동으로 failover를 수행하여 slave DB를 master DB로 승격시켜, 서비스 다운타임을 최소화하는 auto failover 솔루션입니다.

MHA 구성
MHA Manager, Master, Slave 서버 총 3개가 기본 구성이며, 상황에 따라서는 1개의 Master와 N개의 Slave 최소 2대 까지 사용할 수 있습니다. (Active, StandBy 구조)

해당 포스트는 2대의 서버 구성입니다. (MHA Manager를 Slave 장비에 설치합니다.)

MHA 원리
MHA Manager가 n초마다 master DB에 Ping을 보내 이상 유무를 확인하며, 지정한 횟수 실패 시 장애로 인식하고 Failover를 수행합니다.

기존 MHA4MySQL 설치법과의 차이점
구글에 나와있는 대부분의 매뉴얼은 OS 계정 root로 진행하거나, 계정을 따로 만들어 진행합니다.

root로 구성 시, 보안성에 취약하다고 생각하며, MHA만을 위해 따로 계정을 만드는것은 불필요합니다.

그리하여, 데이터베이스의 기존 OS 계정(mysql)으로 진행합니다.

MHA의 FailOver
Master DB에 장애가 발생하면, MHA Manager는 Mater 장비의 VIP를 down 시킵니다.

이후 Replication 진행 후, down 시킨 VIP를 Slave 장비에서 올려 Failover를 진행합니다.

Replication 유저의 권한 추가사항
MHA가 수행되도록, replication slave 외의 아래의 권한을 추가합니다.

GRANT RELOAD, SUPER ON . TO 'mha'@'%' ;
GRANT SELECT ON mysql. TO 'mha'@'%';
GRANT ALL PRIVILEGES ON mysql.apply_diff_relay_logs TO 'mha'@'%';
GRANT ALL PRIVILEGES ON mysql.apply_diff_relay_logs_test TO 'mha'@'%';
GRANT REPLICATION SLAVE ON
.* to 'mha'@'%';
FLUSH PRIVILEGES;

MHA 기본 패키지 추가사항
의존성이 요구되는 perl 패키지를 제외, 기본적으로 서버(Minimal Server 기준)에 구성되어야 할 패키지는 아래와 같습니다.

createrepo
net-tools
epel-release
perl


1. MHA 의존성 패키지 설치 및 Manager, Node 설치

MHA 패키지를 설치하기 위해서는, 이에 관련된 의존성 패키지 설치가 필요합니다.

마찬가지로, 몇 개의 의존성 패키지는, 또 그에 관련된 의존성 패키지 설치가 필요합니다.

아래는, MHA 의존성 패키지와 관련된 이미지입니다. (반드시 순서대로 설치해야 원활하게 진행할 수 있습니다.)

이번 포스트는 온라인 레포지토리가 불가능한 폐쇄망을 기준으로, 의존성 패키지를 모두 가져와야 합니다. (폐쇄망이 아닐 경우, 온라인 레포지토리로 간단하게 설치하여 진행할 수 있습니다.)
설치 전, 기본적인 패키지가 필요합니다. (yum install perl createrepo)
Master, Slave 모두 수행

복잡한 의존성 패키지를 로컬 레포지토리를 생성하여, 의존성 순서에 관계없이 설치할 수 있습니다. (Dependency 파일은 공개하지 않습니다.)

OS에 기본적인 perl 패키지가 설치되었다고 가정, 아래 작업을 수행합니다. (yum install perl)


dependency.zip 파일을 압축 풀어 Master, Slave 서버에 업로드합니다. (포스트는 /tmp/에 저장하였습니다.)


1-1. 기존 레포지토리 문서를 backup합니다. (백업 전, createrepo 패키지가 없을 시, 설치합니다. - yum install createrepo)


1-2. Local.repo를 작성합니다.


1-3. createrepo로 dependency에 관한 repo를 생성합니다.


1-4. 만들어진 repository로 관련 의존성 패키지들을 설치합니다. (관련 패키지들이 의존성 여부를 고려해 자동으로 설치합니다.)

중략...


1-5. Master 서버는 MHA Node, Salve 서버는 MHA Manager과 Node 모두 설치합니다. (의존성에 따라 Node 설치 후 Manager 설치합니다.)


1-6. 백업한 repo 파일들을 기존 디렉토리(yum.repos.d)로 옮깁니다.


2. 서버 별 SSH 구성과 접속 테스트

MHA는 SSH를 기준으로 대상 서버에 접속해, binlog, Server Health Check 등을 진행합니다.

SSH 구성은, 상대 서버 뿐만 아니라, 자신 서버와도 SSH로 접근이 가능해야합니다. (Master, Slave 모두 수행)

2-1. root 계정으로 sshd_config 파일을 수정합니다. (public key로 ssh접근이 가능해야 하기 때문입니다.)

PubkeyAuthentication의 주석을 해제합니다. (/etc/ssh/sshd_config)


ssh 데몬을 재실행합니다. (systemctl restart sshd)


2-2. 'root'계정이 아닌, MHA를 수행할 'mysql'계정에 대해 SSH Key를 생성합니다.


2-3. id_rsa.pub 파일을 authorized_keys로 복사합니다.

sshd_config 파일을 살펴보겠습니다.

AuthorizedKeysFile의 기본값이, 홈 디렉토리의 .ssh 디렉토리 안에 'authorized_keys'파일로 저장되어 있습니다.

이것은, 임의로 작성한 것이 아닌, OS 기본 설정이므로, 똑같은 이름으로 key 파일을 생성합니다.


사실, 다른 서버의 접근을 위해서는 해당 서버 키를 authorized_keys에 입력할 필요가 없습니다, 하지만 MHA 수행에서는 해당 서버 또한 SSH로 접근이 가능해야합니다.


2-5. SSH 테스트를 수행합니다.

다른 서버 테스트는 물론, 자신의 호스트를 입력해 비밀번호 '없이' SSH 연결이 수행되는지 확인합니다.



VIP 생성

MHA의 autofailover를 위해, 각각 서버에 같은 VIP를 생성합니다. (마스터 슬레이브 모두 수행)

3.1 기존 IP 구성을 확인합니다. (/etc/sysconfig/network-scripts/ifcfg-[CableType]N)


해당 서버는, 정적 IP할당이 아닌, DHCP로 동적 IP를 할당받을 수 있음을 알 수 있고, 아이피는 192.168.79.129입니다.


3.2 기존 IP 구성을 복사해, VIP 구성 파일을 생성합니다. (ifcfg-[CableType]N:1)


3.3 충돌을 방지하기 위해, vip 구성 파일의 필수 정보만 남기고 제거합니다.

  • 불필요한 정보 제거
  • 미사용 IP를 IPADDR에 추가
  • NAME, DEVICE명 변경
  • ONBOOT 변경(no) - 부팅 시 해당 IP를 가져오지 않아야, 절체 과정 중 VIP UP, DOWN 할 수 있습니다.
  • 네트워크 재시작(systemctl restart network)

3.4 mysql 계정에 /sbin 권한을 추가합니다. (visudo)

VIP를 UP, DOWN 시키기 위해서는 sudo 권한이 필요합니다. 절체 과정을 mysql로 진행하는데, 유저가 sbin 디렉토리의 명령어 권한이 없을 경우, VIP 할당 혹은 다운이 불가능합니다.

visudo 명령을 입력해, sudo 권한 구성 파일을 엽니다.

가장 아래부분에, 아래와 같이 입력 후, 저장합니다.


→ mysql 유저가 비밀번호 없이 sbin 명령을 실행하도록 함


3-5. mysql 계정으로, VIP UP DOWN 테스트를 진행합니다.

ifup

ifdown


MasterCheck 스크립트 실행

MasterCheck 스크립트는 SSH체크와, Replication 체크를 진행해, 정상적으로 동작하는지 테스트합니다. (Manager에서 실행)

4.1 MHA 관련 디렉토리를 생성합니다.


4-2. MHA 구성 파일을 생성 후 작성합니다. (/etc/app1.cnf)

[server default]
log_level=debug
user=mha
password=123
ssh_user=mysql

#working directory on the manager
manager_workdir=/mha/manager

#manager log file
manager_log=/mha/log/mha.log

#working directory on MySQL servers
remote_workdir=/mha/remote

repl_user=mha
repl_password=123

master_binlog_dir=/mysql_data/log

#ping interval, 3 times trial
ping_interval=5

#custom scripts for master ip failover
master_ip_failover_script=/mha/scripts/master_ip_failover

#custom scripts for shutdown using fencing network custom script
#shutdown_script=/mha/scripts/power_manager

#custom scripts for manual master switch
master_ip_online_change_script=/mha/scripts/master_ip_online_change

[server1]
hostname=dydb1
port=3306
ignore_fail=1

[server2]
hostname=dydb2
port=3306
ignore_fail=1


4-3. 커스텀 스크립트를 작성합니다. (/mha/scripts)

master_ip_failover:


4-4. SSH과 Replication 상태를 확인합니다.

SSH :

Replication :

...중략


5. MHA Manager 실행 및 절체 테스트

5-1. MHA Manager을 실행합니다.


...중략


5-2. Master 서버에, VIP를 올리고 DB를 DOWN 합니다.

(MHA 로그)
...

→ 마스터 DB에 Ping을 지정한 횟수 만큼 보내고, 반응이 없자, Failover를 진행합니다.

중략...

절체가 완료됐습니다.

(기존 슬레이브 서버의 상태)

(절체 후)


5-2. VIP를 확인합니다.

(기존 Master VIP의 자동 DOWN)

(Slave VIP의 자동 UP)


profile
날 것의 기술 '불'로그

0개의 댓글