그동안 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
/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 : 아래 참조
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 비밀번호 및 암호화된 텍스트
[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 명령어 사용이 권장됨
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 등 저장
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 저장
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
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 는 업무 요건에 따라 변경 가능
이번 포스트에서는 SingleStore 의 주요 데이터 파일 및 설정 파일의 용도 및 위치 등의 Layout 을 살펴 보았습니다. 대부분의 설정 파일들의 위치는 대부분 고정되어 있으며 해당 파일의 위치를 다른 설정 파일에서 항상 참조할 수 있게 기술하고 있으므로 도움이 될 것으로 기대합니다.
미리 설명을 드리자면 ColumnStore 파일을 저장하는 blobs 디렉토리 및 내부 파일은 다른 RDBMS 인 Oracle 이나 MySQL 과 같이 직관적으로 보이지는 않습니다. 컬럼별로 압축 저장이 되는 Segment 파일에 각 파티션별로 분산 저장되어 있으며 DML 이 지속적으로 발생하면 백그라운드 merger 쓰레드에 의해 병합/삭제/생성이 매우 활발하게 이뤄지기 때문입니다. 역으로 생각하면 DBA 나 개발자가 ColumnStore 파일에 대해 그다지 관심을 기울이지 않아도 된다는 얘기도 됩니다. 전체적인 Disk 의 크기, Disk 속도 정도에만 신경을 쓰면 나머지는 SingleStore 가 알아서 관리하고 사용하기 때문입니다.
앞으로 다른 포스트에서 좀 더 자세한 설명을 할 수 있으리라 보고 이번 포스트를 마무리합니다.