Intro
안녕하세요.
초보 DBA 다뉴입니다.
저번에 설치하였던 MariaDB의 이중화 Galera Cluster의 노드들을
보다 효율적인 분산구조로 사용 할 수 있게 도와주는 로드밸런서 MaxScale을 구성하려 하는데요.
여러 노드를 가지고 있는 Galera Cluster에 대해 Read/Write 쿼리를 분산하여,
Master 노드에 Write / 나머지 Slave 노드들에 대해 Read만 동작하도록 분산하여 성능 향상을 향상을 도모합니다.
Galera Cluster의 Road Balancer인 MaxScale의 설치에 대해 한번 알아보도록 하죠.
MariaDB와 Galera Cluster의 설치에 대해 궁금하신 분들은 아래의 링크를 참고해주세요!
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를 이용합니다.
이렇게 쿼리를 분산하는 것 까지 확인하였는데요.
두대의 서버를 이용해 가용성도 높이고 부하도 분산시키는 장점이 있습니다.
물론 서버의 동기화와 관리에 대한 어려움이 있을 수 있지만,
자세한 이론적인 내용은 나중에 따로 다루도록 하겠습니다.
감사합니다.
'DATABASE > MariaDB' 카테고리의 다른 글
[DBA][MariaDB] 사용자 계정 접속 잠금, 비활성화(?) - ACCOUNT LOCK (0) | 2024.01.12 |
---|---|
[MariaDB] 장애 조치 - Galera Cluster 동기화 전송 지연 (Delete_rows_log_event::find_row) (0) | 2024.01.05 |
[MariaDB][Linux] 보안 설치 - mariadb-secure-installation (0) | 2023.12.29 |
[MariaDB] Password 복잡도 설정 - simple_password_check Plugin (0) | 2023.12.06 |
[MariaDB][Linux] Galera Cluster 설치 - 이중화 / HA 구성 (1) | 2023.07.26 |
[MariaDB] 현재 Process 보는 방법 및 모니터링 팁 (0) | 2023.07.22 |
[MariaDB][Error] Can't lock aria control file 'aria_log_control' for exclusive use, error: 11. (3) | 2023.07.21 |
[MariaDB][Error] ERROR 1005 (HY000) (errno: 184 "Tablespace already exists") (1) | 2023.07.20 |