목차

MariaDB 10, MHA Replication 구성

사전 준비 환경

노드 IP Role
MHA Manager Server 192.168.0.150 (mgr)
Master DB Server 192.168.0.151 (masterdb)
Slave DB Server 192.168.0.152 (slavedb01)

기본 패키지 설치 (모든 서버에서)

yum install epel-release -y
yum install net-tools sysstat wget lrzsz lsof htop iftop rsync bzip2 unzip patch syslog -y​
yum -y install epel perl-devel perl-CPAN perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Module-Install​

MariaDB Master / Slave 구성

service mysql start​
mysql_secure_installation

  Enter current password for root (enter for none): enter
  Set root password? [Y/n] y
  Remove anonymous users? [Y/n] y
  Disallow root login remotely? [Y/n] n
  Remove test database and access to it? [Y/n] n
  Reload privilege tables now? [Y/n] y
shell >> mysql -uroot -p

mysql >> show global variables like '%dir%';

  base: /usr
  datadir: /var/lib/mysql/
create user 'rep'@'%' identified by 'rep';
grant replication slave on *.* to 'rep';
flush privileges;
grant all privileges on *.* to 'mha'@'%' identified by 'mha';
flush privileges;​
mysql >> exit

shell >> service mysql stop
vi /etc/my.cnf.d/server.cnf

# Master DB Server에서
[mariadb]
server_id=1
log-bin=mysql-bin

# Slave DB Server에서
[mariadb]
server_id=2
log-bin=mysql-bin
read_only=1
relay_log_purge=0
service mysql start​
show master status;

change master to
master_host='192.168.0.151', 
master_user='rep', 
master_password='rep', 
master_port=3306, 
master_log_file='mysql-bin.000005',
master_log_pos=342,
master_connect_retry=10;

start slave;

show slave status\G;

Slave_IO_State, Slave_IO_Running, Slave_SQL_Running이 다음과 같은 상태여야 함.

MHA 설치

mkdir /mha
useradd -g mysql -d /home/mhauser -m -s /bin/bash mhauser

passwd mhauser
mhauser

chown -R mhauser:mysql /mha
mkdir /source
cd /source

wget http://cliel.com/data/mha4mysql-node-0.57.tar.gz
tar xvzf mha4mysql-node-0.57.tar.gz

cd /source/mha4mysql-node-0.57
perl Makefile.PL
make
make install
cpan YAML
perl -MCPAN -e "install File::Remove"
perl -MCPAN -e "install Build"
perl -MCPAN -e "install Module::Install"  
perl -MCPAN -e "install Net::Telnet"
perl -MCPAN -e "install Log::Dispatch"

cd /source
wget http://cliel.com/data/mha4mysql-manager-0.57.tar.gz
tar xvzf mha4mysql-manager-0.57.tar.gz

cd /source/mha4mysql-manager-0.57
perl Makefile.PL
make
make install
visudo

# 맨 아래에 추가
mhauser ALL = (ALL) NOPASSWD:/sbin/ifconfig

각 서버에서 다른 서버들에게 공개키를 줘야 함. (MHA Manager → Master DB, Slave DB / Master DB → Slave DB, MHA Manager / Slave DB → MasterDB, MHA Manager)

키 생성 :
	su - mhauser
	ssh-keygen -t rsa [엔터 3번]

키 복사 :
	ssh-copy-id -i ~/.ssh/id_rsa.pub mhauser@192.168.56.151
	ssh-copy-id -i ~/.ssh/id_rsa.pub mhauser@192.168.56.152

연결 테스트 :
	ssh 192.168.56.151
	ssh 192.168.56.152
su - mhauser
cd .ssh
chmod 400 authorized_keys
vi .bash_profile 에 아래 내용 추가

set -o vi
alias sshcheck='/usr/local/bin/masterha_check_ssh --conf=/etc/mha.cnf'
alias replcheck='/usr/local/bin/masterha_check_repl --conf=/etc/mha.cnf'
alias start='/usr/local/bin/masterha_manager --conf=/etc/mha.cnf &'
alias stop='/usr/local/bin/masterha_stop --conf=/etc/mha.cnf'
alias status='/usr/local/bin/masterha_check_status --conf=/etc/mha.cnf'
alias log='tail -f /mha/manager.log'

저장 후
source .bash_profile
cp /source/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/mha.cnf

vi /etc/mha.cnf

[server default]
user=mha
password=mha1122

ssh_user=mhauser

repl_user=rep
repl_password=rep1122

manager_workdir=/mha
manager_log=/mha/manager.log
remote_workdir=/mha

master_binlog_dir=/var/lib/mysql

[server1]
hostname=192.168.0.151
candidate_master=1

[server2]
hostname=192.168.0.152
candidate_master=1

설정 확인

sshcheck

replcheck

Slave IP <=> Master IP 변경 스크립트 설정

 
mkdir /mha/scripts

cp /source/mha4mysql-manager-0.57/samples/scripts/master_ip_online_change /mha/scripts/master_ip_online_change

150, 151, 152, 245, 246, 247, 248 라인에 주석 추가

:set number
:150

    149       ## Drop application user so that nobody can connect. Disabling per-session binlog beforehand
    150       # $orig_master_handler->disable_log_bin_local();
    151       # print current_time_us() . " Drpping app user on the orig master..\n";
    152       # FIXME_xxx_drop_app_user($orig_master_handler);

:245

    244       ## Creating an app user on the new master
    245       # print current_time_us() . " Creating app user on the new master..\n";
    246       # FIXME_xxx_create_app_user($new_master_handler);
    247       # $new_master_handler->enable_log_bin_local();
    248       # $new_master_handler->disconnect();

[server default]
user=mha
password=mha

ssh_user=mhauser

repl_user=rep
repl_password=rep1122

manager_workdir=/mha
manager_log=/mha/manager.log

remote_workdir=/mha

master_binlog_dir=/var/lib/mysql

master_ip_online_change_script=/mha/scripts/master_ip_online_change   

[server1]
hostname=192.168.0.151
candidate_master=1

[server2]
hostname=192.168.0.152
candidate_master=1

Failover 스크립트 설정

cp /source/mha4mysql-manager-0.57/samples/scripts/master_ip_failover /mha/scripts/

87, 88, 89, 90, 93 라인 주석 처리

:set number
:87

     86       ## Creating an app user on the new master
     87       # print "Creating app user on the new master..\n";
     88       # FIXME_xxx_create_user( $new_master_handler->{dbh} );
     89       # $new_master_handler->enable_log_bin_local();
     90       # $new_master_handler->disconnect();
     91
     92       ## Update master ip on the catalog database, etc
     93       # FIXME_xxx;
[server default]
user=mha
password=mha1122

ssh_user=mhauser

repl_user=rep
repl_password=rep1122

manager_workdir=/mha

manager_log=/mha/manager.log

remote_workdir=/mha

master_binlog_dir=/var/lib/mysql

master_ip_online_change_script=/mha/scripts/master_ip_online_change
master_ip_failover_script=/mha/scripts/master_ip_failover

[server1]
hostname=192.168.0.151
candidate_master=1

[server2]
hostname=192.168.0.152
candidate_master=1

참조링크