DB & AWS Knowledge
MMM 구성 방법 본문
728x90
반응형
- 개요 (참고 출처: https://mysql-mmm.org/mmm2_guide.html / http://blog.naver.com/jevida/221791972812)
- MMM 테스트 구성을 위해서 아래의 서버를 미리 준비한다. 보통 인터넷에서 일반 기본구성은 2 master 1 slave 로 구성하지만 이 자료에서는 2 master 만 구성한다.
- OS : CentOS7 / DB : MySQL 5.7 을 기준으로 구성한다.
- MMM 테스트 구성을 위해서 아래의 서버를 미리 준비한다. 보통 인터넷에서 일반 기본구성은 2 master 1 slave 로 구성하지만 이 자료에서는 2 master 만 구성한다.
Host | IP | VIP | Role |
master | 192.168.0.11 | Monitoring | |
worker1 | 192.168.0.12 | 192.168.0.102 | Master 1 |
worker2 | 192.168.0.13 | 192.168.0.103 | Master 2 |
-
- Write VIP : 192.168.0.101 (서버간 연결 시 추가 추성
- 서버의 역할은 아래와 같다.
- Write VIP : 192.168.0.101 (서버간 연결 시 추가 추성
IP | Role | Description |
192.168.0.101 | writer | App 이 DB write 를 위해서 접근하는 IP |
192.168.0.102 | reader | App 이 DB read 를 위헤서 접근하는 IP |
192.168.0.103 | reader |
- 각 서버 간의 제한된 성능 spec 이 없으므로 자신이 실제로 사용할 서버의 spec 은 상황에 맞게 임의로 구성한다. (해당 자료는 각 서버당 cpu 2 core, mem 4G 로 설정)
- 구성방법
- 먼저 각 서버별로 VIP 를 구성해줘야 한다. 아래와 같이 network-script 에 있는 ifcfg-eth0 을 복사 후 vi 로 파일을 수정해준다. (eth0 대신 현재 서버에서 다른 이더넷 명칭을 사용 한다면 해당 이름의 파일을 복사.
- 먼저 각 서버별로 VIP 를 구성해줘야 한다. 아래와 같이 network-script 에 있는 ifcfg-eth0 을 복사 후 vi 로 파일을 수정해준다. (eth0 대신 현재 서버에서 다른 이더넷 명칭을 사용 한다면 해당 이름의 파일을 복사.
$> cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:1
$> vi /etc/sysconfig/network-scripts/ifcfg-eth0:1
-
- 파일을 들어간 후 아래의 내용으로 기존내용을 수정한다. 각 서버별로 할당하려고 하는 VIP 로 수정한다.
(서버별로 static 또는 dhcp 인지 확인 후 그에 맞게 네트워크 환경을 구성 후 변경)
- 파일을 들어간 후 아래의 내용으로 기존내용을 수정한다. 각 서버별로 할당하려고 하는 VIP 로 수정한다.
IPADDR=192.168.0.102
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
-
- 수정 후, service network restart 또는 /etc/init.d/network restart 로 네트워크를 재시작한다. 그 후 ifconfig 를 통하여 아래 예시와 같이 vip (eth0:1) 도 구동 되는지 확인한다.
- 수정 후, service network restart 또는 /etc/init.d/network restart 로 네트워크를 재시작한다. 그 후 ifconfig 를 통하여 아래 예시와 같이 vip (eth0:1) 도 구동 되는지 확인한다.
-
- 그 후, worker1, worker2 서버에 MySQL 을 설치한다. (yum, tar package 상관없음)
- 그 후, 각 MySQL 서버들에 있는 my.cnf 에 binlog 및 relay log 내용을 추가한다.
(Replication 응용 기술이기에 binlog 설정을 통한 Replication 환경 구성, 파일 적재 및 기본 datadir 등의 디렉토리는 임의로 조절)
- 그 후, worker1, worker2 서버에 MySQL 을 설치한다. (yum, tar package 상관없음)
[mysqld]
basedir=/mysql/mysql-5.7.31-el7-x86_64
datadir=/mysqldata
socket=/tmp/mysql.sock
#server_id 는 각 서버별로 반드시 다르게 배정
server_id = 1
log_bin = /mysqldata/mysql-bin.log
log_bin_index = /mysqldata/mysql-bin.log.index
relay_log = /mysqldata/mysql-relay-bin
relay_log_index = /mysqldata/mysql-relay-bin.index
expire_logs_days = 10
max_binlog_size = 100M
log_slave_updates = 1
#auto_increment_increment 는 Master 의 서버대수 만큼 설정
auto_increment_increment = 2
#auto_increment_offset 은 각 서버별로 고유 숫자로 설정하되 auto_increment_increment 보다 작거나 숫자로 설정. 미설정 시, 각 server 의 ID 로 자동 설정
#고유값 설정은 Multimaster Replication 구성 시, 각 서버간의 auto_increment 증가 숫자에 대한 충돌을 피하기 위함임. auto_increment_offset = 1
#외부에서 접근을 허용하도록 bind-address 는 0.0.0.0 으로 설정
bind-address = 0.0.0.0
-
- 실제 설정 예시
- 실제 설정 예시
-
- 해당 파라미터 추가 후 재시작을 통하여 해당 파라미터들이 적용되도록 한다.
- 그 후, worker1 DB 접속 후, 아래와 같은 형식으로 계정을 만들어준다.
- 해당 파라미터 추가 후 재시작을 통하여 해당 파라미터들이 적용되도록 한다.
GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'192.168.0.%' IDENTIFIED BY 'monitor_password';
GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'192.168.0.%' IDENTIFIED BY 'agent_password';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.0.%' IDENTIFIED BY 'replication_password';
-
- 이제 각 서버간의 Replication 을 위해서는 서버간의 데이터 동기화가 필요하므로 Write 를 사용할 Master 서버에서 dump 파일을 받아야한다. 이를 위해서 외부접근을 통한 데이터 변경을 임시로 막기 위해서 테이블들을 잠근다. 그 후, 해당 서버의 binlog 작성 position 을 확인 한다.
- 이제 각 서버간의 Replication 을 위해서는 서버간의 데이터 동기화가 필요하므로 Write 를 사용할 Master 서버에서 dump 파일을 받아야한다. 이를 위해서 외부접근을 통한 데이터 변경을 임시로 막기 위해서 테이블들을 잠근다. 그 후, 해당 서버의 binlog 작성 position 을 확인 한다.
(worker1) mysql> FLUSH TABLES WITH READ LOCK;
(worker1) mysql> show master status;
+--------------------+----------+----------------+--------------------+--------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+--------------------+----------+----------------+--------------------+--------------------+
| mysql-bin.000005 | 3522 | | | |
+--------------------+----------+----------------+--------------------+--------------------+
1 row in set (0.00 sec)
- mysqldump 를 받기 위해 해당 서버에서 새로운 세션을 열어서 dump 를 받는다.
(기존 세션 종료 후 받을 시 Lock 이 풀리기 때문)
- mysqldump 를 받기 위해 해당 서버에서 새로운 세션을 열어서 dump 를 받는다.
(worker1) $ mysqldump -u root -p --all-databases > /tmp/database-backup.sql
-
- dump 가 끝나면 Lock 을 수행한 세션으로 돌아가 Lock 을 해제한다.
- dump 가 끝나면 Lock 을 수행한 세션으로 돌아가 Lock 을 해제한다.
(worker1) mysql> UNLOCK TABLES;
-
- SCP 를 통하여 dump 를 다른서버 (worker2) 에 전송한다. (<user> 는 mysql 을 설치 할 때 사용한 계정 사용을 권장한다.)
- SCP 를 통하여 dump 를 다른서버 (worker2) 에 전송한다. (<user> 는 mysql 을 설치 할 때 사용한 계정 사용을 권장한다.)
(worker1) scp /tmp/database-backup.sql <user>@192.168.0.13:/tmp
-
- 그 후 worker2 서버에서 DB dump 를 import 한 후, 아래 명령어를 통하여 worker1 에서 받은 MySQL 내 DB 접근 유저 정보가 갱신 되도록 한다.
- 그 후 worker2 서버에서 DB dump 를 import 한 후, 아래 명령어를 통하여 worker1 에서 받은 MySQL 내 DB 접근 유저 정보가 갱신 되도록 한다.
(worker2) $mysql -u root -p < /tmp/database-backup.sql 2(worker2) mysql> FLUSH PRIVILEGES;
-
- 설정이 끝났다면, worker2 가 worker1 과 Replication 연결이 되도록 설정한다. <file>,<position> 은 위의 show master status 의 정보를 이용한다. 설정 후, start slave 를 통하여 slave 동기화 연결이 되도록 한다.
- 설정이 끝났다면, worker2 가 worker1 과 Replication 연결이 되도록 설정한다. <file>,<position> 은 위의 show master status 의 정보를 이용한다. 설정 후, start slave 를 통하여 slave 동기화 연결이 되도록 한다.
(worker2) mysql> CHANGE MASTER TO master_host='192.168.0.12', master_port=3306, master_user='replication',
master_password='replication_password', master_log_file='<file>', master_log_pos=<position>;
(worker2) mysql> start slave;
-
- worker2 에서 아래와 같이 연결이 된 상태인지 확인 한다.
-
- 연결이 정상적으로 되었다면 이제 worker1 이 worker2에 slave 로 붙을 차례다. worker2 에서 Binlog 동기화 상태를 확인한다.
- 연결이 정상적으로 되었다면 이제 worker1 이 worker2에 slave 로 붙을 차례다. worker2 에서 Binlog 동기화 상태를 확인한다.
(worker2) mysql> show master status;
+--------------------+----------+----------------+--------------------+---------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+--------------------+----------+----------------+--------------------+---------------------+
| mysql-bin.000002 | 843089 | | | |
+--------------------+----------+----------------+--------------------+---------------------+
1 row in set (0.00 sec)
-
- worker1 에서도 worker2 에서 했던 연결 명령어를 동일하게 사용하여 연결 해 준다.
그리고 위와 같이 연결 상태를 확인한다.
- worker1 에서도 worker2 에서 했던 연결 명령어를 동일하게 사용하여 연결 해 준다.
-
- 이제 MMM 을 설치전에 해당 프로세스를 사용할 유저를 만든다. (mmmd 혹은 사용할 유저 명) 다만 기존 유저 사용을 원한다면 만들지 않아도 된다.
- 이제 MMM 을 설치전에 해당 프로세스를 사용할 유저를 만든다. (mmmd 혹은 사용할 유저 명) 다만 기존 유저 사용을 원한다면 만들지 않아도 된다.
(master) useradd --comment "MMM Script owner" --shell /sbin/nologin mmmd
-
- 아래의 명령어로 MMM 을 설치한다. (Monitor, Agent 간 설치 대상 확인)
- CentOS 기준
- 아래의 명령어로 MMM 을 설치한다. (Monitor, Agent 간 설치 대상 확인)
(master) yum -y install mysql-mmm-monitor
(worker1,2) yum -y install mysql-mmm-agent (차후 서버간 역할 변경도 고려 한다면 모든서버 일괄 설치)
yum -y install mysql-mmm-*
-
- Ubuntu 기준
- Ubuntu 기준
2.1. 의존성 패키지 설치
(master) aptitude install liblog-log4perl-perl libmailtools-perl liblog-dispatch-perl libclass-singleton-perl libproc-daemon-perl libalgorithm-diff-perl libdbi-perl libdbd-mysql-perl
2.2. Agent 설치
(master) dpkg -i mysql-mmm-common_*.deb mysql-mmm-agent_*.deb
(master) dpkg -i mysql-mmm-common_*.deb mysql-mmm-agent_*.deb
-
- vi /etc/mysql-mmm/mmm_common.conf 를 열면 아래와 같은 양식이 있다. 해당 구성 가이드는 아래 기준으로 내용을 기입했다.
(Password 는 위에서 MMM DB 계정 생성 시 지정했던 패스워드로 기입)
(role writer 의 ips 는 위의 서버 정보에서 사용 하려한 VIP 를 기입한다.)
- vi /etc/mysql-mmm/mmm_common.conf 를 열면 아래와 같은 양식이 있다. 해당 구성 가이드는 아래 기준으로 내용을 기입했다.
active_master_role writer
<host default>
cluster_interface eth0
pid_path /var/run/mmmd_agent.pid
bin_path /usr/lib/mysql-mmm.html
replication_user replication
replication_password replication_password
agent_user mmm_agent
agent_password agent_password
</host>
<host db1>
ip 192.168.0.11
mode master
peer db2
</host>
<host db2>
ip 192.168.0.12
mode master
peer db1
</host>
<host db3>
ip 192.168.0.13
mode slave
</host>
<host db4>
ip 192.168.0.14
mode slave
</host>
<role writer>
hosts db1, db2
ips 192.168.0.100
mode exclusive
</role>
<role reader>
hosts db1, db2, db3, db4
ips 192.168.0.101, 192.168.0.102, 192.168.0.103, 192.168.0.104
mode balanced
</role>
(해당 기입 내용은 monitor, agent 구분없이 모든 서버에 적용시켜야 한다.)
-
- worker1,2 서버에서 vi /etc/mysql-mmm/mmm_agent.conf 를 열어서 아래와 같이 내용을 기입한다.
- worker1,2 서버에서 vi /etc/mysql-mmm/mmm_agent.conf 를 열어서 아래와 같이 내용을 기입한다.
(worker1)
include mmm_common.conf
this worker1
(worker2)
include mmm_common.conf
this worker2
-
- master 서버에서 vi /etc/mysql-mmm/mmm_mon.conf 를 열면 아래와 같은 양식이 나온다. 아래 화면과 같이 설정한 값들로 기입한다.
- master 서버에서 vi /etc/mysql-mmm/mmm_mon.conf 를 열면 아래와 같은 양식이 나온다. 아래 화면과 같이 설정한 값들로 기입한다.
include mmm_common.conf
<monitor>
ip 127.0.0.1
pid_path /var/run/mmmd_mon.pid
bin_path /usr/lib/mysql-mmm.html
status_path /var/lib/misc/mmmd_mon.status
ping_ips 192.168.0.1, 192.168.0.11, 192.168.0.12, 192.168.0.13, 192.168.0.14
</monitor>
<host default>
monitor_user mmm_monitor
monitor_password monitor_password
</host>
debug 0
- 위와 같이 구성 후 각 서버들이 재기동 후에도 monitor, agent 가 자동으로 구동되도록 enable 명령어를 입력한다. (각 서버별 해당 프로세스 구성을 한 유저를 사용)
- 위와 같이 구성 후 각 서버들이 재기동 후에도 monitor, agent 가 자동으로 구동되도록 enable 명령어를 입력한다. (각 서버별 해당 프로세스 구성을 한 유저를 사용)
(monitor) systemctl enable mysql-mmm-monitor
(worker1) systemctl enable mysql-mmm-agent
(worker2) systemctl enable mysql-mmm-agent
-
- 그 후. 각각의 프로세스들을 기동시킨다. (각 서버별 해당 프로세스 구성을 한 유저를 사용)
- 그 후. 각각의 프로세스들을 기동시킨다. (각 서버별 해당 프로세스 구성을 한 유저를 사용)
(monitor) systemctl start mysql-mmm-monitor
(worker1) systemctl start mysql-mmm-agent
(worker2) systemctl start mysql-mmm-agent
-
- 프로세스들을 구동시키면 monitor 서버 (master) 에서 mmm_control show 를 통하여 각 서버간에 연결이 아래와 같이 (ONLINE) 되었는지 확인한다. (각 서버별의 역할을 조절했다면 아래와 다른 role 로 나올 수 있다.)
-
- mmm_control checks all 을 통하여 각 서버간 MMM 관련 세션들의 정상여부를 파악한다.
- mmm_control checks all 을 통하여 각 서버간 MMM 관련 세션들의 정상여부를 파악한다.
-
- 이 상태에서 세션들의 role 을 바꿀수도 있다. 아래의 명령어를 사용하면 위의 role 이 바뀌어 있는 것을 확인 할 수 있다.
- 이 상태에서 세션들의 role 을 바꿀수도 있다. 아래의 명령어를 사용하면 위의 role 이 바뀌어 있는 것을 확인 할 수 있다.
(monitor) mmm_control move_role writer worker2
반응형
'MySQL > H.A (High Availability)' 카테고리의 다른 글
갈레라 클러스터 구성 방법 (0) | 2021.03.04 |
---|---|
갈레라 클러스터 개요 (0) | 2021.03.04 |
MHA 구성 방법 (0) | 2021.03.04 |
MHA 개요 (0) | 2021.03.03 |
MMM 개요 (0) | 2021.03.03 |
Comments