250x250
반응형
Notice
Recent Posts
Recent Comments
전산쟁이의 기억노트
maxscale기반의 DB 이중화 운영 본문
728x90
반응형
SMALL
개 요
기존 Mysql + myql-mmm 구조기반에서의 DB이중화 구조에서의 문제점
비동기식 replication 구조에서 read / write가 많은 경우 replication이 깨지거나 지연되는 현상이 빈번함
mmm의 버전 업데이트가 없음 ( latest버전인 2.2.1은 2012년 12월이 마지막)
mmm 버그로 인한 failover / failback 이슈가 발생이 있음
Maxscale 소개
- Mariadb에서 제공하는 DB클러스터 구성
- glaera cluster를 이용한 데이터이중화, maxscale를 이용한 db proxy 구조로 되어 있음
- 기본적으로 BSD라이선스를 적용하고 있고, BSD라이선스의 경우 S/W 개발사가 적용한 날짜 이후에는 GPL 라이선스로 변경됨
- BSD 라이선스를 적용받는 경우 연동할 수 있는 노드수는 3대 미만, 즉 2대까지만 maxscale에 연결할 수 있고 그 수량을 넘는 경우 라이선스 비용 발생이 필요함
- GPL의 경우 연동 노드 수 제한없음
- '22년 2월 기준으로 확인된 메이저 버젼멸 BSD라이선스 유효기간은 다음과 같습니다.
- 2.0 → 2019-01-01 (BSD 라이선스 만료, 연결노드 수 제한없음)
- 2.1 → 2019-07-01 (BSD 라이선스 만료, 연결노드 수 제한없음)
- 2.2 → 2020-01-01 (BSD 라이선스 만료, 연결노드 수 제한없음)
- 2.3 → 2024-06-02
- 2.4 → 2026-01-04
- 2.5 → 2026-02-11
- 6.2 → 2026-02-11
- 그외에 벤더사에서 제공하는 기능은 다음과 같다.
- scale out environment - 별도 DB 다운타임없이 스케일-아웃이 가능, read / write spilit이 가능
- High availability - 장애 모니터링을 위해 read transction을 라우딩
- Secure database - app이 DB에 접근하는것이 아니라 maxsale로 접근하기 때문에 서버 접근 정보 확보가 가능, 방화벽 필터 사용시 클러스터 연결을 제안해서 DDos 공격으로부터 서버 보호가 가능
- MMM / Maxscale 비교
항 목
|
Mysql + Mysql-MMM
|
Mariadb + Maxscale
|
서버 수량
|
2(DB) + 1(monitor)
|
3(DB) + 1(Maxscale)
|
DB버전
|
Mysql
|
Mariadb 10 이상
|
데이터 동기화 방식
|
replication
|
galera cluster
|
모니터링 방식
|
monitor → agent로 db상태 확인
|
maxscale → DB 방향으로 상태 확인
|
failover절차
|
monitor에서 db health check
Active DB 장애탐지 Active DB에 적용된 VIP회수 Standby DB에 VIP 할당 |
maxscale에서 각 DB health check
Active DB 장애탐지 DB 접속 차단 |
S/W 설치하기
- 시스템 구성도
- maxscale : 192.168.0.101
- db1 : 192.168.0.102
- db2 : 192.168.0.103
- Maxscale 설치 하기
- 리포지터리 구성
$ vi /etc/yum.repos.d/mariadb.repo
[mariadb-main]
name = MariaDB Server
baseurl = https:~/~/downloads.mariadb.com/MariaDB/mariadb-10.5/yum/rhel/7/x86_64
gpgkey = file:~/~//etc/pki/rpm-gpg/MariaDB-Server-GPG-KEY
gpgcheck = 1
enabled = 1
\\\\[mariadb-maxscale]
# To use the latest stable release of MaxScale, use "latest" as the version
# To use the latest beta (or stable if no current beta) release of MaxScale, use "beta" as the version
name = MariaDB MaxScale
baseurl = https:~/~/dlm.mariadb.com/repo/maxscale/latest/yum/rhel/7/x86_64
gpgkey = file:~/~//etc/pki/rpm-gpg/MariaDB-MaxScale-GPG-KEY
gpgcheck = 1
enabled = 1
\\[mariadb-tools]
name = MariaDB Tools
baseurl = https:~/~/downloads.mariadb.com/Tools/rhel/7/x86_64
gpgkey = file:~/~//etc/pki/rpm-gpg/MariaDB-Enterprise-GPG-KEY
gpgcheck = 1
enabled = 1
-
- 패키지 설치 후 설정하기
$ yum install maxscale -y
...
\\$ vi /etc/maxscale.cnf
# MaxScale documentation:
# https:~/~/mariadb.com/kb/en/mariadb-maxscale-25/
\\# Global parameters
#
# Complete list of configuration options:
# https:~/~/mariadb.com/kb/en/mariadb-maxscale-25-mariadb-maxscale-configuration-guide/
\\[maxscale]
threads=auto
\\# Server definitions
#
# Set the address of the server to the network
# address of a MariaDB server.
#
\\[server1]
type=server
address=192.168.0.102
port=3306
protocol=MariaDBBackend
\\[server2]
type=server
address=192.168.0.103
port=3306
protocol=MariaDBBackend
\\[server3]
type=server
address=192.168.0.101
port=3306
protocol=MariaDBBackend
# Monitor for the servers
#
# This will keep MaxScale aware of the state of the servers.
# MariaDB Monitor documentation:
# https:~/~/mariadb.com/kb/en/maxscale-25-monitors/
\\[MariaDB-Monitor]
type=monitor
#module=mariadbmon
module=galeramon
servers=server1,server2,server3
user=maxscale #maxscale이 db접근할때 사용하는 계정명
password=maxscale #maxscale이 db접근할때 사용하는 계정패스워드
monitor_interval=2000
\\# Service definitions
#
# Service Definition for a read-only service and
# a read/write splitting service.
#
\\# ReadConnRoute documentation:
# https:~/~/mariadb.com/kb/en/mariadb-maxscale-25-readconnroute/
\\[Read-Only-Service]
type=service
router=readconnroute
servers=server1
user=myuser
password=mypwd
router_options=slave
\\# ReadWriteSplit documentation:
# https:~/~/mariadb.com/kb/en/mariadb-maxscale-25-readwritesplit/
\\[Read-Write-Service]
type=service
router=readwritesplit
servers=server1,server2 #read / write 분산할 서버 정보
user=maxscale #maxscale이 db접근할때 사용하는 계정명
password=maxscale #maxscale이 db접근할때 사용하는 계정패스워드
\\# Listener definitions for the services
#
# These listeners represent the ports the
# services will listen on.
#
\\[Read-Only-Listener]
type=listener
service=Read-Only-Service
protocol=MariaDBClient
port=4008
\\[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MariaDBClient
port=4006
Mariadb 구성하기
- 패키지 내려받기
$ wget https://downloads.mariadb.org/interstitial/mariadb-10.5.11/bintar-linux-x86_64/mariadb-10.5.11-linux-x86_64.tar.gz -O mariadb-10.5.11-linux-x86_64.tar.gz
DB설치 후 galera clutser 구성
$ tar -zxvf mariadb-10.5.11-linux-x86_64.tar.gz -C /usr/local/
...
\\$ vi /etc/my.cnf
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/local/mariadb/lib/galera-4/libgalera_smm.so
wsrep_cluster_address=gcomm:~/~/192.168.0.102,192.168.0.103,192.168.0.101
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_node_address=192.168.0.101
#
# Allow server to accept connections on all interfaces.
#
bind-address=0.0.0.0
#
# Optional setting
#wsrep_slave_threads=1
#innodb_flush_log_at_trx_commit=0
첫번째 노드에서 galera cluster master 선언 (mariadb 프로세스도 실행함)
$> galera_new_cluster
나머지 노드에서 mariadb 실행
$> ./mariadbd-safe
DB권한 설정
MariaDB [(none)]> grant select on mysql.* to maxscale@'%' identified by 'maxscale' with grant option;
모니터링
- maxscale서비스 실행
$> systemctl start maxscale
- maxscle에 등록된 서버 현항확인
$> maxctrl list servers
┌─────────┬───────────────┬──────┬─────────────┬─────────────────────────┬──────┐
│ Server │ Address │ Port │ Connections │ State │ GTID │
├─────────┼───────────────┼──────┼─────────────┼─────────────────────────┼──────┤
│ server1 │ 192.168.0.102 │ 3306 │ 2 │ Slave, Synced, Running │ │
├─────────┼───────────────┼──────┼─────────────┼─────────────────────────┼──────┤
│ server2 │ 192.168.0.103 │ 3306 │ 0 │ Slave, Synced, Running │ │
├─────────┼───────────────┼──────┼─────────────┼─────────────────────────┼──────┤
│ server3 │ 192.168.0.101 │ 3306 │ 0 │ Master, Synced, Running │ │
└─────────┴───────────────┴──────┴─────────────┴─────────────────────────┴──────┘
- 서비스 상태 확인
$> maxctrl list services
┌────────────────────┬────────────────┬─────────────┬───────────────────┬─────────┐
│ Service │ Router │ Connections │ Total Connections │ Servers │
├────────────────────┼────────────────┼─────────────┼───────────────────┼─────────┤
│ Read-Write-Service │ readwritesplit │ 2 │ 4 │ server1 │
├────────────────────┼────────────────┼─────────────┼───────────────────┼─────────┤
│ Read-Only-Service │ readconnroute │ 0 │ 0 │ server1 │
└────────────────────┴────────────────┴─────────────┴───────────────────┴─────────┘
장애조치
- 전체DB서버 장애시 조치
- 각 DB서버 접속 후 데이터 경로 진입 후 "grastate.dat 파일 확인
$> cat grastate.dat
# GALERA saved state
version: 2.1
uuid: 7d985eca-de63-11eb-87c6-0ad28b9e1f30
seqno: -1
safe_to_bootstrap: 0
- safe_to_bootstrap이 1인 값을 찾아서 해당 노드에서 galera_new__cluster 재실행
- safe_to_bootstrap이 1인 값이 전체 down전에 master 역활했던 node
출처 - http://igoni.kr/books/dbms/page/maxscale-db
728x90
반응형
LIST
'mysql&mariadb' 카테고리의 다른 글
MariaDB 컴파일 후 초기설치할때 에러 (0) | 2022.07.25 |
---|---|
mariadb기반의 galera 구성 오류메시지 조치 (0) | 2022.07.25 |
mariadb에서 패스워드 없이 로그인할때 (0) | 2022.07.25 |
centos7 galera cluster설치 (0) | 2022.07.25 |
corosync / pacemaker 기반의 DB이중화 구현 (0) | 2022.07.25 |
Comments