MaxScale, 데이터베이스 클러스터 연동

Jeonghak Cho·2024년 12월 7일
0

MaxScale

목록 보기
4/8

내부 DNS 확인하기

pod 를 통해 내부에서 사용하는 내부 DNS 정보를 확인한다. 아래 명령에서 resolv.conf 조회를 통해 DNS 패턴을 읽어올 수 있다. default.svc.cluster.local 앞에 서비스 명을 붙이면 POD를 찾아 갈 수 있다. MaxScale의 경우 서비스 명이 maxscale1 이니 maxscale1.default.svc.cluster.local 가 DNS 명이다. 헤더리스로 운영되는 mariadb의 경우 서비스명 앞에 추가로 pod명을 추가해야 한다. 예를 들어 mariadb-0 의 경우 mariadb-0.mariadb.default.svc.cluster.local 가 된다.

vagrant@slave1:~$ k get po && k get svc
NAME                         READY   STATUS    RESTARTS       AGE
mariadb-0                    1/1     Running   1 (113m ago)   18h
mariadb-1                    1/1     Running   1 (112m ago)   18h
mariadb-2                    1/1     Running   1 (113m ago)   18h
maxscale1-6867fc9bfb-7hcpj   1/1     Running   1 (113m ago)   18h
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                         AGE
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP                         13d
mariadb      ClusterIP   None            <none>        3306/TCP                        19h
maxscale1    NodePort    10.107.131.95   <none>        8989:30949/TCP,3306:30857/TCP   54m

vagrant@slave1:~$ k exec -it mariadb-0 -- cat /etc/resolv.conf
Defaulted container "mariadb" out of: mariadb, init-mariadb (init)
search default.svc.cluster.local svc.cluster.local cluster.local
nameserver 10.96.0.10
options ndots:5

찾아낸 DNS 명으로 mariadb 내에서 타 mariadb 로 접속할 수 있다. 아래처럼 mariadb-0에 접속해서 mariadb-1로 접속을 한다.

root@mariadb-0:/# mariadb -uroot -psecret -h mariadb-1.mariadb.default.svc.cluster.local
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 11.6.2-MariaDB-ubu2404-log mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

mariadb-0,mariadb-1,mariadb-3 는 각기 아래의 DNS로 접근할 수 있다.

mariadb-0.mariadb.default.svc.cluster.local
mariadb-1.mariadb.default.svc.cluster.local
mariadb-2.mariadb.default.svc.cluster.local

MaxScale의 데이터베이스 서버의 IP대신 위의 DNS를 사용해서 연결해야 장애가 난 후 POD의 IP가 바뀌더라도 접속을 이어갈 수 있다.
아래의 내용을 저장해서 maxscale.cnf 파일로 생성한다. MaxScale을 통해 접속을 하면 위 데이터베이스 서버 중 하나로 접속을 라우팅할 수 있다.

[maxscale]
admin_secure_gui=false
threads=auto
maxlog=true
syslog=true
logdir=/var/log/maxscale/
log_debug=true
admin_host=0.0.0.0

[server1]
type=server
address=mariadb-0.mariadb.default.svc.cluster.local
port=3306
protocol=MariaDBBackend

[server2]
type=server
address=mariadb-1.mariadb.default.svc.cluster.local
port=3306
protocol=MariaDBBackend

[server3]
type=server
address=mariadb-2.mariadb.default.svc.cluster.local
port=3306
protocol=MariaDBBackend

[RW-Split-Router]
type=service
router=readwritesplit
servers=server1,server2,server3
user=repl
password=secret

[RW-Split-Listener]
type=listener
service=RW-Split-Router
protocol=MariaDBClient
port=3306

[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=server1,server2,,server3
user=repl
password=secret

위 설정 파일을 이용해서 컨피그맵을 생성한다.

k delete cm maxscale
k create configmap maxscale --from-file=maxscale.cnf
k rollout restart deploy maxscale1

MaxScale용 사용자와 패스워드를 repl, secret로 정의했다. mariadb-0로 접속해서 사용자를 생성한다. mariadb-1,mariadb-2 로 생성된 사용자 데이터가 동기화되었음을 확인한다.

MariaDB [(none)]> CREATE USER 'repl'@'%' IDENTIFIED BY 'secret';
Query OK, 0 rows affected (0.008 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES  ON *.* TO 'repl'@'%';
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> select user, host from mysql.user;
+-------------+-----------+
| User        | Host      |
+-------------+-----------+
| repl        | %         |
| root        | %         |
| healthcheck | 127.0.0.1 |
| healthcheck | ::1       |
| healthcheck | localhost |
| mariadb.sys | localhost |
| root        | localhost |
+-------------+-----------+
7 rows in set (0.002 sec)

위 과정이 끝나면 웹 콘솔에서 아래와 같은 대시보드 확인이 가능하다.

0개의 댓글