[1] 개요
그동안 SingleStore 를 설치하는 여러 내용들이 있었습니다. 이제부터는 설치된 SingleStore 의 디렉토리 구조와 각종 설정 파일들의 역할을 알아보도록 하겠습니다. 이번 포스트에서 설명할 환경은 Windows10 WSL2 를 기준으로 패키지 관리 프로그램이 디폴트이 설치한 SingleStore 를 기준으로 설명합니다. tarball 로 사용자환경에 맞게 커스텀으로 설치한 환경은 지금 설명과 많이 다릅니다. 설치하는 방법은 아래 링크를 참조하시기 바랍니다.
version = 1
nodeMetadataFile = "/var/lib/memsql/nodes.hcl"
defaultInstallDir = "/var/lib/memsql"
user = "memsql"
* nodeMetadataFile : Node Meta Data File 또는 memsqlctl state file 로 현재 Host 에 설치된 Node 들의 정보
* defaultInstallDir : Node 가 설치된 Default Directory
* user : SingleStore Software 및 각종 파일의 Owner
[3] /var/lib/memsql/ : 디폴트 노드 설치 디렉토리
/var/lib/memsql
├── 4dd26075-2e57-4fe9-bd60-e80f9c6762a9
├── 60854544-c2ee-4c0b-b572-61fc0bcef7fe
├── db_files
├── nodes.hcl
└── nodes.hcl.lock
* Hashed Node ID 2개가 Directory 로 존재합니다. 하나는 Master Aggregator, 다른 하나는 Leaf
* db_files : secure_file_priv 엔진 변수로 설정된 directory 로 File Read/Write 가 가능한 디렉토리
* nodes.hcl : 아래 참조
[4] /var/lib/memsql/nodes.hcl : 현재 Host 에 설치된 Node 들의 정보
version = 1
node {
memsqlConfigPath = "/var/lib/memsql/4dd26075-2e57-4fe9-bd60-e80f9c6762a9/memsql.cnf"
password {
cipherText = "DhtEzDGl4ts+A1LxAeOPP7BtHaV/NeVzJ2KJAZvuzOA="
}
}
node {
memsqlConfigPath = "/var/lib/memsql/60854544-c2ee-4c0b-b572-61fc0bcef7fe/memsql.cnf"
password {
cipherText = "QnD1U1mCisIWmhoMPHVU+76n4TMdZUkh+IB4uWankzo="
}
}
secure = "ahyjdqEKrfYeh2vuC8aYNTHIHCV47HWwpNKo3B5lmac="
* 현재 Aggregator, Leaf 등 2개의 Node 가 설치됨
* memsqlConfigPath : 각각의 Node 별로 engine variable 을 설정하는 memsql.cnf 파일의 위치
* password 및 ciperText : root 비밀번호 및 암호화된 텍스트
[5] /var/lib/memsql/<hashed node id>/memsql.cnf : SingleStore Server 구동에 필요한 Engine 변수 설정
[server]
auditlogsdir = auditlogs
bind_address = 127.0.0.1
datadir = data
pid_file = memsqld.pid
plancachedir = plancache
port = 3307
tracelogsdir = tracelogs
basedir = .
core_file = true
lc_messages_dir = ./share
lock_wait_timeout = 60
secure_file_priv = /var/lib/memsql/db_files
snapshot_trigger_size = 2g
socket = memsql.sock
tmpdir = .
* 각종 directory : auditlogs, data, plancache, tracelogs, base
* port : 기본은 3306 이나 하나의 host 에서 port를 달리 설치하였으므로 3307, 3308 등으로 설정될 수 있음
* snapshot_trigger_size : 인메모리 로우스토어 사용시 DML 의 크기가 2G가 될 때 메모리 Snapshot 이 Disk로 Write 됨. 다음 Snapshot 이 Disk로 Write 될 때까지는 DML은 Transaction Log 파일에 먼저 Write 됨
* 수동으로 변경하는 것은 권장되지 않으며 대신 sdb-admin update-config 명령어 사용이 권장됨
[6] /var/lib/memsql/<hashed node id>/ : 노드별 데이터 및 설정파일 디렉토리
60854544-c2ee-4c0b-b572-61fc0bcef7fe
├── auditlogs
├── data
├── memsql.cnf
├── plancache
└── tracelogs
* auditlogs : audit logging 이 설정된 경우 해당 로그 저장 위치
* data : 컬럼스토어 파일, 스냅샷, 트랜잭션 로그 등등의 주요 데이터 파일 저장 위치
* plancache : SQL 컴파일후 작성된 Plan 이 저장되어 있는 Cache 위치
* tracelogs : SingleStore 서버의 활동 내역이 로깅되는 memsql.log 및 query.log, command.log 등 저장
[7] /var/lib/memsql/<hashed node id>/data : 주요 file 들의 저장 위치
data
├── blobs
├── logs
├── memsql.sock
├── memsql_id
├── memsql_proxy.sock
├── memsql_role
├── memsqld.pid
├── memsqld_safe.pid
├── snapshots
└── tempblobs
* blobs : ColumnStore Segment 파일 저장 위치
* logs : RowStore Transaction Log 파일 저장 위치
* snapshots : RowStore Snapshot 파일 저장 위치
* memsql_role : Aggregator / Leaf 역할 표시
* memsqld_safe.pid, memsqld_pid : SingleStore Server Daemon Process ID 저장
[8] User Database 생성 전 Data Directory 주요 파일 정보
neo@AP-L14:/var/lib/memsql/60854544-c2ee-4c0b-b572-61fc0bcef7fe/data$ ls -l blobs snapshots logs
blobs:
total 4
drwxr-xr-x 2 memsql memsql 4096 Sep 26 11:17 1
logs:
total 98304
-rw------- 1 memsql memsql 16777216 Sep 27 09:41 cluster_log_v1_0
-rw------- 1 memsql memsql 16777216 Sep 26 11:17 cluster_log_v1_4096
-rw------- 1 memsql memsql 16777216 Sep 27 09:41 information_schema_log_v1_0
-rw------- 1 memsql memsql 16777216 Sep 27 09:41 information_schema_log_v1_4096
-rw------- 1 memsql memsql 16777216 Sep 27 09:41 memsql_log_v1_0
-rw------- 1 memsql memsql 16777216 Sep 26 11:17 memsql_log_v1_4096
snapshots:
total 24
-rw------- 1 memsql memsql 4171 Sep 26 11:17 cluster_snapshot_v1_0_0
-rw------- 1 memsql memsql 4171 Sep 27 09:41 information_schema_snapshot_v1_0_0
-rw------- 1 memsql memsql 4171 Sep 26 11:17 memsql_snapshot_v1_0_0
[9] testdb Database 생성 후 Data Directory 주요 파일 정보
neo@AP-L14:/var/lib/memsql/60854544-c2ee-4c0b-b572-61fc0bcef7fe/data$ memsql -p -e "create database testdb"
Enter password:
neo@AP-L14:/var/lib/memsql/60854544-c2ee-4c0b-b572-61fc0bcef7fe/data$ ls -l blobs snapshots logs
blobs:
total 40
drwxr-xr-x 2 memsql memsql 4096 Sep 26 11:17 1
drwxr-xr-x 2 memsql memsql 4096 Sep 27 17:07 2000
drwxr-xr-x 2 memsql memsql 4096 Sep 27 17:07 2001
drwxr-xr-x 2 memsql memsql 4096 Sep 27 17:07 2002
drwxr-xr-x 2 memsql memsql 4096 Sep 27 17:07 2003
drwxr-xr-x 2 memsql memsql 4096 Sep 27 17:07 2004
drwxr-xr-x 2 memsql memsql 4096 Sep 27 17:07 2005
drwxr-xr-x 2 memsql memsql 4096 Sep 27 17:07 2006
drwxr-xr-x 2 memsql memsql 4096 Sep 27 17:07 2007
drwxr-xr-x 2 memsql memsql 4096 Sep 27 17:07 2008
logs:
total 4423700
-rw------- 1 memsql memsql 16777216 Sep 27 17:07 cluster_log_v1_0
-rw------- 1 memsql memsql 16777216 Sep 26 11:17 cluster_log_v1_4096
-rw------- 1 memsql memsql 16777216 Sep 27 17:06 information_schema_log_v1_0
-rw------- 1 memsql memsql 16777216 Sep 27 17:06 information_schema_log_v1_4096
-rw------- 1 memsql memsql 16777216 Sep 27 17:07 memsql_log_v1_0
-rw------- 1 memsql memsql 16777216 Sep 26 11:17 memsql_log_v1_4096
-rw------- 1 memsql memsql 268435456 Sep 27 17:07 testdb_0_log_v1_0
-rw------- 1 memsql memsql 268435456 Sep 27 17:07 testdb_0_log_v1_65536
-rw------- 1 memsql memsql 268435456 Sep 27 17:07 testdb_1_log_v1_0
-rw------- 1 memsql memsql 268435456 Sep 27 17:07 testdb_1_log_v1_65536
-rw------- 1 memsql memsql 268435456 Sep 27 17:07 testdb_2_log_v1_0
-rw------- 1 memsql memsql 268435456 Sep 27 17:07 testdb_2_log_v1_65536
-rw------- 1 memsql memsql 268435456 Sep 27 17:07 testdb_3_log_v1_0
-rw------- 1 memsql memsql 268435456 Sep 27 17:07 testdb_3_log_v1_65536
-rw------- 1 memsql memsql 268435456 Sep 27 17:07 testdb_4_log_v1_0
-rw------- 1 memsql memsql 268435456 Sep 27 17:07 testdb_4_log_v1_65536
-rw------- 1 memsql memsql 268435456 Sep 27 17:07 testdb_5_log_v1_0
-rw------- 1 memsql memsql 268435456 Sep 27 17:07 testdb_5_log_v1_65536
-rw------- 1 memsql memsql 268435456 Sep 27 17:07 testdb_6_log_v1_0
-rw------- 1 memsql memsql 268435456 Sep 27 17:07 testdb_6_log_v1_65536
-rw------- 1 memsql memsql 268435456 Sep 27 17:07 testdb_7_log_v1_0
-rw------- 1 memsql memsql 268435456 Sep 27 17:07 testdb_7_log_v1_65536
-rw------- 1 memsql memsql 67108864 Sep 27 17:07 testdb_log_v1_0
-rw------- 1 memsql memsql 67108864 Sep 27 17:07 testdb_log_v1_16384
snapshots:
total 96
-rw------- 1 memsql memsql 4171 Sep 26 11:17 cluster_snapshot_v1_0_0
-rw------- 1 memsql memsql 4171 Sep 27 17:06 information_schema_snapshot_v1_0_0
-rw------- 1 memsql memsql 4171 Sep 26 11:17 memsql_snapshot_v1_0_0
-rw------- 1 memsql memsql 4171 Sep 27 17:07 testdb_0_snapshot_v1_0_0
-rw------- 1 memsql memsql 4171 Sep 27 17:07 testdb_1_snapshot_v1_0_0
-rw------- 1 memsql memsql 4171 Sep 27 17:07 testdb_2_snapshot_v1_0_0
-rw------- 1 memsql memsql 4171 Sep 27 17:07 testdb_3_snapshot_v1_0_0
-rw------- 1 memsql memsql 4171 Sep 27 17:07 testdb_4_snapshot_v1_0_0
-rw------- 1 memsql memsql 4171 Sep 27 17:07 testdb_5_snapshot_v1_0_0
-rw------- 1 memsql memsql 4171 Sep 27 17:07 testdb_6_snapshot_v1_0_0
-rw------- 1 memsql memsql 4171 Sep 27 17:07 testdb_7_snapshot_v1_0_0
-rw------- 1 memsql memsql 4171 Sep 27 17:07 testdb_snapshot_v1_0_0
* blobs 에서는 2000 ~ 2008 디렉토리가 생성되어 reference partition + partition 0~7 이 랜덤하게 매핑됨 이 후 테이블이 생성되고 DML 이 발생되면 Segment 파일이 생성/병합/삭제가 지속적으로 발생함
* logs 에서는 각각의 partition 별로 디폴트 256 MB 의 트랜잭션 로그 2개씩이 각각 생성
* snapshots 에서는 각각의 partition 별로 snapshot 파일이 기본 크기로 생성
* DML 발생에 따라 log_file_size_partitions(256MB) 크기의 파일이 계속 추가됨
* 트랜잭션 로그 파일 크기가 snapshot_trigger_size(2GB) 를 넘어가면 Snapshot 파일이 새로 생성됨
* log_file_size_partitions, snapshot_trigger_size 는 업무 요건에 따라 변경 가능
[10] 마무리
이번 포스트에서는 SingleStore 의 주요 데이터 파일 및 설정 파일의 용도 및 위치 등의 Layout 을 살펴 보았습니다. 대부분의 설정 파일들의 위치는 대부분 고정되어 있으며 해당 파일의 위치를 다른 설정 파일에서 항상 참조할 수 있게 기술하고 있으므로 도움이 될 것으로 기대합니다.
미리 설명을 드리자면 ColumnStore 파일을 저장하는 blobs 디렉토리 및 내부 파일은 다른 RDBMS 인 Oracle 이나 MySQL 과 같이 직관적으로 보이지는 않습니다. 컬럼별로 압축 저장이 되는 Segment 파일에 각 파티션별로 분산 저장되어 있으며 DML 이 지속적으로 발생하면 백그라운드 merger 쓰레드에 의해 병합/삭제/생성이 매우 활발하게 이뤄지기 때문입니다. 역으로 생각하면 DBA 나 개발자가 ColumnStore 파일에 대해 그다지 관심을 기울이지 않아도 된다는 얘기도 됩니다. 전체적인 Disk 의 크기, Disk 속도 정도에만 신경을 쓰면 나머지는 SingleStore 가 알아서 관리하고 사용하기 때문입니다.
앞으로 다른 포스트에서 좀 더 자세한 설명을 할 수 있으리라 보고 이번 포스트를 마무리합니다.
'SingleStoreDB > 연구노트' 카테고리의 다른 글
SingleStore Hands-On #1 DB 설치 : SingleStore, PostgreSQL, MySQL (1) | 2023.11.02 |
---|---|
SingleStore 디폴트 Data 디렉토리 변경 (1) | 2023.10.26 |
On-Premises Llama 2 및 SingleStoreDB 를 이용한 생성형 AI 프로그램 예제 (1) | 2023.10.12 |
Windows 10 WSL2 에 SingleStore 설치 (0) | 2023.09.28 |
M1 Mac 에 SingleStore 설치 (0) | 2023.09.14 |