[MySQL] Percona for MySQL을 이용하여 InnoDB Cluster 구축하기

Dong yeong Kim·2023년 11월 12일
0

DBMS

목록 보기
13/15

OS : Rocky Linux 8.8 64bit

MySQL : Percona for MySQL 8.0.34

InnoDB Cluster : 1(Primary), 2(Secondary) (Single Primary)

node1(DB, Router) : 10.64.70.21
node2(DB) : 10.64.70.22
node3(DB) : 10.64.70.23


안녕하세요, 이번 포스팅은 Percona for MySQL을 이용하여 InnoDB Cluster 구축입니다.

사실 기존 Oracle MySQL과 방식은 차이가 없습니다. 다만, 저번 ReplicaSet 처럼 Orchestrator에 등록을 하고 싶을 때, 약간의 코드 빌드의 버그가 있어 수정이 필요합니다.
해당 내용은 다음 포스팅에 다루겠습니다.

해당 포스팅은 Oracle 제품을 포크한 Percona 제품군을 사용할 예정이니, 아래 URL에서 Repo 다운로드 및 설정하셔서, Shell 및 Router 설치하시면 됩니다.
https://docs.percona.com/percona-server/8.0/yum-repo.html

이번에 모 회사에서 클라우드 DBaaS for MySQL 구축 사업 프로젝트를 하게 되었는데, 여기서 다루려고 하는 제품이 Replication과 InnoDB Cluster였습니다.
기존에는 Replication을 전통 방식으로 진행 하였으나, Shell이라는 강력한 기능을 이용한 ReplicaSet을 권유 드렸고, 결과로 ReplicaSet과 InnoDB Cluster을 도입하게 되었습니다.

여기서 MySQL Shell을 지겹도록 사용했는데요, 기존에는 불편한 부분이 없지 않아 있었지만 사용하면 할수록 강력한 기능들이 많아 정말 좋은 변화가 아닐까 합니다.


InnoDB Cluster?

ReplicaSet에서는 그저 Replication에서 조금의 변화가 이루어졌기에 따로 포스팅하진 않았지만, InnoDB Cluster는 Oracle에서 지원하는 유일(?)한 고가용성 제품군이며 아키텍쳐가 기존과 다르기에 먼저 설명이 필요할 것 같습니다.

기본적으로 전통적인 Replication 및 ReplicaSet 구조는 외부 구현 없이는 고가용성 지원을 하지 않습니다. 이전 포스팅 처럼, Orchestrator나 MHA와 같은 외부 Failover 솔루션과, MMM, 그리고 RHCS, 외부 업체 멘텍 제품군 MCCS, Veritas... 등과 같이 스토리지 동기화를 구현해야 원하는 목표를 이룰 수 있습니다.

대표적으로 카카오는 MHA, Toss에서는 MMM을 주로 사용 중인 것으로 알고 있습니다.

이러한 솔루션들은 MySQL에서 공식적으로 지원하지 않는 것이기에, 현재 서버 환경에 맞게 코드를 약간 수정하거나, 하물며 호환이 되지 않는 상황도 존재합니다.

예를 들어 MHA는 아래와 같이 2018년이 마지막 릴리즈입니다.

그리고 Orchestrator 또한 공식적으로 아래와 같이 2021년이 마지막 릴리즈입니다.

물론 아직 MySQL 8.0 버전(8.1 New Feature 제외)까지는 여러 기업에서 별 문제없이 위 솔루션들이 운영되고 있으나, 더이상 MySQL 버전에 맞춰 릴리즈가 되지 않아 사용함에 부담감이 있습니다.

대표적으로 Toss 기술 세미나에서 MMM을 당사 환경에 맞게 코드를 수정하여 운영하고 있다고 합니다.
반대로 말하면, 이런 테크풀이 없는 기업에서는 몇 년전에 릴리즈된 솔루션을 사용해야 한다는 의미가 될 수 있습니다.


InnoDB Cluster는 Orcale에서 공식적으로 개발, 배포중인 제품입니다.

대표적으로 아래와 같은 제품, 기능과 함께 사용됩니다.

MySQL Shell

요새 Oracle에서 MySQL Shell을 꽤나 많이 밀고 있습니다.
그에 릴리즈 노트 및 신기능 또한 MySQL Shell을 이용한 제품군들이 많습니다.

MySQL Shell은 JS, Python와 같은 언어로 스크립팅을 할 수 있으며, 공식 레퍼런스에 귀가 닳도록 얘기하는 Admin API가 내장되어 있습니다.

대표적으로 ReplicaSet과 InnoDB Cluster를 구성하기 위한 dba객체 또한 Admin API입니다.

Group Replication

InnoDB Cluster가 이루어지는 가장 핵심적인 요소입니다.

Group Replication은 사실 최근에 구현된 기능이 아닌, 꽤나 오래 전부터 구현된 기능입니다. (MySQL 5.7)

대표적으로 비동기 복제 방식인 Replication과 다르게 Group Replication는 동기 복제 방식을 사용하고 있습니다. 비동기 복제는 Primary의 변경 사항을 반영하기 위해 Replica에서는 별도의 스레드로 사용하여 적용합니다. 여기서의 간극으로 여러 장애 발생 시 데이터의 정합성에 문제가 발생할 수 있습니다. 이에 반해, Group Replication은 동기 복제 방식을 적용해 모든 노드 간의 변경 사항이 일시적으로 적용되므로, 일관성이 높아집니다.

하지만, 이렇다고 데이터가 일관성이 전부 일치하냐? 아쉽지만 그것도 아닙니다.
각 노드에 유입되는 트랜잭션 반영이 각각 노드마다 Disk에 Flush되는 속도도 다를 수 있고, 네트워크, 서버 스펙 등.. 여러가지 상황을 생각했을 때 비동기 복제"보다" 정합성이 높을 수 있다는 의미입니다.

또한, 단일 마스터가 아닌 멀티 마스터를 구현하여 서로간에 쓰기 작업을 수행할 수 있습니다.
가장 이상적인 구조라고 생각하지만... 여러 사례에서 Multi Primary 모드는 아직 섣부른 기능이 아닌가 싶습니다. 데이터의 정합성이 맞지 않다든지, 다소 많은 장애 상황을 겪어봤기 떄문입니다.

MySQL Router

이전에 HAProxy를 포스팅 했을 때, 잠깐 MySQL Router를 언급했는데요.

동일하게 MySQL Router가 일종의 Proxy 서버를 담당하여 로드 밸런싱을 지원합니다.
최근에는 MySQL Router가 8.2부터 Read-Write Splitted 기능 및 다양한 기능을 제공해 기대가 됩니다.


MySQL Shell

먼저 ReplicaSet과 동일하게 InnoDB Cluster 또한 각 노드에 서로 접근이 가능한 계정 하나가 필요합니다.

저는 예시를 들기 위하여 'shell@%' 이라는 계정을 만들고, 해당 계정을 검증하겠습니다.

mysql> CREATE USER 'shell2'@'%' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.01 sec)

각 노드에서 진행해도 되고, 한 노드에서 진행해 mysqldump등 백업 & 복구로도 가능합니다.

해당 계정이 InnoDB Cluster Admin 계정에 적합한지 검증합니다. (각 노드 수행)

 MySQL  localhost:33060+ ssl  JS > dba.configureInstance('shell@10.64.70.21:33061')
Please provide the password for 'shell@10.64.70.21:33061': *******
Save password for 'shell@10.64.70.21:33061'? [Y]es/[N]o/Ne[v]er (default No): y
Configuring MySQL instance at 10.64.70.23:33061 for use in an InnoDB cluster...
ERROR: The account 'shell'@'%' is missing privileges required to manage an InnoDB cluster:
GRANT CLONE_ADMIN, CONNECTION_ADMIN, CREATE USER, EXECUTE, FILE, GROUP_REPLICATION_ADMIN, PERSIST_RO_VARIABLES_ADMIN, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, ROLE_ADMIN, SELECT, SHUTDOWN, SYSTEM_VARIABLES_ADMIN ON *.* TO 'shell'@'%' WITH GRANT OPTION;
GRANT DELETE, INSERT, UPDATE ON mysql.* TO 'shell'@'%' WITH GRANT OPTION;
GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES, SHOW VIEW, TRIGGER, UPDATE ON mysql_innodb_cluster_metadata.* TO 'shell'@'%' WITH GRANT OPTION;
GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES, SHOW VIEW, TRIGGER, UPDATE ON mysql_innodb_cluster_metadata_bkp.* TO 'shell'@'%' WITH GRANT OPTION;
GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES, SHOW VIEW, TRIGGER, UPDATE ON mysql_innodb_cluster_metadata_previous.* TO 'shell'@'%' WITH GRANT OPTION;
For more information, see the online documentation.
Dba.configureInstance: The account 'shell'@'%' is missing privileges required to manage an InnoDB cluster. (RuntimeError)

InnoDB Cluster 관리 계정을 만들기 위해 위 권한이 필요하다고 합니다.
그대로 Copy & Paste하여 권한 부여합니다.

 MySQL  localhost:33060+ ssl  JS > dba.configureInstance('shell@10.64.70.21:33061')
The instance '10.64.70.21:33061' belongs to an InnoDB Cluster.
Configuring local MySQL instance listening at port 33061 for use in an InnoDB cluster...

This instance reports its own address as 10.64.70.21:33061

applierWorkerThreads will be set to the default value of 4.

The instance '10.64.70.21:33061' is valid to be used in an InnoDB cluster.
The instance '10.64.70.21:33061' is already ready to be used in an InnoDB cluster.

Successfully set the value of replica_parallel_workers.

다시 수행해보니 충분한 권한이 있다고 반환됩니다.

클러스터를 생성하여 변수를 선언합니다.

 MySQL  localhost:33060+ ssl  JS > cl = dba.createCluster('cluster_1')
A new InnoDB Cluster will be created on instance '10.64.70.21:33061'.

Validating instance configuration at localhost:33061...

This instance reports its own address as 10.64.70.21:33061

Instance configuration is suitable.
NOTE: Group Replication will communicate with other members using '10.64.70.21:33061'. Use the localAddress option to override.

* Checking connectivity and SSL configuration...

Creating InnoDB Cluster 'cluster_1' on '10.64.70.21:33061'...

Adding Seed Instance...
Cluster successfully created. Use Cluster.addInstance() to add MySQL instances.
At least 3 instances are needed for the cluster to be able to withstand up to
one server failure.

<Cluster:cluster_1>

이제 다른 Instance를 클러스터 그룹에 추가합니다. (node2, node3 동일)

 MySQL  localhost:33060+ ssl  JS > cl.addInstance('10.64.70.23:33061')

WARNING: A GTID set check of the MySQL instance at '10.64.70.23:33061' determined that it contains transactions that do not originate from the cluster, which must be discarded before it can join the cluster.

10.64.70.23:33061 has the following errant GTIDs that do not exist in the cluster:
b902f580-812c-11ee-a0f5-0800275193ca:1-11

WARNING: Discarding these extra GTID events can either be done manually or by completely overwriting the state of 10.64.70.23:33061 with a physical snapshot from an existing cluster member. To use this method by default, set the 'recoveryMethod' option to 'clone'.

Having extra GTID events is not expected, and it is recommended to investigate this further and ensure that the data can be removed prior to choosing the clone recovery method.

Please select a recovery method [C]lone/[A]bort (default Abort): c
Validating instance configuration at 10.64.70.23:33061...

This instance reports its own address as 10.64.70.23:33061

Instance configuration is suitable.
NOTE: Group Replication will communicate with other members using '10.64.70.23:33061'. Use the localAddress option to override.

* Checking connectivity and SSL configuration...
A new instance will be added to the InnoDB Cluster. Depending on the amount of
data on the cluster this might take from a few seconds to several hours.

Adding instance to the cluster...

Monitoring recovery process of the new cluster member. Press ^C to stop monitoring and let it continue in background.
Clone based state recovery is now in progress.

NOTE: A server restart is expected to happen as part of the clone process. If the
server does not support the RESTART command or does not come back after a
while, you may need to manually start it back.

* Waiting for clone to finish...
NOTE: 10.64.70.23:33061 is being cloned from 10.64.70.21:33061
** Stage DROP DATA: Completed
** Clone Transfer
    FILE COPY  ############################################################  100%  Completed
    PAGE COPY  ############################################################  100%  Completed
    REDO COPY  ############################################################  100%  Completed

NOTE: 10.64.70.23:33061 is shutting down...

* Waiting for server restart... ready
* 10.64.70.23:33061 has restarted, waiting for clone to finish...
** Stage RESTART: Completed
* Clone process has finished: 2.29 GB transferred in 9 sec (254.21 MB/s)

State recovery already finished for '10.64.70.23:33061'

The instance '10.64.70.23:33061' was successfully added to the cluster.

경고 문구가 뜨는 것은, 제가 테스트 환경 구축을 위해 각 노드의 GTID 초기화(RESET MASTER)를 수행하여 뜨는 문구이므로, 초기 구축에서는 신경 쓸 필요 없는 부분입니다.

마지막으로 클러스터 상태를 확인합니다.

 MySQL  localhost:33060+ ssl  JS > cl.status()
{
    "clusterName": "cluster_1",
    "defaultReplicaSet": {
        "name": "default",
        "primary": "10.64.70.21:33061",
        "ssl": "REQUIRED",
        "status": "OK",
        "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.",
        "topology": {
            "10.64.70.21:33061": {
                "address": "10.64.70.21:33061",
                "memberRole": "PRIMARY",
                "mode": "R/W",
                "readReplicas": {},
                "replicationLag": "applier_queue_applied",
                "role": "HA",
                "status": "ONLINE",
                "version": "8.0.34"
            },
            "10.64.70.22:33061": {
                "address": "10.64.70.22:33061",
                "memberRole": "SECONDARY",
                "mode": "R/O",
                "readReplicas": {},
                "replicationLag": "applier_queue_applied",
                "role": "HA",
                "status": "ONLINE",
                "version": "8.0.34"
            },
            "10.64.70.23:33061": {
                "address": "10.64.70.23:33061",
                "memberRole": "SECONDARY",
                "mode": "R/O",
                "readReplicas": {},
                "replicationLag": "applier_queue_applied",
                "role": "HA",
                "status": "ONLINE",
                "version": "8.0.34"
            }
        },
        "topologyMode": "Single-Primary"
    },
    "groupInformationSourceMember": "10.64.70.21:33061"
}

생각보다 아주 간단한 구축입니다.
cl.setPrimaryInstance() 등 기타 여러 기능으로 클러스터를 조작할 수 있습니다.


MySQL Router

사실 MySQL Router는 부트스트랩이라는 기능을 제공하여, 별다른 설정 없이 커맨드 하나만으로 Router를 구축할 수 있습니다.
여러가지 옵션을 넣어 초기 구축을 할 수도 있지만, 이번 포스팅은 구축을 목적으로 두는 것이기에 간단히 부트스트랩으로 제공합니다.

그리고 가장 이상적인 구조는 Router를 다른 서버에 두는 것이지만, 이번에는 Node1에 설치하도록 하겠습니다.

MySQL Router 설치 후 아래 커맨드를 입력합니다.

[root@vm2-1 ~]# mysqlrouter --bootstrap shell@10.64.70.21:33061 --name ic-router1  -d /mysql_router/ --user=mysqlrouter
Please enter MySQL password for shell:
# Bootstrapping MySQL Router instance at '/mysql_router'...

- Creating account(s) (only those that are needed, if any)
- Verifying account (using it to run SQL queries that would be run by Router)
- Storing account in keyring
- Adjusting permissions of generated files
- Creating configuration /mysql_router/mysqlrouter.conf

# MySQL Router 'ic-router1' configured for the InnoDB Cluster 'cluster_1'

After this MySQL Router has been started with the generated configuration

    $ mysqlrouter -c /mysql_router/mysqlrouter.conf

InnoDB Cluster 'cluster_1' can be reached by connecting to:

## MySQL Classic protocol

- Read/Write Connections: localhost:6446
- Read/Only Connections:  localhost:6447

## MySQL X protocol

- Read/Write Connections: localhost:6448
- Read/Only Connections:  localhost:6449

--bootstrap : 별 다른 설정 없이, 주어진 정보만으로 초기 구성을 해주는 커맨드입니다.

-- name : router에 이름을 입력하며, 이는 각 DB Node의 mysql_innodb_cluster_metadata.routers 등에 정보가 저장됩니다.
// 해당 설정은 MYSQL Router의 이중화 (L4 로드밸런싱 등)를 위해 사용될 수도 있습니다. //

-d : mysql_router 운영에 필요한 디렉토리를 지정합니다. (지정하지 않으면 default 값입니다.)

--user : MySQL Router를 운영/관리할 OS 계정을 선택합니다. (dnf 설치 시 mysqlrouter 계정이 생성됩니다.)

자동으로 구성된 디렉토리에 파일을 살펴 보겠습니다.

[root@vm2-1 /]# cat /mysql_router/data/state.json
{
    "metadata-cache": {
        "group-replication-id": "75dc0c74-812a-11ee-b9f9-08002734b9ef",
        "cluster-metadata-servers": [
            "mysql://10.64.70.21:33061",
            "mysql://10.64.70.22:33061",
            "mysql://10.64.70.23:33061"
        ]
    },
    "version": "1.0.0"

부트스트래핑된 MySQL Router는 mysql_innodb_cluster_metadata에 접근하여 현재 클러스터의 정보를 가져오고, 이를 토대로 라우팅합니다.

또한, 구성 시 자동으로 해당 정보들을 가져오기 위해 아래와 같은 랜덤한 계정이 생성됩니다.
(mysql_router1_rh1dcy8gabrl)

 MySQL  localhost:33060+ ssl  SQL > SELECT user,host FROM mysql.user;
+----------------------------+------------+
| user                       | host       |
+----------------------------+------------+
| mysql_innodb_cluster_1     | %          |
| mysql_innodb_cluster_2     | %          |
| mysql_innodb_cluster_3     | %          |
| mysql_router1_rh1dcy8gabrl | %          |
| orchestrator               | %          |
| shell                      | %          |
| test                       | %          |
| rsadmin                    | 10.64.70.% |
| mysql.infoschema           | localhost  |
| mysql.session              | localhost  |
| mysql.sys                  | localhost  |
| root                       | localhost  |
+----------------------------+------------+
15 rows in set (0.0004 sec)

해당 계정을 명시적으로 지정하고 싶다면, 부트스트래핑 당시 --account 옵션을 사용하여 계정을 생성할 수 있습니다.


생각보다 설치가 간단하게 끝났습니다.
위 반환값을 보면, Read/Write 연결 포트는 6446, Read 포트는 6447포트임을 알 수 있습니다.

그렇다면 이것이 필요한 이유가 무엇일까요?

한가지 가정을 들어, InnoDB Cluster가 운영중에 장애가 발생했다고 하겠습니다.
보통 서비스는 DB에 직접 붙는것이 아닌, 주로 WAS나 기타 윗 단에서 필요한 정보를 주고, 받고, 정제하여 DB 데이터를 가져옵니다.

여기서 JDBC를 이용하여 DB에 접근하게 되는데, 여기서 "명시적" 으로 IP를 기재해야합니다.
그렇다면, 초기에 Primary IP를 기재하면 문제가 없겠지만, 이러한 설정은 Secondary DB는 전혀 사용하지 않을 뿐더러 장애 발생 시 DB 커넥션이 불가합니다.

이러한 상황을 방지하기 위해, InnoDB Cluster는 Primary 장애 시 자동으로 Primary를 바꾸고(승격하고), MySQL Router는 Primary를 찾아 라우팅합니다.

결론적으로, WAS나 윗 단에서는 어떤 DB에 접근해야하는지 정확한 정보 필요없이, 그저 Router의 IP와 Port만 알면 됩니다.

MySQL Router를 기동하고, Router의 포트를 이용하여 DB에 접근하겠습니다.

그 전에, 부트스트래핑 당시 MySQL Router 디렉토리 경로를 기본값이 아닌 임의로 지정했기에 서비스 파일을 수정 후 기동합니다.

[root@vm2-1 /]# cat /usr/lib/systemd/system/mysqlrouter.service
# Copyright (c) 2020, 2023, Oracle and/or its affiliates.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation.  The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License, version 2.0, for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA

[Unit]
Description=Percona MySQL Router
After=network-online.target
Wants=network-online.target
After=syslog.target


[Service]
Type=notify
User=mysqlrouter
Group=mysqlrouter

# Start main service

## -c 옵션으로 conf 경로 추가
ExecStart=/usr/bin/mysqlrouter -c /mysql_router/mysqlrouter.conf

# Sets open_files_limit
LimitNOFILE = 10000

Restart=on-failure

PrivateTmp=true

[Install]
WantedBy=multi-user.target

[root@vm2-1 /]# systemctl deadmin-reload
[root@vm2-1 /]# systemctl start mysqlrouter

[root@vm2-1 /]# netstat -nltp | grep router
tcp        0      0 0.0.0.0:6446            0.0.0.0:*               LISTEN      66883/mysqlrouter
tcp        0      0 0.0.0.0:6447            0.0.0.0:*               LISTEN      66883/mysqlrouter
tcp        0      0 0.0.0.0:6448            0.0.0.0:*               LISTEN      66883/mysqlrouter
tcp        0      0 0.0.0.0:6449            0.0.0.0:*               LISTEN      66883/mysqlrouter
tcp        0      0 0.0.0.0:8443            0.0.0.0:*               LISTEN      66883/mysqlrouter

Node2번에서, mysqlrouter를 통해 Read/Write 포트에 접근 해보겠습니다.

[root@vm2-2 /]# mysql -ushell -p -h10.64.70.21 -P6446
mysql: [Warning] Using a password on the command line interface can be insecure.
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 536
Server version: 8.0.34-26 Percona Server (GPL), Release 26, Revision 0fe62c85

Copyright (c) 2009-2023 Percona LLC and/or its affiliates
Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> select @@hostname;
+------------+
| @@hostname |
+------------+
| vm2-1      |
+------------+
1 row in set (0.00 sec)

정상적으로 Primary 노드에 접근 되었습니다.

이번에는, Node1, Node3 에서 6447(RO)포트에 접근 해보겠습니다.

[root@vm2-1 /]# mysql -ushell -p -h10.64.70.21 -P6447
mysql: [Warning] Using a password on the command line interface can be insecure.
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 69
Server version: 8.0.34-26 Percona Server (GPL), Release 26, Revision 0fe62c85

Copyright (c) 2009-2023 Percona LLC and/or its affiliates
Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> select @@hostname;
+------------+
| @@hostname |
+------------+
| vm2-2      |
+------------+
1 row in set (0.00 sec)
[root@vm2-3 /]# mysql -ushell -p -h10.64.70.21 -P6447
mysql: [Warning] Using a password on the command line interface can be insecure.
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 45
Server version: 8.0.34-26 Percona Server (GPL), Release 26, Revision 0fe62c85

Copyright (c) 2009-2023 Percona LLC and/or its affiliates
Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> select @@hostname;
+------------+
| @@hostname |
+------------+
| vm2-3      |
+------------+
1 row in set (0.00 sec)

정상적으로 RO Node(Secondary)에 접근됨을 확인할 수 있습니다.


다음 포스팅은 MySQL Router를 Orchestrator에 등록하여 모니터링 해보겠습니다.

profile
날 것의 기술 '불'로그

0개의 댓글