MySQL MMM 구성 (Centos7 + MySQL 8.0)

 

·       Version : MySQL 8.0.XX, Centos 7

 

MySQL MMM(MySQL Multi-Master) 구성하는 방법에 대해서 살펴본다. 이번 포스트에서는 MMM 구성에 대해서만 다루므로 MySQL 설치 Master-Slave 구성은 다른 글을 참고할 있도록 한다.

 

MMM구성에 관한 글을 찾아보면 대부분 Centos6 기반의 환경에서 설치된 글을 많이 있다. 필자의 경우 Centos7 환경에서 구성을 진행하였는데, Centos7 버전에서는 공식 가이드 문서에서 제공하는 코드와 조금 다르게 디렉터리 경로가 바뀐 부분이 있어 처음 설치시 오류가 발생하였다. 디렉터리 PATH 대한 설정 값을 수정하고 정상 작동확인한 내용을 정리하였다.

 

서버 구성

Host

IP

VIP

Role

DevMMM-Witness

192.168.0.1

 

Monitoring

DevMySQLMMM-1

192.168.0.2

192.168.0.102

Master 1

DevMySQLMMM-2

192.168.0.3

192.168.0.103

Master 2

 

·       Write VIP : 192.168.0.101

 

MNM 구성

·       MMM Monitor : MMM Agent 서버의 상태를 체크하고 상태에 따라 역할(reader, writer) 변경,관리

·       MMM Agent : MMM 에서 reader, writer 역할을 하는 구성원

·       MMM VIP : 유동적으로 writer 마스터 역할을 변경할 있도록 writer 구성하는 virtual IP

·       역할구성 : master역할을 있는 writer후보자들은는 두개로 구성하고, 나머지는 slave 역할만 하도록 구성

 

 

DevMMM-Witness

DevMySQLMMM-1

DevMySQLMMM-2

MMM 사용할 계정 생성

 

CREATE USER 'mmm_monitor'@'%' IDENTIFIED BY 'PASSWORD';

CREATE USER 'mmm_agent'@'%' IDENTIFIED BY 'PASSWORD';

 

GRANT ALL PRIVILEGES on *.* TO'mmm_monitor'@'%';

GRANT ALL PRIVILEGES on *.* TO'mmm_agent'@'%';

 

FLUSH PRIVILEGES;

 

호스트에 사용자 계정 추가

 

useradd --comment "MMM Script owner" --shell /sbin/nologin mmmd

 

MMM 설치

sudo yum install mysql-mmm mysql-mmm-monitor

sudo yum install mysql-mmm mysql-mmm-agent

sudo yum install mysql-mmm mysql-mmm-agent

mmm_common.conf 설정

sudo vi /etc/mysql-mmm/mmm_common.conf

 

아래 설정 입력

active_master_role          writer

 

<host default>

        cluster_interface eth0

        pid_path /run/mysql-mmm-agent.pid

        bin_path /usr/libexec/mysql-mmm/

        replication_user repluser

        replication_password PASSWORD

        agent_user mmm_agent

        agent_password PASSWORD

</host>

 

<host DevMySQLMMM-1>

        ip 192.168.0.2

        mode master

        peer DevMySQLMMM-2

              mysql_port 3306

</host>

 

 

<host DevMySQLMMM-2>

        ip 192.168.0.3

        mode master

        peer DevMySQLMMM-1

              mysql_port 3306

</host>

 

<role writer>

        hosts DevMySQLMMM-1, DevMySQLMMM-2

        ips 192.168.0.101

        mode exclusive

</role>

 

<role reader>

        hosts DevMySQLMMM-1,DevMySQLMMM-2

        ips 192.168.0.102,192.168.0.103

        mode balanced

</role>

mmm_agent.conf 설정

 

sudo vi /etc/mysql-mmm/mmm_agent.conf

 

아래 설정 입력

include mmm_common.conf

this DevMySQLMMM-1

sudo vi /etc/mysql-mmm/mmm_agent.conf

 

아래 설정 입력

include mmm_common.conf

this DevMySQLMMM-2

mmm_mon.conf 설정

sudo vi /etc/mysql-mmm/mmm_mon.conf

 

아래 설정 입력

include mmm_common.conf

 

<monitor>

    ip                  127.0.0.1

    pid_path            /run/mysql-mmm-monitor.pid

    bin_path            /usr/libexec/mysql-mmm/

    status_path         /var/lib/mysql-mmm/mmm_mond.status

    ping_ips            192.168.0.2,192.168.0.2

    auto_set_online     60

</monitor>

 

<host default>

    monitor_user        mmm_monitor

    monitor_password    PASSWORD

</host>

debug 0

 

 

부팅시 자동 시작 등록

sudo systemctl enable mysql-mmm-monitor

sudo systemctl enable mysql-mmm-agent

sudo systemctl enable mysql-mmm-agent

MMM 시작

sudo systemctl start mysql-mmm-monitor

sudo systemctl start mysql-mmm-agent

sudo systemctl start mysql-mmm-agent

 

MMM동작 확인

·       sudo mmm_control show

·       sudo mmm_control checks all

 

·       Role Change (Run as Monitor)

sudo mmm_control move_role writer DevMySQLMMM-1

 

 

MMM Troubleshooting

MMM 서비스 아래와 같이 ADMIN OFFLINE 표시한 경우 아래 명령어 실행

 

mmm_control set_online mysqltest-2

 

 

[참고자료]

·       https://mysql-mmm.org/mmm2_guide.html

 

 

2020-01-31 / Sungwook Kang / http://sungwookkang.com

 

MySQL, MMM, MySQL 복제, MySQL 이중화, MySQL Multi Master, 멀티마스터 복제, HA, Database 이중화, DBA

MySQL/MariaDB Replication 모니터링

 

·      Version : MySQL 5.7, Docker

 

MySQL Replication 기본적으로 비동기 방식의 복제 매커니즘이다.  그래서 Master DB Slave DB 간에 동기화 지연이 발생하면 데이터에 데한 차이가 발생하고 서비스에 영향이 있을 수도 있다.

 

·       MySQL 복제 구축 : http://sqlmvp.kr/220383304252

·       MySQL Replication Architecture : https://www.slideshare.net/SvenSandberg/oracle-openworld-2013-hol9737-mysqlreplicationbestpractices


 

슬레이브DB 대한 복제 상태를 확인하는데 가장 많이 사용되는 명령은 show slave status 명령이다. 많은 정보가 나타나지만 기본적으로 복제 서비스 상태가 정상인지 확인하는 항목은 IO스레드 동작상태를 나타내는 Slave_IO_Running SQL 스레드 동작 상태를 나타내는 Slave_SQL_Running 이다. Yes 정상 상태이고 No이면 비정상 상태이다.

show slave status;

 


출처  :https://www.techjini.com/wp-content/uploads/2009/11/screenshot.png

 

항목에 대해 자세하게 살펴보자.

Variable Name

Comments

Slave_IO_State

IO 스레드의 동작 상태

Master_Host

슬레이브 DB 접속한 마스터 DB 호스트 주소

Master_User

슬레이브 DB 마스터 DB 접속한 계정명

Master_Port

슬레이브DB 마스터 DB 접속한 포트번호

Connect_Retry

접속이 끊어졌을때 재시도 하는 시간(), 기본값 60. CHANGE MASTER TO 구문으로 설정 가능.

Master_Log_File

IO 스레드가 현재 읽고 있는 마스터DB 바이너리 로그 파일명

Read_Master_Log_Pos

IO 스레드가 현재 읽고 있는 마스터DB바이너리 로그 파일의 로그 포지션

Relay_Log_File

SQL 스레드가 최종적으로 읽고 실행한 슬레이브 DB 릴레이 로그 파일명

Relay_Log_Pos

SQL 스레드가 최종적으로 읽고 실행한 슬레이브 DB 릴레이 로그 파일의 포지션

Relay_Master_Log_File

Relay_Log_File 값으로 나타나는 릴레이 로그 파일과 연관된 마스터DB 바이너리 로그 파일명

Salve_IO_Running

IO 스레드가 실행되고 마스터 DB 정상적으로 접속됬는지 나타냄.

Slave_SQL_Running

SQL 스레드가 작동하고 있는지 여부. Yes 또는 No 표시됨

Replicate_Do_DB

옵션(replicate_do_db) 명시된 MySQL 데이터베이스 리스트

Replicate_Ignore_DB

옵션(replicate_Ignore_db) 명시된 MySQL 데이터베이스 리스트

Replicate_Do_Table

옵션(replicate_do_Table) 명시된 MySQL 테이블 리스트

Replicate_Ignore_Table

옵션(replicate_Ignore_Table) 명시된 MySQL 테이블 리스트

Replicate_Wild_To_Table

옵션(replicate_Wild_To_Table) 명시된 MySQL 테이블 리스트

Replicate_Wild_Ignore_Table

옵션(replicate_Wild_Ignore_Table) 명시된 MySQL 테이블 리스트

Last_Errno

Last_SQL_Errno 같은

Last_Error

Last_SQL_Error 같은 .

Skip_Counter

시스템 변수인 sql_slave_skip_counter 현재 값을 나타냄

Exec_Master_Log_Pos

SQL 스레드가 읽고 처리한 현재 마스터DB 바이너리 로그 파일의 포지션으로 다음 번에 수행될 트랜잭션이나 이벤트의 시작을 표시

Relay_Log_Space

존재하는 모든 릴레이 로그 파일의 크기를 합한

Until_Condition

마스터DB 바이너리 로그 파일 또는 슬레이드 DB 릴레이 로그 파일의 특정 부분까지만 실행하고자 사용하는 옵션

Until_Log_File

SQL 스레드가 실행하다가 중단시킬 로그파일의 이름

Until_Log_Pos

SQL 스레드가 실행하다가 중단시킬 로그파일의 포지션

Master_SSL *

슬레이브DB 마스터DB 연결할 사용되는 SSL 관련된 파라메터

Second_Behind_Master

슬레이브DB Replicaton  속도가 느린지를 나타내는 . 0이면 Replication 완료된 것이며 0보다 경우 Replication 데이터가 남아있는것으로 느린것이다.(Lag 발생한것이다.)

 

 

[참고자료]

https://dev.mysql.com/doc/refman/5.6/en/show-slave-status.html

 

 

2018-04-17 / 강성욱 / http://sqlmvp.kr / http://sqlangeles.com

 

MySQL,복제 모니터터링, Replication monitoring, show slave status, DB복제, MySQL 복제


'MySQL, MariaDB' 카테고리의 다른 글

MySQL/MariaDB Sort 모니터링  (0) 2019.03.24
MySQL/MariaDB Select 모니터링  (0) 2019.03.24
Run the MySQL with Docker  (0) 2019.03.24
MySQL/MariaDB Handler 모니터링  (0) 2019.03.24
MySQL/MariaDB Connection 모니터링  (0) 2019.03.24

MySQL/MariaDB 복제구축

 

  • Version : Mariadb 5.5.4.2-WinX64

 

MySQL/MariaDB 복제구축 방법에 대해서 알아본다. 복제를 구축하기 위해서는 최소 2대의 서버가 준비되어 있어야 한다.

 

[복제 구축 전 준비 사항]

  • MySQL/MariaDB는 설치되어 있는가?
  • 복제에 사용할 포트는 열려 있는가? (기본 포트 3306)
  • Slave에서 사용할 계정은 생성되어 있는가?
  • 바이너리 로그는 활성화 되어 있는가?
  • Master, Slave의 Server-id는 고유한가?

 

이번 실습에서는 Master 서버의 호스트명이 'KSW_2012_2' 이며 포트는 Master, Slave 모두 기본 포트 3306을 사용하였다.

 

[복제 설정 준비]

복제를 구축하기 전에 복제에 사용할 수 있도록 바이너리로그 및 Server-id, 로그캐시 등을 설정한다. 설정은 my.ini (my.cnf)에서 한다.

Master (my.ini)

slave (my.ini)

Server-id = 101

log-bin = 1

sync_binlog = 5M

max_binlog_size = 512M

log-bin-trust-function-creators = 1

server-id = 102

relay-log = relay_log

relay_log_purge = TRUE

read_only

 

Master의 log-bin-trust-function-creators 설정값은 마스터 MariaDB에서 스토어드 함수나 트리거를 생성할 때 발생하는 경고 메시지를 제거하기 위해 적용 하였다.

 

Slave 서버에서는 릴레이 로그가 생성되는데 릴레이 로그를 저장할 디렉터리나 필요하지 않는 릴레이 로그를 자동으로 삭제하려면 relay-log와 relay_log_purge로그 옵션을 추가로 설정해야 한다. Slave 서버는 일반적으로 읽기 전용으로 사용되므로 read_only 설정도 함께 사용하는 편이 좋다.

 

 

설정이 완료 되었으면 Master, Slave 서버의 MariaDB 서비스를 재시작 한다. Master 서버에서 바이너리 로그가 정상적으로 기록되고 있는지는 Master 서버에서 SHOW MASTER STATUS라는 명령을 실행 한다.

 

show master status;

 

 

현재 사용되고 있는 바이너리 로그파일의 이름은 1.000001 이며 해당 파일에 기록된 바이너리 로그의 위치는 5765번이다. 서버가 트랜잭션을 계속해서 처리하는 중이라면 이 값은 계속 증가한다.

 

[복제 계정 준비]

Slave 서버가 Master 서버의 바이너리 로그를 가져오려면 Master 서버의 계정이 필요하다. 이때 Slave가 사용할 계정을 복제용 계정이라고 하는데 REPLICATION SLAVE 권한을 갖고 있어야 한다. 아래 스크립트는 Master 서버에서 실행하며 repl_user 라는 계정을 생성한다.

create user 'repl_user'@'%' IDENTIFIED BY 'slavepass';

GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';

 

 

[데이터 복사]

Master 데이터를 Slave로 복사하여야 하는데 Enterprise backup이나 mysqldump등을 이용해 데이터를 Slave로 복사하면 된다. 아래 스크립트는 데이터를 master_data.sql로 저장하는 명령이다.

Mysqldump –uroot –p 00opt –single-transaction –hex-blob –master-data=2 –routiness –triggers –all-databases > master_data.sql

 

 

생성된 SQL에는 Master 로그파일, 로그 위치 등을 포함하여 데이터베이스 생성 스크립트가 포함되어 있다.

 

생성된 master_data.sql을 Slave 서버에서 실행한다.

 

[복제시작]

Master와 Slave 복제를 시작하는 명령은 CHAGE MASTER 명령을 사용하며 Master 로그 파일 및 로그 위치는 백업 받은 파일의 헤더에서 확인 할 수 있다.

 

아래 명령어는 slave에서 실행하며 복제를 시작 한다.

CHANGE MASTER TO MASTER_LOG_FILE='1.000001', MASTER_LOG_POS=495, master_host='KSW_2012_2', master_port=3306, master_user='repl_user', master_password='slavepass';

 

Slave에서 SHOW SLAVE STATUS 명령을 실행해보면 복제 관련 정보가 등록되어 있는 것을 확인할 수 있다.

show slave status;

 

 

Slave_Running와 Slave_SQL_Running가 'NO'로 되어 있는 것을 복제 관련 정보만 등록된 것으로 동기화가 시작되지는 않은것이다. START SLAVE 명령을 실행하면 위의 두 값이 YES로 바뀌면서 동기화를 시작하게 된다.

start slave;

 

 

 

SHOW SLAVE STATUS정보에서 Seconds_Behind_Master의 상태값이 0이 되면 Master와 Slave의 데이터가 완전히 동기화 되었음을 표시한다. 만약 START SLAVE 명령을 실행 하였는데에도 Slave_Running와 Slave_SQL_Running가 'NO'로 표시되어 있다면 호스트명이나 포트 등 Slave의 접속 정보 및 네트워크가 정상적인지 확인한다.

 

 

 

[참고자료]

Real MySQL – 위키북스

 

2015-06-08 / 강성욱 / http://sqlmvp.kr

 

 

MariaDB, MySQL, MySQL 복제, MariaDB 복제, MySQL Replication, MariaDB Replication, 복제설정, 바이너리로그, 복제로그

+ Recent posts