WHATDO-TEAM / whatdo

1 stars 0 forks source link

MariaDB - MaxScale과 Galera Cluster 환경 설정 #75

Open mfkim opened 19 hours ago

mfkim commented 19 hours ago
mfkim commented 18 hours ago
docker exec -it mariadb1 mysql -uroot -prootpassword

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 10.5.26-MariaDB-ubu2004 mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE USER 'maxscale'@'%' IDENTIFIED BY 'maxscale_password';
Query OK, 0 rows affected (0.008 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'maxscale'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.007 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.010 sec)
mfkim commented 18 hours ago

docker-compose.yml

version: '3'

services:
  mariadb1:
    image: mariadb:10.5
    container_name: mariadb1
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydb
    volumes:
      - ./mariadb/galera.cnf:/etc/mysql/conf.d/galera.cnf
      - mariadb1_data:/var/lib/mysql
    command: --wsrep-new-cluster
    networks:
      - galera-network

  mariadb2:
    image: mariadb:10.5
    container_name: mariadb2
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydb
    volumes:
      - ./mariadb/galera.cnf:/etc/mysql/conf.d/galera.cnf
      - mariadb2_data:/var/lib/mysql
    command: --wsrep-new-cluster
    networks:
      - galera-network
    depends_on:
      - mariadb1

  mariadb3:
    image: mariadb:10.5
    container_name: mariadb3
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydb
    volumes:
      - ./mariadb/galera.cnf:/etc/mysql/conf.d/galera.cnf
      - mariadb3_data:/var/lib/mysql 
    command: --wsrep-new-cluster
    networks:
      - galera-network
    depends_on:
      - mariadb1
      - mariadb2

  maxscale:
    image: mariadb/maxscale:latest
    container_name: maxscale
    volumes:
      - ./maxscale/maxscale.cnf:/etc/maxscale.cnf
    ports:
      - "4006:4006"  # MaxScale 서비스
      - "8989:8989"  # MaxScale 관리
    networks:
      - galera-network
    depends_on:
      - mariadb1
      - mariadb2
      - mariadb3

  adminer:
    image: adminer
    container_name: adminer
    ports:
      - "8080:8080"
    networks:
      - galera-network

networks:
  galera-network:
    driver: bridge

volumes:
  mariadb1_data:
  mariadb2_data:    
  mariadb3_data:    
mfkim commented 18 hours ago

maxscale.cnf

[maxscale]
threads=auto                            # MaxScale이 사용할 스레드 수를 자동으로 설정

[Galera-Monitor]
type=monitor                             # 모니터 타입 설정
module=galeramon                         # Galera 클러스터 모니터링 모듈 사용
servers=mariadb1,mariadb2,mariadb3       # 모니터링할 서버 목록
user=maxscale                            # 모니터링용 사용자 계정
password=maxscale_password               # 모니터링용 계정 비밀번호
monitor_interval=2000                    # 모니터링 주기(밀리초)

[Galera-Service]
type=service                            # 서비스 타입 정의
router=readwritesplit                   # 읽기/쓰기 분리 라우터 사용
servers=mariadb1,mariadb2,mariadb3      # 서비스에 포함될 서버
user=maxscale                           # 서비스용 사용자 계정
password=maxscale_password              # 서비스용 계정 비밀번호

[Galera-Listener]
type=listener                           # 리스너 타입 정의
service=Galera-Service                  # 연결할 서비스 지정
protocol=MariaDBClient                  # MariaDB 클라이언트 프로토콜 사용
port=4006                               # 리스너가 사용할 포트

[MaxAdmin-Service]
type=service                            # 서비스 타입 정의
router=cli                              # 명령줄 인터페이스 라우터 사용

[MaxAdmin-Listener]
type=listener                           # 리스너 타입 정의
service=MaxAdmin-Service                # 연결할 서비스 지정
protocol=maxscaled                      # MaxScale 관리 프로토콜 사용
socket=default                          # 기본 소켓 사용
mfkim commented 18 hours ago

galera.cnf

[mysqld]
binlog_format=ROW                                   # 바이너리 로그 형식을 ROW 형식으로 지정 (Galera)
default-storage-engine=innodb                       # 기본 스토리지 엔진을 InnoDB로 설정
innodb_autoinc_lock_mode=2                          # 자동 증가 락 모드 설정 (2=인터리브드)
bind-address=0.0.0.0                                # 모든 네트워크 인터페이스에서 접속 허용

# Galera Provider Configuration
wsrep_on=ON                                         # Galera 클러스터링 활성화
wsrep_provider=/usr/lib/galera/libgalera_smm.so     # Galera 라이브러리 경로 지정

# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"                         # 클러스터의 논리적 이름
wsrep_cluster_address="gcomm://mariadb1,mariadb2,mariadb3"  # 클러스터 멤버 노드 목록

# Galera Synchronization Configuration
wsrep_sst_method=rsync              # State Snapshot Transfer 방식을 rsync로 지정

# Galera Node Configuration
wsrep_node_address="mariadb1"       # 현재 노드의 IP 주소 또는 호스트명
wsrep_node_name="mariadb1"          # 현재 노드의 논리적 이름