본문 바로가기
DATABASE/MariaDB

[MariaDB][Linux] MaxScale 설치 - Load Balancer

by DANEW 2023. 8. 3.

Intro

안녕하세요.

초보 DBA 다뉴입니다.

 

저번에 설치하였던 MariaDB의 이중화 Galera Cluster의 노드들을

보다 효율적인 분산구조로 사용 할 수 있게 도와주는 로드밸런서 MaxScale을 구성하려 하는데요.

 

여러 노드를 가지고 있는 Galera Cluster에 대해 Read/Write 쿼리를 분산하여,

Master 노드에 Write / 나머지 Slave 노드들에 대해 Read만 동작하도록 분산하여 성능 향상을 향상을 도모합니다.

 

Galera Cluster의 Road Balancer인 MaxScale의 설치에 대해 한번 알아보도록 하죠.

MariaDB와 Galera Cluster의 설치에 대해 궁금하신 분들은 아래의 링크를 참고해주세요!

 

[MariaDB][Linux] MariaDB 설치 - Server/Client 기본 설치 방법

Intro 안녕하세요. 초보 DBA 다뉴입니다. 오늘은 CentOS7에 MariaDB를 설치하는 내용에 대해 한번 남겨볼까합니다. 실무에서 MariaDB를 사용하고 있는데요. 무료 DB이다보니 각 서비스별로 MariaDB를 세팅하

da-new.tistory.com

 

 

[MariaDB][Linux] Galera Cluster 설치 - 이중화 / HA 구성

Intro 안녕하세요. 초보 DBA 다뉴입니다. 오늘은 저번에 설치해본 MariaDB를 이중화하는 내용에 대해서 한번 다뤄볼까하는데요. MariaDB를 아직 설치 못하신 분은 아래의 링크를 참고해주세요 :) [MariaDB

da-new.tistory.com


Galera Cluster - MaxScale 설치

1. Setting

기존에 MariaDB/Galera Cluster 가 설치된 서버가 아닌 MaxScale용의 새로운 서버에 구성해야 하므로,

처음부터 세팅이 진행됩니다.

yum -y update
yum -y install net-tools
yum -y groupinstall 'Development Tools'
yum -y install wget

yum으로 필요한 패키지들을 다운받습니다.

 

추가로 SELinux의 설정을 허용으로 변경합니다.

vi /etc/sysconfig/selinux
> 문서 내용 수정
-----------------------------
SELINUX=disabled

# 설정 변경시 재시작
reboot

설정이 반영되려면 재시작이 필요하므로 reboot까지 진행합니다.

DNS 설정

vi /etc/hosts
> 문서 내용 수정
-----------------------------
[Galera IP1] [Galera HostName1]
[Galera IP2] [Galera HostName2]

각 노드의 아이피와 호스트명을 DNS host파일에 추가하여 줍니다.

2. repo Download

# repo download
curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
# 잘 다운되었는지 확인
ls -lh /etc/yum.repos.d/

/etc/yum.repos.d/ 디렉토리에 mariadb.repo의 다운로드 상태를 확인합니다.

3. MaxScale / MariaDB Clinet Install

# maxscale install
yum install -y maxscale

# MariaDB Client install
yum install -y MariaDB-client

필요한 MaxScale과 MariaDB에 접속하기위한 client를 설치합니다.

4. MaxScale User 생성

갈레라 클러스터가 설정되어있으므로 Galera Cluster 1번에서 user를 생성하면,

나머지 node들까지 자동적으로 동기화가 되어 생성됩니다.

 

Galera Cluster를 구성한 1번 서버로 이동하여 유저를 생성하여 줍니다.

# Cluster node 1번 서버에서 실행
mysql
> CREATE USER '[MaxScale User ID]'@'[MaxScale IP]' IDENTIFIED BY '[MaxScale User PW]';
> GRANT SELECT ON mysql.user TO '[MaxScale User ID]'@'[MaxScale IP]';
> GRANT SELECT ON mysql.db TO '[MaxScale User ID]'@'[MaxScale IP]';
> GRANT SELECT ON mysql.tables_priv TO '[MaxScale User ID]'@'[MaxScale IP]';
> GRANT SELECT ON mysql.columns_priv TO '[MaxScale User ID]'@'[MaxScale IP]';
> GRANT SELECT ON mysql.procs_priv TO '[MaxScale User ID]'@'[MaxScale IP]';
> GRANT SELECT ON mysql.proxies_priv TO '[MaxScale User ID]'@'[MaxScale IP]';
> GRANT SELECT ON mysql.roles_mapping TO '[MaxScale User ID]'@'[MaxScale IP]';
> GRANT SHOW DATABASES ON *.* TO '[MaxScale User ID]'@'[MaxScale IP]';

maxscale에서 접속가능한 user를 생성하고 각 권한을 부여합니다.

5. MaxScale 설정

maxscale 로 돌아와서 나머지 설정을 진행합니다.

vi /etc/maxscale.cnf
> 문서 내용 수정
-----------------------------
# Galera Cluster들에 대한 서버 값 입력
[server1]
type=server
address=[Galera 1 IP]
port=3306
protocol=MariaDBBackend

[server2]
type=server
address=[Galera 2 IP]
port=3306
protocol=MariaDBBacken

# [MariaDB-Monitor] 삭제 혹은 주석 처리 후 입력
[Galera-Monitor]
type=monitor
module=galeramon
servers=server1, server2
user=[MaxScale User ID]
password=[MaxScale User PW]
monitor_interval=2000ms

# [Read-Only-Service], [Read-Write-Service] 삭제 혹은 주석 처리 후 입력
[Splitter-Service]
type=service
router=readwritesplit
servers=server1, server2
user=[MaxScale User ID]
password=[MaxScale User PW]

# [Read-Only-Listener], [Read-Write-Listener] 삭제 혹은 주석 처리 후 입력
[Splitter-Listener]
type=listener
service=Splitter-Service
protocol=MariaDBClient
port=3306

[server1] [server2]... 노드 들에 대한 값을 정의해 줍니다.

반응형

기존에 입력되어 있는 몇가지 값들을 삭제 혹

은 주석처리 한 후 새로 입력을 해줘야 합니다.

[MariaDB-Monitor] ->  [Galera-Monitor]

[Read-Only-Service], [Read-Write-Service] -> [Splitter-Service]

[Read-Only-Listener], [Read-Write-Listener] -> [Splitter-Listener]

이렇게 바꿔주도록합니다.

5. MaxScale 서비스 실행 및 확인

# Service Start
systemctl start maxscale

MaxScale의 서비스를 실행합니다.

 

서비스가 실행되며 아래의 명령어로 maxscale과 cluster 들의 상태를 확인 할 수 있습니다.

maxctrl list servers
maxctrl list services
maxctrl list listeners

maxctrl show server server1
maxctrl show server server2

6. Port 설정

firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports

마지막으로 포트를 설정하여줍니다.


Outro

이렇게 Galera Cluster에 이어 maxscale까지 설치를 완료하였습니다.

maxscale이 잘 작동하는지 너무나 궁금한데요.

확인하는 방법은 아래의 방법으로 간단히 확인 할 수 있습니다.

우선 maxctrl list servers를 통해 Master와 Slave를 확인하여 줍니다.

MaxScale을 통해 쿼리가 분산되어 Master에서는 쓰기, Slave에서는 읽기 쿼리가 실행되는데요.

해당 내용을 한번 확인해보도록하죠.

 

우선 test용 테이블을 하나 만들어 줍니다.

create table TB_TEST (host_nm varchar(100));

생성된 테이블에 insert 문을 이용하여 hostname을 insert하고, 해당 hostname을 확인해봅니다.

insert into TB_TEST values(@@hostname);

select * from TB_TEST;

1번 서버의 호스트명이 들어간 것을 알 수 있습니다. 쓰기쿼리는 Master Server를 이용하네요.

 

다음으로 읽기쿼리를 확인해봅니다.

select @@hostname;

읽기쿼리 는 1번서버의 호스트명이 나타나네요 Slave Server를 이용합니다.

 

이렇게 쿼리를 분산하는 것 까지 확인하였는데요.

두대의 서버를 이용해 가용성도 높이고 부하도 분산시키는 장점이 있습니다.

 

물론 서버의 동기화와 관리에 대한 어려움이 있을 수 있지만,

자세한 이론적인 내용은 나중에 따로 다루도록 하겠습니다.

 

감사합니다.

반응형