BIG

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

 

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를 이용합니다.

 

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

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

 

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

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

 

감사합니다.

 

 

 


원문출처 : https://da-new.tistory.com/99

 

 

LIST