4. 기동 · 확인 · 정지
이 장을 마치면: GritDB를 띄우고, 정상인지 판정하고, 첫 테이블을 등록해 보고, 내린다.
소요: 30분 | 선행: 3장
4.1 기동
~/gritdb1/bin/gritdb-start
예상 출력:
============================================================================
GritDB Start (installed at /home/gritdb/gritdb1)
============================================================================
[INFO] Starting GritAdmin...
============================================================================
GritDB started successfully!
============================================================================
[INFO] GritAdmin: running (PID: <PID>)
Instance ID: <인스턴스 ID>
PG port: 5432 (from postgresql.conf)
Log directory: /home/gritdb/gritdb1/log
PostgreSQL connect: /home/gritdb/gritdb1/bin/psql -p 5432 -d postgres
Stop: /home/gritdb/gritdb1/bin/gritdb-stop
============================================================================
4.2 접속 준비 확인
started successfully는 GritDB가 접속을 받을 준비를 마쳤다는 뜻이다. 아래 명령으로 한 번 더 확인한다.
~/gritdb1/bin/pg_isready -p 5432
예상 출력:
/tmp:5432 - accepting connections
rejecting connections나 no response가 나오면 5초 뒤 다시 실행한다. 1분이 지나도 같으면 GDB-BOOT-005를 본다.
4.3 정상 판정
세 가지가 모두 맞으면 정상이다.
-
프로세스 4개가 떠 있다.
ps -o pid,comm -p "$(cut -d: -f2 ~/gritdb1/run/grit_admin.pid | paste -sd,)"예상 출력(머리줄과 4줄, 순서 무관):
PID COMMAND <PID> GritAdmin <PID> postgres <PID> GritCatalog <PID> GritSurfer -
gritsurfer가 미리 적재됐다.
~/gritdb1/bin/psql -p 5432 -d postgres -Atc "SHOW shared_preload_libraries;"예상 출력:
gritsurfer -
gritsurfer 확장이 설치됐다.
~/gritdb1/bin/psql -p 5432 -d postgres -Atc "SELECT extname FROM pg_extension WHERE extname = 'gritsurfer';"예상 출력:
gritsurfer
4.4 첫 테이블 등록해 보기
GritDB는 등록한 테이블만 관리한다. 등록 조건은 테이블의 REPLICA IDENTITY FULL 설정이다.
~/gritdb1/bin/psql -p 5432 -d postgres
psql 안에서 실행한다.
CREATE TABLE public.quickstart_check (id integer PRIMARY KEY, memo text);
ALTER TABLE public.quickstart_check REPLICA IDENTITY FULL;
SELECT register_gritsurfer_table('public', 'quickstart_check');
INSERT INTO public.quickstart_check VALUES (1, 'hello'), (2, 'gritdb');
SELECT * FROM public.quickstart_check ORDER BY id;
SELECT table_name FROM get_gritsurfer_tables() WHERE table_name = 'quickstart_check';
예상 출력:
CREATE TABLE
ALTER TABLE
register_gritsurfer_table
---------------------------
(1 row)
INSERT 0 2
id | memo
----+--------
1 | hello
2 | gritdb
(2 rows)
table_name
------------------
quickstart_check
(1 row)
register_gritsurfer_table은 돌려주는 값이 없으므로 빈 줄 1행이 나오면 정상이다.- 등록하거나 해제할 때
INFO: GritSurfer: …와NOTICE: GritSurfer: …줄이 함께 보인다. 이 줄은 등록과 해제 기록이며 정상이다. - 마지막 조회에
quickstart_check가 보이면 등록이 완료됐다. REPLICA IDENTITY FULL을 빼면 등록이 거부된다(GDB-RUNTIME-001).
점검용 테이블을 정리한다. 등록을 먼저 해제한 뒤 테이블을 삭제한다.
SELECT unregister_gritsurfer_table('public', 'quickstart_check');
DROP TABLE public.quickstart_check;
\q
예상 출력:
unregister_gritsurfer_table
-----------------------------
(1 row)
DROP TABLE
4.5 정지
~/gritdb1/bin/gritdb-stop
예상 출력:
============================================================================
GritDB Stop (installed at /home/gritdb/gritdb1)
============================================================================
[INFO] GritAdmin is running (PID: <PID>)
[INFO] Sending: grit_admin_client stop
[INFO] Stop command accepted: OK stopped
[INFO] GritAdmin stopped
============================================================================
GritDB stopped.
============================================================================
정지를 확인한다. 아래 명령의 출력이 없으면 프로세스가 모두 내려갔다.
pgrep -u gritdb -l -x 'GritAdmin|GritSurfer|GritCatalog|postgres'
gritdb-stop은 정상 정지다. 열린 세션이 남아 있으면 즉시 정지로 넘어가고, 다음 기동 때 복구 과정을 거친다. 그래서 접속 중인 응용 프로그램을 먼저 끝낸다(GDB-SHUTDOWN-002).gritdb-stop --quick은 즉시 정지다. 진행 중인 작업을 끊고, 다음 기동 때 복구 과정을 거친다. 급할 때만 쓴다. GritDB 엔진 core 파일(수십 GB)이 생길 수 있으니 디스크 여유를 본다.- ⚠
kill로 프로세스를 하나씩 죽이지 않는다(6장).
4.6 재시작
~/gritdb1/bin/gritdb-stop
~/gritdb1/bin/gritdb-start
문제가 생기면
- 기동이 안 되면 GDB-BOOT-001~006을 본다.
- 테이블 등록이 거부되면 GDB-RUNTIME-001을 본다.
- 정지 후 경고가 남거나 정지가 오래 걸리면 GDB-SHUTDOWN-001과 002를 본다.