MaxScale 슬레이브 상태가 설정되지 않음
우리는 도커 합성으로 MaxScale과 두 개의 MariaDB 데이터베이스를 사용하기를 원합니다.
maxscale을 통한 데이터베이스 복제가 이루어지지 않는 문제가 있습니다.쓰기 권한은 두 데이터베이스 모두에서 MaxScale을 통해 사용할 수 있습니다.명령을 통해maxscale list servers
maxscale 컨테이너에는 두 서버가 모두 표시됩니다.첫 번째 서버에 상태가 있습니다.Master, Running
그리고 두 번째 서버는 상태만 가지고 있습니다.Running
.
나의docker-compose.yaml
:
version: '3'
services:
# Application
app:
build:
context: .
dockerfile: app.dockerfile
working_dir: /var/www/project
volumes:
- ./project:/var/www/project
- ./php.ini:/usr/local/etc/php/php.ini
links:
- database:database
environment:
- "DATABASE_HOST=database"
- "DATABASE_PORT=4006"
# Web server
web:
image: nginx:latest
volumes:
- ./vhost.conf:/etc/nginx/conf.d/default.conf
- ./nginx-logs:/var/log/nginx
# Inherit from app container
- ./project:/var/www/project
- ./php.ini:/usr/local/etc/php/php.ini
ports:
- 0.0.0.0:8021:80
links:
- app:app
# Database
database:
image: mariadb:latest
ports:
- 0.0.0.0:3306:3306
volumes:
- ./database:/var/lib/mysql
- ./database-config:/etc/mysql/
command: mysqld --log-bin=mariadb-bin --binlog-format=ROW --server-id=3001 --log-slave-updates
environment:
- "MYSQL_ROOT_PASSWORD=secretDummyPassword"
- "MYSQL_DATABASE=database"
- "MYSQL_USER=database"
- "MYSQL_PASSWORD=secretDummyPassword"
- "skip-networking=0"
#Max Scale
maxscale:
image: mariadb/maxscale:6.2.3
depends_on:
- database
volumes:
- ./maxscale.cnf:/etc/maxscale.cnf
ports:
- 0.0.0.0:4006:4006 # readwrite port
- 0.0.0.0:4008:4008 # readonly port
- 0.0.0.0:8989:8989 # REST API port
links:
- database:database
volumes:
app: {}
나의maxscale.cnf
:
[maxscale]
threads=auto
[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=server1,server2
user=database
password=secretDummyPassword
auto_failover=true
auto_rejoin=true
enforce_read_only_slaves=1
[Read-Write-Service]
type=service
router=readwritesplit
servers=server1,server2
user=database
password=secretDummyPassword
master_failure_mode=fail_on_write
[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MariaDBClient
port=4006
[server1]
type=server
address=195.XXX.123.22
port=3306
protocol=MariaDBBackend
[server2]
type=server
address=142.XXX.186.188
port=3306
protocol=MariaDBBackend
복제를 수동으로 구성하지 않은 경우 Maxscale 컨테이너 내에서 다음 명령을 사용하여 서버 간 복제를 설정할 수 있습니다.
maxctrl call command mariadbmon reset-replication MariaDB-Monitor server1
이로 인해 다른 모든 서버가 에 대해 구성됩니다.MariaDB-Monitor
에서 복제를 시작하다server1
.
참고: 이 명령은 GTID 위치를 재설정하여 활성 시스템에서 사용하면 안 됩니다.활성 시스템을 사용하는 경우 올바른 GTID 좌표를 사용하여 명령을 사용합니다.데이터를 건드리지는 않지만 기록을 잃게 됩니다.
컨테이너를 처음 시작할 때 복제를 자동으로 구성하려면 다음 위치에서 SQL 명령이 포함된 파일을 마운트할 수 있습니다./docker-entrypoint-initdb.d
시작하는 동안 MariaDB가 실행합니다.이것은 자동화된 시스템에 더 나은 솔루션일 수 있으며 테스트 설정에 매우 편리합니다.
언급URL : https://stackoverflow.com/questions/71480345/maxscale-no-slave-state-set
'programing' 카테고리의 다른 글
CG ContextDrawImage는 UIImage를 통과할 때 이미지를 거꾸로 그립니다.CGI 이미지 (0) | 2023.06.09 |
---|---|
요청 모듈에 헤더를 추가하는 중 (0) | 2023.06.09 |
문자열 VLOOKUP에서 Excel이 실패함 (0) | 2023.06.09 |
캐시 VS 세션 VS 쿠키? (0) | 2023.06.09 |
stdin에서 암호 읽기 (0) | 2023.06.09 |