DB 클러스터링

Jiny's 개발 일기·2023년 2월 19일
0

Projects

목록 보기
3/8

DB 클러스터링

  • InnoDB 클러스터를 mysql 셸을 통해 생성할 수 있다.
  • MySQL 3대를 준비하고 이를 하나의 클러스터로 묶는 작업
  • 이 모든 작업은 real mysql 8.0이라는 책을 참고 하였다.
  • 과정은 이미 책에 나와 있으므로 하면서 생긴 문제와 결과를 중심으로 포스팅 하겠다.

Trouble Shooting

1번

Dba.get_cluster: This function is not available through a session to a standalone instance (metadata exists, instance belongs to that metadata, but GR is not active)
  • cluster = dba.reboot_cluster_from_complete_outage();
  • dba.add_instance를 실패하고 나서 생긴 듯 함
  • cluset를 재시작

2번

mysql-py []> cluster.add_instance("icadmin@ic-node2:3306")
Traceback (most recent call last):
  File "<string>", line 1, in <module>
RuntimeError: Cluster.add_instance: The instance 'ic-node2:3306' is already part of another Replication Groups

d- ba.add_instance 가 중간에 실패해서 이상한 group으로 들어간 듯 함

결과

성공적으로 Cluster가 생성된 모습

mysql-py []> cluster.status()
{
    "clusterName": "testCluster",
    "defaultReplicaSet": {
        "name": "default",
        "primary": "ic-node1:3306",
        "ssl": "REQUIRED",
        "status": "OK",
        "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.",
        "topology": {
            "ic-node1:3306": {
                "address": "ic-node1:3306",
                "mode": "R/W",
                "readReplicas": {},
                "replicationLag": null,
                "role": "HA",
                "status": "ONLINE",
                "version": "8.0.30"
            },
            "ic-node2:3306": {
                "address": "ic-node2:3306",
                "mode": "R/O",
                "readReplicas": {},
                "replicationLag": null,
                "role": "HA",
                "status": "ONLINE",
                "version": "8.0.30"
            },
            "ic-node3:3306": {
                "address": "ic-node3:3306",
                "mode": "R/O",
                "readReplicas": {},
                "replicationLag": null,
                "role": "HA",
                "status": "ONLINE",
                "version": "8.0.30"
            }
        },
        "topologyMode": "Single-Primary"
    },
    "groupInformationSourceMember": "ic-node1:3306"
}

Insert된 테스트 데이터가 Cluster에 그대로 복제된 모습

# node1
root@ic-node1:~/test_db# mysql -u root -p -t < employees.sql
Enter password:
+-----------------------------+
| INFO                        |
+-----------------------------+
| CREATING DATABASE STRUCTURE |
+-----------------------------+
+------------------------+
| INFO                   |
+------------------------+
| storage engine: InnoDB |
+------------------------+
+---------------------+
| INFO                |
+---------------------+
| LOADING departments |
+---------------------+
+-------------------+
| INFO              |
+-------------------+
| LOADING employees |
+-------------------+
+------------------+
| INFO             |
+------------------+
| LOADING dept_emp |
+------------------+
+----------------------+
| INFO                 |
+----------------------+
| LOADING dept_manager |
+----------------------+
+----------------+
| INFO           |
+----------------+
| LOADING titles |
+----------------+
+------------------+
| INFO             |
+------------------+
| LOADING salaries |
+------------------+
+---------------------+
| data_load_time_diff |
+---------------------+
| 00:00:49            |
+---------------------+
# node2
mysql> show databases;
+-------------------------------+
| Database                      |
+-------------------------------+
| employees                     |
| information_schema            |
| mysql                         |
| mysql_innodb_cluster_metadata |
| performance_schema            |
| sys                           |
+-------------------------------+
6 rows in set (0.22 sec)

# node3
mysql> show databases;
+-------------------------------+
| Database                      |
+-------------------------------+
| employees                     |
| information_schema            |
| mysql                         |
| mysql_innodb_cluster_metadata |
| performance_schema            |
| sys                           |
+-------------------------------+
6 rows in set (0.08 sec)

MySQL 라우팅 정보

JDBC 연결 테스트

Spring을 통해 Insert된 데이터 조회 테스트

  • 적으로 Connection 연결 및 데이터를 가져오고 있다.
  • 복제로 인한 성능 분석까지 해보고 싶지만 여기서 데이터 베이스를 하나 더 추가하면 DB 4개 Router 1개 web server 1개 JMeter 1개 총 7대의 서버가 돌아가야 되는데 리소스 한계로 여기서 멈추겠다
profile
옛날 블로그 주소 : https://jeongjin984.github.io/

0개의 댓글