오늘은 또 다른 방식의 Replication MSR에 대해서 알아보려 한다.
MSA를 위해서 DB를 여러개 사용해야되는 환경이라면…?


충돌 가능성
Slave 성능 문제

docker-compose 통해 구축
services:
mysql-master-a:
image: mysql:5.7
restart: always
platform: linux/amd64
environment:
MYSQL_ROOT_PASSWORD: code1!
MYSQL_DATABASE: code-db
MYSQL_USER: code-user
MYSQL_PASSWORD: code1!
ports:
- "13306:3306"
volumes:
- db_data_master_a:/var/lib/mysql
command:
--server-id=1
--log-bin=mysql-bin
--binlog-format=row
--master-info-repository=TABLE
--relay-log-info-repository=TABLE
networks:
- mysql-network
mysql-master-b:
image: mysql:5.7
restart: always
platform: linux/amd64
environment:
MYSQL_ROOT_PASSWORD: code1!
MYSQL_DATABASE: code-db
MYSQL_USER: code-user
MYSQL_PASSWORD: code1!
ports:
- "13307:3306"
volumes:
- db_data_master_b:/var/lib/mysql
command:
--server-id=2
--log-bin=mysql-bin
--binlog-format=row
--master-info-repository=TABLE
--relay-log-info-repository=TABLE
networks:
- mysql-network
mysql-slave:
image: mysql:5.7
restart: always
platform: linux/amd64
environment:
MYSQL_ROOT_PASSWORD: code1!
MYSQL_DATABASE: code-db
MYSQL_USER: code-user
MYSQL_PASSWORD: code1!
ports:
- "13308:3306"
volumes:
- db_data_slave_2:/var/lib/mysql
command:
--server-id=3
--log-bin=mysql-bin
--binlog-format=row
--master-info-repository=TABLE
--relay-log-info-repository=TABLE
networks:
- mysql-network
volumes:
db_data_master_a:
db_data_master_b:
db_data_slave_2:
networks:
mysql-network:
driver: bridge
기존의 master/slave 구조로 했을 때는 바이너리 로그를 파일로 떨어져있는걸 주어다 사용했는데
MySQL 은 무결성을 잘 보장해주니까 로그조차 디비테이블 안에서 관리하겠다는 설정

테이블로 로그를 저장하는 방식
기존에 있는 컨테이너는 충돌이 날 수 있기에 volume 통째로 제거 해준다 .

이후 datagrip 통해 포트번호 맞게 연결해주고

이후 master 쪽에 slave가 접속 할 수 있게 user 넣어준다.

slave는 채널을 2가지 운영해야 한다.
