ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [MariaDB] DB Proxy Maxscale이 WAS 서버에 위치할때 문제점 (Maxscale in WAS)
    AWS, Infra 2022. 6. 17. 21:47

    🚀 들어가면서

    MariaDB Galera Cluster - Maxscale - KeepAlived 구조

    위 사진 처럼 Maxscale은 WAS 서버와 분리하여 사용한다.
    (사진에서 Client가 WAS 서버가 되겠다)

    하지만 의도치 않게, WAS 서버 내부에 Maxscale이 위치하여 KeepAlived를 적용하지 않은 경우
    문제가 생길 수 있다.

    (회사에서 서버를 사주지 않거나, 이전 전임자가 구성을 알맞게 하지 못했거나..)

     

     


    1. VIP 설정을 통한 로드밸런싱이 불가능

    MariaDB Galera Cluster - Maxscale - KeepAlived 구조

    위처럼 보통 Maxscale 서버끼리 VIP 설정을 통해서, WAS 서버에서 접근을 한다.

    VIP란?
    VIP란 Virtual IP로 서버가 두대가 있을 때, 어떤 곳으로 정보를 보낼지 알 수 없기에
    묶이도록 설정하는 가상의 IP이다.

     

    하지만 VIP로 WAS가 이미 묶여 있는 상태가 대부분이기 때문에
    Maxscale에 대한 로드밸런싱이 불가능하다.

    MariaDB Galera Cluster - Maxscale 구조

    즉 이와 같은 경우라면, Maxscale이 하나가 죽는다면 WAS 서버 자체가 죽는 효과가 발생한다.

     


    2. KeepAlived 구조가 불가능

    WAS 서버가 이미 VIP로 묶여 있고, Maxscale 서버가 단독으로 존재하지 않기 때문에
    HA KeepAlived 구조가 사실 상 불가능하다.

    KeepAlived란?

    C로 작성된 LoadBalancing 및 HA를 제공하는 프레임워크이다.
    간단하게 설명하면 VIP (가상 IP)를 기반으로 작동하며 Master 노드를 모니터링하다가 해당 노드에 장애가 발생했을시 Stanby 서버로 Failover되도록 지원한다.

    즉, Heartbeat 체크를 하다가 Master에 장애발생시 Slave로 FailOver하는 역할을 하는 것이다.

     


    3. MariaDB와 연결 시에 권한이 추가 되어야 함 (localhost 추가)

    실제 사내 작업 중에 느낀 점인데, WAS 서버에 DB Proxy서버 (Maxscale)이 위치하면서
    권한이 없다는 오류가 발생하는 것이다.

    예시를 들어보자.

    WAS 내부에 위치한 Maxscale (IP 포함)


    위의 경우, WAS IP 내부에 Maxscale이 존재한다.

     

    1. MariaDB 계정 IP 설정
    MariaDB에서 Maxscale 계정을 아래와 같이 설정했다.

    Maxscale 계정 : maxscale@172.10.30.%
    설명 : 172.10.30.% 대역 전체

    create user 'maxscale'@'172.10.30.%' identified by 'password'; 
    GRANT SELECT ON mysql.user TO 'maxscale'@'172.10.30.%' IDENTIFIED BY 'password';
    GRANT SELECT ON mysql.db TO 'maxscale'@'172.10.30.%' IDENTIFIED BY 'password';
    GRANT SELECT ON mysql.tables_priv TO 'maxscale'@'172.10.30.%' IDENTIFIED BY 'password';
    GRANT SELECT ON mysql.columns_priv TO 'maxscale'@'172.10.30.%' IDENTIFIED BY 'password';
    GRANT SELECT ON mysql.procs_priv TO 'maxscale'@'172.10.30.%' IDENTIFIED BY 'password';
    GRANT SELECT ON mysql.proxies_priv TO 'maxscale'@'172.10.30.%' IDENTIFIED BY 'password';
    GRANT SELECT ON mysql.roles_mapping TO 'maxscale'@'172.10.30.%' IDENTIFIED BY 'password';
    GRANT SHOW DATABASES ON *.* TO 'maxscale'@'172.10.30.%' IDENTIFIED BY 'password';

     

    2. Maxscale 리스터 IP 설정
    Maxscale와 Maxscale의 클라이언트 (Query 호출하는 곳)의 서버 IP가 같기 때문에 127.0.0.1로 설정하였다.

     

    3. Maxscale에서 발생하는 오류
    "당연히 된다고 생각했지만.."
    해당 maxscale 계정에 대한 권한이 없다는 오류가 발생한다.
    이때 계정의 IP가 maxscale@127.0.0.1로 찍힌다.

    즉 Maxscale <-> MariaDB 통신의 문제가 아닌
    Maxscale <-> Application의 문제인 셈이다.

     

    응...?

    생각해보니, DB Proxy라는 기능 자체가 IP를 변환해주는 기능일지도 모른다는 생각이 들었다.
    이에 IP만 다르게 계정을 생성했다.

    maxscale@localhost 계정 생성

    create user 'maxscale'@'localhost' identified by 'password'; 
    GRANT SELECT ON mysql.user TO 'maxscale'@'localhost' IDENTIFIED BY 'password';
    GRANT SELECT ON mysql.db TO 'maxscale'@'localhost' IDENTIFIED BY 'password';
    GRANT SELECT ON mysql.tables_priv TO 'maxscale'@'localhost' IDENTIFIED BY 'password';
    GRANT SELECT ON mysql.columns_priv TO 'maxscale'@'localhost' IDENTIFIED BY 'password';
    GRANT SELECT ON mysql.procs_priv TO 'maxscale'@'localhost' IDENTIFIED BY 'password';
    GRANT SELECT ON mysql.proxies_priv TO 'maxscale'@'localhost' IDENTIFIED BY 'password';
    GRANT SELECT ON mysql.roles_mapping TO 'maxscale'@'localhost' IDENTIFIED BY 'password';
    GRANT SHOW DATABASES ON *.* TO 'maxscale'@'localhost' IDENTIFIED BY 'password';

     

    4. 끝

    이제 정상적으로 통신이 되었다
    이때 Application에서는 서비스 계정의 계정과 패스워드를 사용하였다.
    또한 호출 IP는 Maxscale이 위치하는 localhost로 설정하였다.

    정리하는 아래와 같다.

    Maxscale 계정에 대한 플로우 정리 (Maxscale in WAS)

     

    5. 공식 사이트에서는?

    아래 글을 통해서, client-host와 maxscale-host 둘 다 필요하다는 것을 알았다. 

     Maxscale에서 localhost은 당연히 잡아줄 수 있는 줄 알았지만, 생각이 짧았다. ㅠㅠ

    Maxscale은 Client-host와&nbsp; Maxscale-host 계정 둘 다 필요하다

     

     


    마치면서

    사실 별도의 서버를 구축하여 VIP 구조로 가는 것이 맞다.
    하지만 이 처럼 어쩔 수 없는 경우, 생길 수 있는 문제에 대해서 정리해보았다.

    • 공식 가이드에 따라 Maxscale을 사용하는 경우
    • 동일한 계정과 권한을 client-host와 maxscale-host에 할당해줘야 한다.
    계정@client-host
    계정@maxscale-host

    위 둘은 반드시 같은 권한을 가져야 한다.

     

     

     

    참고

    https://mariadb.com/kb/en/mariadb-maxscale-6-setting-up-mariadb-maxscale/

     

    Setting up MariaDB MaxScale

    Setting up MariaDB MaxScale This document is designed as a quick introduction to setting up MariaDB MaxScale. The installation and configuration of the MariaDB Server is not c...

    mariadb.com

     

    반응형
Designed by Tistory.