노드 | 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
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
이 다음과 같은 상태여야 함.
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
mkdir /mha/scripts cp /source/mha4mysql-manager-0.57/samples/scripts/master_ip_online_change /mha/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();
/etc/mha.cnf
수정 (master_ip_online_change 파일 경로 추가)[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
cp /source/mha4mysql-manager-0.57/samples/scripts/master_ip_failover /mha/scripts/
/mha/scripts/master_ip_failover
수정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;
/etc/mha.cnf
수정 (Failover 스크립트 설정)[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