문서번호 : 11-537587
유의 사항
용어 해설
용어 | 설명 | 비고 (동의어) |
비동기(Non-Sync) 엔진 변수 | 클러스터 전체가 아닌 개별 노드 단위로 적용되는 엔진 변수 | = 비동기 변수 |
리밸런스(Rebalance) | 데이터베이스의 파티션들을 개별 노드간에 고르게 재분배하는 작업 | = 파티션 재조정 |
클러스터에 미치는 영향 검토하기
공통사항
•
HA가 활성화 된 클러스터의 경우 2개 가용그룹의 균형을 고려해야 합니다.
•
리밸런스(Rebalance) 진행 중 CPU 부하는 5% 이내로 미미하지만, 네트워크 트래픽 및 디스크 I/O의 증가로 인해 시스템 성능에 영향을 미칠 수 있습니다.
•
서비스 중단 없이(Online) 리밸런스 작업이 가능하지만, 작업 중 발생하는 데이터 변경량이 많을수록 동기화에 소요되는 시간이 증가합니다.
•
각 파티션의 리밸런스 완료 시점에는 파티션 승격(Promote)을 위해 약 1초간 락(Lock)이 발생합니다.
Scale-in
•
제거되는 노드의 파티션들은 잔여 노드들로 자동 리밸런스 됩니다.
•
노드 삭제 시 그만큼 클러스터 전체 자원(CPU, 메모리, 네트워크, 스토리지 등)이 감소하므로, 사전에 잔여 노드의 가용 자원을 반드시 점검해야 합니다.
•
또한, 물리적 자원 용량 뿐만 아니라 엔진에 설정된 제한들(maximum_memory, maximum_table_memory 변수 설정 등)도 함께 점검해야 합니다.
Scale-in
1. 제거 대상 노드의 MEMSQL ID 확인
제거할 노드의 MEMSQL ID를 확인합니다. (아래는 예시입니다.)
$ sdb-admin list-nodes
+------------+------------+---------------+------+---------------+--------------+---------+----------------+--------------------+--------------+
| MemSQL ID | Role | Host | Port | Process State | Connectable? | Version | Recovery State | Availability Group | Bind Address |
+------------+------------+---------------+------+---------------+--------------+---------+----------------+--------------------+--------------+
| 2E42499AE3 | Master | 10.41.227.222 | 3306 | Running | True | 7.8.2 | Online | | 0.0.0.0 |
| 3B1746D521 | Aggregator | 10.41.38.230 | 3306 | Running | True | 7.8.2 | Online | | 0.0.0.0 |
| E726A01B66 | Leaf | 10.41.153.177 | 3306 | Running | True | 7.8.2 | Online | 1 | 0.0.0.0 |
| A96032D8E5 | Leaf | 10.41.30.194 | 3306 | Running | True | 7.8.2 | Online | 1 | 0.0.0.0 |
| 042473BB83 | Leaf | 10.41.33.105 | 3306 | Running | True | 7.8.2 | Online | 1 | 0.0.0.0 |
| 72E348C418 | Leaf | 10.41.34.134 | 3306 | Running | True | 7.8.2 | Online | 1 | 0.0.0.0 |
+------------+------------+---------------+------+---------------+--------------+---------+----------------+--------------------+--------------+
SQL
복사
2. 노드 제거
제거할 노드의 <MemSQL ID> 를 인자로 (10 자리 이상) 복사하여 넣어 줍니다. 다음은 2개 노드를 제거하는 예시입니다.
$ sdb-admin delete-node --memsql-id 042473BB83 --stop -y
$ sdb-admin delete-node --memsql-id 72E348C418 --stop -y
Bash
복사
3. 클러스터 확인하기
$ sdb-admin list-nodes
+------------+------------+---------------+------+---------------+--------------+---------+----------------+--------------------+--------------+
| MemSQL ID | Role | Host | Port | Process State | Connectable? | Version | Recovery State | Availability Group | Bind Address |
+------------+------------+---------------+------+---------------+--------------+---------+----------------+--------------------+--------------+
| 2E42499AE3 | Master | 10.41.227.222 | 3306 | Running | True | 7.8.2 | Online | | 0.0.0.0 |
| 3B1746D521 | Aggregator | 10.41.38.230 | 3306 | Running | True | 7.8.2 | Online | | 0.0.0.0 |
| E726A01B66 | Leaf | 10.41.153.177 | 3306 | Running | True | 7.8.2 | Online | 1 | 0.0.0.0 |
| A96032D8E5 | Leaf | 10.41.30.194 | 3306 | Running | True | 7.8.2 | Online | 1 | 0.0.0.0 |
+------------+------------+---------------+------+---------------+--------------+---------+----------------+--------------------+--------------+
SQL
복사
3. 클러스터의 호스트 목록 제거 및 확인 (필요시)
노드가 탑재된 호스트에 더 이상 운영되는 노드가 없을 경우 다음 절차를 수행합니다.
•
호스트 제거
$ sdb-toolbox-config uregister-host 10.41.33.105 --yes
$ sdb-toolbox-config uregister-host 10.41.34.134 --yes
SQL
복사
•
호스트 목록 확인
$ sdb-toolbox-config list-hosts
+---------------+------------+---------------+---------------+
| Host | Local Host | SSH address | Identity File |
+---------------+------------+---------------+---------------+
| 10.41.227.222 | Yes | | |
| 10.41.38.230 | No | 10.41.38.230 | |
| 10.41.153.177 | No | 10.41.153.177 | |
| 10.41.30.194 | No | 10.41.30.194 | |
+---------------+------------+---------------+---------------+
SQL
복사
Scale-out
먼저, 해당 호스트(장비)가 클러스터에 등록되어 있으며, 엔진 설치가 완료되어 있음을 가정합니다즉, [SingleStore 설치 가이드 - SingleStore 클러스터 배포 - SingleStore Package 설치(Online 또는 Offline)] 이하 절차를 마쳐야 합니다.
아래 절차는 노드를 하나씩 [노드생성] → [역할 부여] 순으로 반복하여 추가하는 예시입니다.
1. 노드 생성
•
availability-group <1 or 2> : HA 가 활성화 된 경우 추가할 가용그룹 1 또는 2 선택
$ sdb-admin create-node --host <NEW_LF1_IP> --port <NEW_LF1_PORT> --password <dbpw> --availability-group <1 or 2> --base-install-dir ~/memsql/nodes/NEW_LF1 -y
… 출력 생략 …
Bash
복사
2. 역할 부여
$ sdb-admin add-leaf --memsql-id `sdb-admin list-nodes -q -r unknown` --password <dbpw> -y
Bash
복사
•
참고
만약, 이미 여러 노드를 생성한 경우라면, 해당 노드의 <MemSQL ID> 를 인자로 (10 자리 이상) 복사하여 넣어 줍니다.
$ sdb-admin add-leaf --memsql-id <MemSQL_ID> --password <dbpw> ...기타 옵션 중략... -y
Bash
복사
3. 추가할 노드가 더 있을 경우 1. ~ 2. 를 반복
4. 엔진 변수 설정
클러스터에 신규 노드를 추가할 때, 기존에 변경된 비동기 엔진 변수는 신규 노드에 자동으로 적용되지 않으므로, 이 변수들을 찾아 직접 설정(적용)해 주어야 합니다. 각 변수의 적용 범위(Scope) 및 방법은 매뉴얼을 참고하시기 바랍니다.
•
변수 설정 방법
◦
일시적 적용 (SET GLOBAL) : 런타임에 전역으로 설정. 단, 노드 재시작 시 설정값이 유지되지 않음
◦
영구적 적용 (sdb-admin update-config) : 노드 재시작 후에도 설정값이 유지됨
▪
--set-global 플래그: 재시작 시점 뿐만 아니라 현재 실행 중인 노드에도 즉시 적용함
▪
--all 플래그: 클러스터 내 모든 노드에 해당 설정을 한 번에 전파함
◦
유의 사항) 세션 스코프 변수를 런터임에 전역으로 설정하기
▪
연결풀 재설정 : 모든 어그리게이터 노드에서FLUSH CONNECTION POOLS; 명령을 실행
▪
이미 연결된 세션은 재연결하거나, 해당 세션에서 직접 설정 필요
•
참고 사항
◦
주요 비동기 엔진 변수 예시
▪
maximum_memory
▪
maximum_table_memory
▪
system_time_zone, time_zone : 별도 구성 옵션 default_time_zone을 통해 설정
◦
변경된 엔진 변수 찾기 예시 : 다음 명령어를 통해 노드의 엔진 변수를 수집한 후, 기존-신규노드간 비교
# Toolbox 명령어
$ sdb-report collect --only showVariables # 모든 노드가 수집됨
# SQL 명령어
singlestore> show variables like '%'; -- 해당 노드만 수집됨
JavaScript
복사
◦
설정 변경 및 적용 예시 : 특정 노드에 대해 영구 설정 후 재기동
$ sdb-admin update-config --set-global --key <변수(옵션)명> --value <변수값> --memsql-id <해당 노드의 MemSQL ID>
$ sdb-admin restart-node -y --memsql-id <해당 노드의 MemSQL ID>
JavaScript
복사
5. 파티션 재조정(Rebalance)
•
REBALANCE 명령을 통해 기존 노드의 파티션을 새로운 노드로 리밸런스해야 합니다.
클러스터에 부하 발생과 파티션의 반복 이동을 피하기 위해, 모든 노드를 추가한 후 마지막에 수행하는 것을 권장합니다
1.
클러스터 접속
$ singlestore -uroot -p<dbpw>
Bash
복사
2.
리밸런스 작업 평가해 보기 (선택사항)
•
방안 1 : 특정 데이터베이스에 대해 실행
singlestore> explain rebalance partitions on <db_name>;
SQL
복사
•
방안 2 : 모든 데이터베이스에 대해 일괄 실행
singlestore> explain rebalance all databases;
SQL
복사
3.
리밸런스 실행
•
방안 1 : 특정 데이터베이스에 대해 실행
singlestore> rebalance partitions on <db_name>;
SQL
복사
•
방안 2 : 모든 데이터베이스에 대해 일괄 실행
singlestore> rebalance all databases;
SQL
복사
4.
리밸런스 상태 확인
•
방안 1 : 특정 데이터베이스에 대해 실행
singlestore> show rebalance status on <db_name>;
SQL
복사
•
방안 2 : 모든 데이터베이스에 대해 일괄 실행
singlestore> show rebalance all databases status;
SQL
복사
•
방안 3 : information_schema.MV_REBALANCE_STATUS 뷰 조회하기
SELECT * FROM information_schema.MV_REBALANCE_STATUS
WHERE database_name = 'db_name'; -- 필요시 조건 추가
JavaScript
복사
일자 | 작성자 | 비고 |
2022.09.15 | khkum | 최초작성 |
2022.09.19 | jnshin | 유의사항 수정 |
2026.08.10 | khkum | 유의사항 수정 및 엔진 변수 설정 추가 |

