services:
mysql-master:
container_name: couponpop-mysql-master
image: mysql:8.0.42
restart: always
environment:
MYSQL_ROOT_PASSWORD: won9975744
ports:
- '3306:3306'
volumes:
- db-master:/var/lib/mysql
- db-master:/var/lib/mysql-files
command:
- --innodb-buffer-pool-size=128M
- --max-connections=50
- --default_authentication_plugin=mysql_native_password
- --server-id=1
- --log-bin=mysql-bin
- --binlog-format=ROW
- --max-binlog-size=100M
- --expire-logs-days=7
- --sync-binlog=1
networks:
- mysql-net
mysql-slave:
container_name: couponpop-mysql-slave
image: mysql:8.0.42
restart: always
environment:
MYSQL_ROOT_PASSWORD: won9975744
ports:
- '3307:3306'
volumes:
- db-slave:/var/lib/mysql
- db-slave:/var/lib/mysql-files
command:
- --innodb-buffer-pool-size=128M
- --max-connections=50
- --default-authentication-plugin=mysql_native_password
- --server-id=2
- --relay-log=mysql-relay-bin
- --binlog-format=ROW
- --read-only=1
networks:
- mysql-net
volumes:
db-master:
db-slave:
networks:
mysql-net:
driver: bridge
목적
CouponPop 서비스의 읽기/쓰기 부하 분산 및 데이터 가용성 향상을 위해 MySQL Master–Slave 복제 환경을 구성합니다.구성 방식
| 구분 | 컨테이너 이름 | 포트 | 역할 | 주요 설정 |
|---|---|---|---|---|
| Master | couponpop-mysql-master |
3306 | 쓰기 전용 | Binlog 활성화, Server ID = 1 |
| Slave | couponpop-mysql-slave |
3307 | 읽기 전용 | Relay Log, Server ID = 2 |
네트워크
mysql-net (bridge)
→ Master/Slave 간 통신 및 복제용 내부 네트워크
데이터 볼륨
db-master, db-slave
→ 컨테이너 재시작 시 데이터 유지