[MYSQL] Mysql Group Replication 구축(2)

2024. 10. 25. 03:02·♣ Learning Logs/MYSQL

2.환경 설정 

2.1. DB 환경 설정 

테스트의 목적으로 아래서는 하나의 서버에 다른 버전의 Mysql (5.7 / 8.0) 으로 구축해보겠습니다.

 

- Primary 

버전: MySQL 5.7 

address: 127.0.0.1

port: 3308

 

- Replica

버전: MySQL 8.0 

address: 127.0.0.1

port : 3306

 

* 그룹 복제 기능은 MySQL 5.7.17 버전 이상 부터 가능합니다.

* 같은 CHARSET 으로 통일하는 것이 좋습니다.

# Primary DB (Mysql 5.7) &  Replica DB (Mysql 8.0)
CREATE DATABASE `test_rep_db` ;

CREATE TABLE `test_rep_db`.`rep_table` (
  `a` int  ,
  `b` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ;

 

2.2.복제 관련 시스템 파일 설정  (my.ini, my.cnf)

Primary 시스템 파일 설정 (window/ my.ini)


[mysqld]

server_id=1

gtid_mode=ON

enforce_gtid_consistency=ON

master_info_repository=TABLE

relay_log_info_repository=TABLE

binlog_checksum=NONE

log_slave_updates=ON

log_bin=binlog

binlog_format=ROW

 

plugin_load_add='group_replication.dll'

transaction_write_set_extraction=XXHASH64

group_replication_group_name="15113a63-31fa-4be9-b362-46b91958ac7a"  # select UUID(); 로 생성 가능

group_replication_start_on_boot=off

group_replication_bootstrap_group=off

group_replication_local_address= "127.0.0.1:33061" # Primary 기본 포트로 33061 권장된다.

group_replication_group_seeds= "127.0.0.1:33061,s2-ip:33061,s3-ip:33061"


group_replication_bootstrap_group=초기 Group Replication 설정 시 필요. 

재구축시 Master 1대에서만 진행 (첫 노드만 ON으로 설정하고, 이후에는 OFF로 설정) 

 

Replica 시스템 파일 설정 (window/ my.ini)


[mysqld]

server_id=2   

gtid_mode=ON

enforce_gtid_consistency=ON

master_info_repository=TABLE

relay_log_info_repository=TABLE

binlog_checksum=NONE

log_slave_updates=ON

log_bin=binlog

binlog_format=ROW

 

plugin_load_add='group_replication.dll'

transaction_write_set_extraction=XXHASH64


* Configuration 변경 후, MySQL 서비스를 다시 시작 해줍니다.

만약, 자동으로 깔리지 않는다면 수동 설치합니다. 

-- C:\Program Files\MySQL\MySQL Server 5.7\bin
-- C:\Program Files\MySQL\MySQL Server 8.0\bin

INSTALL PLUGIN group_replication SONAME 'group_replication.so';  # Linux
INSTALL PLUGIN group_replication SONAME 'group_replication.dll'; # Window

 

2.3. MySQL  계정 설정 및 시작 

Primary 

CREATE USER 'replication_user1'@'127.0.0.1' IDENTIFIED BY 'replication_password';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user1'@'127.0.0.1' ;

SELECT user, host FROM mysql.user;
FLUSH PRIVILEGES;  

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

SELECT * FROM performance_schema.replication_group_members; # 연결 정보 확인
SHOW MASTER STATUS; # Primary의 현재 상태 확인

 

Replica 

CHANGE MASTER TO
  MASTER_HOST='127.0.0.1', -- Primary 서버 IP
  MASTER_USER='replication_user1',  -- 복제를 위한 사용자 (이전에 생성한 사용자)
  MASTER_PASSWORD='replication_password', -- 복제를 위한 사용자의 비밀번호
  MASTER_PORT=3308,   -- Primary 서버의 포트
  MASTER_AUTO_POSITION=1 ;

SHOW slave STATUS ; # Replica 상태 확인 
START slave;

 

3. 오류 확인 

select * from  performance_schema.replication_applier_status_by_worker ; # error log 확인 

STOP slave;
reset slave all ;

 

4. 결과 

Primary 에 삽입되는 데이터가 Replica 로 동기화 됩니다.

 

5.  오류 처리 



# 1

Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'ANONYMOUS' at source log mysql-album-master-bin.000003, end_log_pos 443. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.

 

=>  Repliaction 계정 이름이 Primary Replica 같은지 확인해봅니다.

예를 들어, Primary  에 Replication 으로 등록한 User 이름이 Replica 에도 그대로 있는 경우 이 문제가 발생했습니다.



# 2

Column 1 of table 'test_rep_db_master.rep_master_a' cannot be converted from type 'varchar(45(bytes))' to type 'varchar(180(bytes) utf8mb4)'

 

=> character-set 을 통일해줍니다.

Primary DB ( utf8 ) ---- replication ---> Replica DB ( utf8mb4 )   

utf8 을 사용하는 Primary DB에  utf8mb4 를 사용하는 Replica DB 를 구성할 때, 

replication 을 연결하면  다른 character-set 으로 연결되어, 에러가 발생하게 됩니다. 



# 3 

Worker 1 failed executing transaction '15113a63-31fa-4be9-b362-46b91958ac7a:5' at master log binlog.000001, end_log_pos 2139; 

 

⇒ Primary의 로그 상태를  확인해서 Replica 노드와  File Position 를 맞춰 줍니다.

트랜잭션 로그가 맞지 않아 계속 이전 트랜잭션과 충돌하는 에러입니다.

SHOW MASTER STATUS;

CHANGE MASTER TO
  MASTER_HOST='127.0.0.1', -- 마스터 서버 IP
  MASTER_USER='replication_user1',  -- 복제를 위한 사용자 (이전에 생성한 사용자)
  MASTER_PASSWORD='replication_password', -- 복제를 위한 사용자의 비밀번호
  MASTER_PORT=3308,   -- 마스터 서버의 포트
  MASTER_LOG_FILE='binlog.000006', -- 마스터의 현재 바이너리 로그 File
  MASTER_LOG_POS=2537;     -- 마스터의 Position

 

 

마침.

참고 링크 : 
http://jidum.com/jidums/view.do?jidumId=423
https://aworkingmom.tistory.com/38
https://saramin.github.io/2021-09-28-mysql-group-replication/
https://hoing.io/archives/3111
https://mysqldba.tistory.com/290

 

저작자표시 비영리 변경금지 (새창열림)

'♣ Learning Logs > MYSQL' 카테고리의 다른 글

[MYSQL] Mysql Group Replication 구축(1)  (0) 2024.10.25
[MySQL] binlog로 시점 복원하기  (1) 2024.10.03
'♣ Learning Logs/MYSQL' 카테고리의 다른 글
  • [MYSQL] Mysql Group Replication 구축(1)
  • [MySQL] binlog로 시점 복원하기
HC.21
HC.21
hc-log 님의 블로그 입니다.
  • HC.21
    HC
    HC.21
  • 전체
    오늘
    어제
    • 분류 전체보기 (21)
      • ♣ Learning Logs (16)
        • 데이터 아키텍처 (1)
        • MSSQL (10)
        • MYSQL (3)
        • SQL (2)
        • MongoDB (1)
      • Project (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
HC.21
[MYSQL] Mysql Group Replication 구축(2)
상단으로

티스토리툴바