콘텐츠로 이동

2.Altibase Sharding 설치와 설정#

이 장에서는 Altibase Sharding을 구성하고 사용환경을 설정하는 방법을 설명한다.

Altibase Sharding 설치#

Altibase Sharding은 별도의 설치가 필요 없다.

Altibase 패키지 인스톨러를 이용하여 설치를 완료했다면, 몇 가지 추가 설정만으로 Altibase Sharding을 사용할 수 있다. 설정 방법에 대한 자세한 내용은 이 문서의 Altibase Sharding 설정을 참조한다.

운영체제#

Altibase Sharding은 현재 아래의 운영체제에서만 지원한다.

OS CPU Version Bit (Server) Bit (Client)
LINUX x86-64 (GNU glibc 2.12 이상) redhat 6.0 이상 64-bit 64-bit
LINUX PowerPC7 (BE) redhat 6.5 이상 64-bit 64-bit
LINUX PowerPC8 (LE) redhat 7.2 이상 64-bit 64-bit

[표 1. Altibase Sharding 지원 운영체제]

Altibase Sharding 설정#

Altibase Hybrid Sharding을 위해 서버와 클라이언트의 샤딩 관련 설정은 통일성있게 적용해야 한다.

  • 샤드 환경 설정

  • 클라이언트 설정

    • 샤딩 응용프로그램 서버 연결 설정

    • 샤딩 응용프로그램 라이브러리 설정

샤드 환경 설정#

기존의 설치된 Altibase를 샤드 노드로 설정하기 위해서는 다음 과정이 필요하다.

프로퍼티 설정#

SHARD_ENABLE 프로퍼티를 활성화한 후 서버를 재시작하면, 샤드 노드의 메타 저장소 및 코드네이터 기능이 활성화 된다. 기능이 활성화된다.

iSQL> SELECT name, value1 FROM v$property WHERE name = 'SHARD_ENABLE';
NAME   : SHARD_ENABLE
VALUE1 : 1

샤드 노드 기능이 활성화되면, 샤드 패키지를 생성하거나 샤드 관련 내장 함수, 성능 뷰를 사용할 수 있다.

샤드 패키지 생성#

샤드 패키지는 $ALTIBASE_HOME/packages에 있다. 샤드 패키지는 샤드 기능을 제어할 수 있는 사용자 인터페이스를 제공한다.

is –f $ALTIBASE_HOME/packages/dbms_shard.sql
is –f $ALTIBASE_HOME/packages/dbms_shard.plb

DBMS_SHARD 패키지의 함수 및 프로시저에 대한 자세한 설명은 이 문서의 DBMS_SHARD패키지 설명을 참조한다.

클라이언트 설정#

샤딩 응용프로그램 서버 연결 설정#

응용프로그램은 최초 접속 시 데이터베이스 서버의 ip/port를 전체 부하를 고려하여 샤드 코디네이터 역할을 할 수 있는 하나의 샤드 노드를 선택한 후 해당 노드의 ip/port로 지정한다.

최초 접속 샤드 노드를 이중화를 할 경우 장애 복구를 위해 connect시 AlternateServer를 설정 한다.

샤딩 응용프로그램 라이브러리 설정#

cli 응용프로그램 빌드 시 기존의 odbccli 라이브러리를 shardcli 라이브러리로 바꾸어야 한다.

shardcli 라이브러리는 libshardcli.a와 libshardcli_sl.so 두 개의 파일을 지원한다.

jdbc 같은 경우에는 기존과 같이 Altibase.jar를 클래스패스에 추가하고 jdbc 접속 url에 sharding prefix를 붙여주면 된다. 이때 ip와 port는 shardcli와 마찬가지로 메타 노드의 ip와 port가 되어야 한다.

샤드 메타 설정#

Altibase Sharding을 사용하기 위해서는 샤드 메타를 생성해야 한다. 각 샤드 노드는 Altibase Sharding에 필요한 모든 메타 정보를 샤드 메타에 영구적으로 저장한다.

Altibase Sharding에서 샤드 메타는 샤드 노드 식별자를 제외한 모든 샤드 메타 정보를 각 샤드 노드에서 동일하게 유지되어야 한다.

샤드 메타 설정은 DBMS_SHARD 패키지를 이용한다.

샤드 메타(Shard meta) 생성#

샤드 패키지인 DBMS_SHARD 패키지에는 샤드 메타를 생성하는 서브 프로그램이 포함되어 있다. 최초 한번만 수행하면 샤드 메타가 생성된다.

샤드 노드에서 샤드 메타 및 코디네이터를 활성화 하기 위해서 샤드 메타에 대한 노드 식별자를 샤딩 시스템에서 유일한 값으로 지정해야 한다.

구문#

DBMS_SHARD.CREATE_META( meta_node_id in integer )

설명#

샤드 메타는 sys 사용자로 생성해야 한다. 샤드 메타를 생성하는 내부 과정은 다음과 같이 처리한다.

sys_shard 사용자를 생성한다.

sys_shard.version_ 테이블을 생성하고, 현재 shard version을 입력한다.

sys_shard.local_meta_info_ 와 sys_shard.global_meta_info_ 테이블을 생성하고 샤드 메타 정보를 입력한다.

sys_shard.nodes_ 테이블과 인덱스를 생성한다. sys_shard.objects_ 테이블과 인덱스를 생성한다. sys_shard.ranges_ 테이블과 인덱스를 생성한다. sys_shard. clones _ 테이블과 인덱스를 생성한다. sys_shard.solos_ 테이블과 인덱스를 생성한다.

샤드 메타 생성 구문에 대한 자세한 설명은 DBMS_SHARD 패키지의 CREATE_META 을 참조한다.

예제#

<질의> 샤드 메타 식별자가 1인 샤드 메타를 생성한다.

EXEC DBMS_SHARD.CREATE_META(1);

샤드 메타 식별자 재설정#

샤드 노드의 샤드 메타 식별자를 재설정한다.

구문#

DBMS_SHARD.RESET_META_NODE_ID( meta_node_id in integer )

설명#

샤드 노드에서 CREATE_META 구문 수행시 지정한 샤드 메타에 대한 노드 식별자를 변경하고자 하는 경우 사용한다.

샤드 메타 식별자 설정 구문에 대한 자세한 설명은 DBMS_SHARD 패키지의 RESET_META_NODE_ID를 참조한다.

예제#

<질의> 샤드 메타 식별자를 2로 변경한다.

iSQL> EXEC DBMS_SHARD.RESET_META_NODE_ID(2);

샤드 메타 생성 및 식별자 변경 관련 주의 사항#

샤드 메타를 생성하거나 식별자를 변경하는 작업은 샤딩 시스템 전반에 영향을 미치므로 아래 주의사항을 숙지하고 진행하도록 한다.

  • 샤드 메타 생성 및 식별자 변경 전에 접속한 연결에 대해서는 정상적인 샤딩 서비스를 이용할 수 없으므로 샤드 메타 생성 및 식별자 변경 후 재접속해야 한다.
  • 샤드 메타 생성 및 식별자 변경을 위해 사용한 연결은 변경 완료 후 종료해야 한다.
  • 샤드 메타 생성 및 식별자 변경 관련 작업은 샤딩 시스템 운영전에 완료해야 한다.

샤드 메타 관리#

샤드 메타는 전체 샤딩 시스템의 분산 정보를 가지고 있으며 각 노드에서 샤드 메타 정보를 통해 데이터의 위치를 판단하여 질의를 분석하고 처리한다. 그러므로, 모든 샤드 노드에서 동일한 샤드 메타를 유지해야 한다.

또한, 샤드 메타는 시점 별로 다른 버전을 가질 수 있어서 이에 대한 형상 관리를 수행한다. 그러므로, 샤드 메타의 변경은 모든 노드에 동일하게 수행되어야 한다.

샤드 메타 형상#

SMN이란 샤드 메타의 분산 정의 변경 이력 번호 이며, 시스템 내부적으로 관리된다.

분산 정의 변경은 노드 등록/제거, 샤드 객체 등록/제거 등의 변경을 말한다.

좀 더 쉽게 설명하면 초기 상태의 샤드 메타는 SMN은 1이며, 노드를 추가하여 샤드 메타에 신규 정보가 추가되고 트랜잭션이 완료되면 새로운 샤드 메타 변경 이력은 SMN 2가 된다.

샤드 메타 변경 작업은 AUTOCOMMIT OFF로 설정하여 한번의 작업으로 수행해야 한다.SMN은 다음의 세 가지 유형의 SMN이 존재한다.

  • Meta SMN
  • 샤드 메타가 유지하는 샤드 메타 변경 이력 중 가장 최신의SMN

  • Data SMN

  • 데이터의 형상이 어떤 버전의 샤드 메타 기준으로 되어있는지에 대한 SMN

  • Session SMN

  • 개별 세션이 인식하고 있는 SMN

다음과 같은 샤드 메타의 변경을 유발하는 샤드 노드 설정은 샤드 메타에 변경 이력이 Meta SMN과 함께 저장된다.

Meta SMN의 변경은 실제 Altibase Sharding 시스템에서 인식하지 않으며 각 노드에서 샤드 메타 적용 구문(ALTER SYSTEM RELOAD SHARD META NUMBER LOCAL)을 통해 Data SMN을 변경하여 이후의 작업들이 변경된 SMN을 기준으로 동작할 수 있도록 해야한다.

각 세션은 최초 접속 시에 Data SMN을 자신의 Session SMN으로 할당받아 수행한다.

샤드 메타 적용 구문이 수행되어 Data SMN이 변경되면 이전에 접속한 세션은 각각 자신의 접속 시점에 유지되던 Session SMN을 기준으로 샤딩 서비스를 수행하며 이를 보정해 주기 위해서 서버 내부에서 SMN 차이를 보정해 주는 코디네이터가 동작한다.

Session SMN은 해당 세션이 트랜잭션을 COMMIT하는 시점에 이전 Session SMN과 Data SMN을 비교하여 다른 경우 최신 Data SMN으로 갱신한다.

SMN 변경 예제>
iSQL> AUTOCOMMIT OFF;
iSQL> EXEC DBMS_SHARD.SET_NODE(‘node1’,‘192.168.1.10’,20300);
iSQL> EXEC DBMS_SHARD.SET_NODE(‘node2’,‘192.168.1.11’,20300, ‘192.168.1.101’,20300);
iSQL> COMMIT;
iSQL> ALTER SYSTEM RELOAD SHARD META NUMBER LOCAL;
iSQL> COMMIT;

프로퍼티#

본 절에서는 Altibase Sharding 프로퍼티를 설명한다.

Altibase Sharding 프로퍼티는 크게 다음과 같이 분류할 수 있다.

분류 프로퍼티 동적 변경 허용 변경 레벨
초기화 관련 프로퍼티 SHARD_ENABLE No
내부 연결 관련 프로퍼티 SHARD_INTERNAL_CONN_ATTR_RETRY_COUNT SHARD_INTERNAL_CONN_ATTR_RETRY_DELAY SHARD_INTERNAL_CONN_ATTR_CONNECTION_TIMEOUT SHARD_INTERNAL_CONN_ATTR_LOGIN_TIMEOUT Yes SYSTEM
쿼리 분석 관련 프로퍼티 TRCLOG_DETAIL_SHARD Yes SYSTEM, SESSION
쿼리 변환 관련 프로퍼티 SHARD_AGGREGATION_TRANSFORM_ENABLE Yes SYSTEM
메시지 로그 관련 프로퍼티 SD_MSGLOG_COUNT
SD_MSGLOG_FILE
SD_MSGLOG_FLAG
SD_MSGLOG_SIZE
No No Yes No SYSTEM
트랜잭션 관련 프로퍼티 GLOBAL_TRANSACTION_LEVEL YES SYSTEM, SESSION

SHARD_ENABLE#

데이터 타입#

Unsigned Integer

기본값#

0

속성#

읽기 전용, 단일 값

값의 범위#

[0, 1]

설명#

Altibase Sharding의 샤드 노드로 설정한다.

0: Disabled

1: Enabled

SHARD_INTERNAL_CONN_ATTR_RETRY_COUNT#

데이터 타입#

Unsigned Integer

기본값#

1

속성#

변경 가능, 단일 값

값의 범위#

[0, 1024]

설명#

코디네이터 커넥션의 재접속 횟수를 설정한다.

SHARD_INTERNAL_CONN_ATTR_RETRY_DELAY (단위: 초)#

데이터 타입#

Unsigned Integer

기본값#

1

속성#

변경 가능, 단일 값

값의 범위#

[0, 3600]

설명#

코디네이터 커넥션의 재접속 지연 시간을 설정한다.

SHARD_INTERNAL_CONN_ATTR_CONNECTION_TIMEOUT (단위: 초)#

데이터 타입#

Unsigned Integer

기본값#

0

속성#

변경 가능, 단일 값

값의 범위#

[0, 232-1]

설명#

코디네이터 커넥션의 데이터 수신 최대 지연 시간을 설정한다.

SHARD_INTERNAL_CONN_ATTR_LOGIN_TIMEOUT (단위: 초)#

데이터 타입#

Unsigned Integer

기본값#

60

속성#

변경 가능, 단일 값

값의 범위#

[0, 232-1]

설명#

코디네이터 커넥션 접속이 이루어진 후 인증 절차가 완료될 때까지 허용된 시간을 설정한다.

TRCLOG_DETAIL_SHARD#

데이터 타입#

Unsigned Integer

기본값#

0

속성#

변경 가능, 단일 값

값의 범위#

[0, 1]

설명#

Isql에서 explain plan 기능과 함께 사용 시 샤드 분석 정보를 출력한다. 이 trace log를 사용하기 위해 1을 설정한다.

단, 이 프로퍼티의 값을 1로 설정할 경우에는 내부적으로 cache 된 plan을 사용하지 않고 새로이 plan을 생성한다.

Altibas Sharding 운영 중 ALTER SESSION, ALTER SYSTEM 문을 이용하여 이 프로퍼티의 값을 변경할 수 있다.

SHARD_AGGREGATION_TRANSFORM_ENABLE#

데이터 타입#

Unsigned Integer

기본값#

1

속성#

변경 가능, 단일 값

값의 범위#

[0, 1]

설명#

Altibase Sharding 환경에서 AGGREGATION 분산 수행을 최적화하기 위해 다음 집계 함수를 사용한 쿼리를 내부적으로 변환한다.

  • SUM
  • MIN
  • MAX
  • COUNT
  • AVG

예를 들어 다음 구문은 SHARD_AGGREGATION_TRANSFORM_ENABLE 값에 따라 아래와 같이 변환하여 수행한다.

SELECT count(*) FROM t1;

SHARD_AGGREGATION_TRANSFORM_ENABLE = 0
-> SELECT count(*) FROM shard(SELECT * FROM t1)
SHARD_AGGREGATION_TRANSFORM_ENABLE = 1
-> SELECT sum(c) FROM shard(SELECT count(*) c FROM t1);

주의 사항

  • AVG의 경우 SUM(SUM()) / SUM(COUNT()) 로 변환되어서 부동소숫점 타입의 결과가 상이할 수 있다.

Altibase Sharding 운영 중 ALTER SYSTEM 문을 이용하여 이 프로퍼티의 값을 변경할 수 있다.

SD_MSGLOG_COUNT#

데이터 타입#

Unsigned Integer

기본값#

10

속성#

읽기 전용, 단일 값

값의 범위#

[0, 232-1]

설명#

샤드 관련 메시지 파일의 최대 개수를 지정한다.

SD_MSGLOG_FILE#

데이터 타입#

String

기본값#

altibase_sd.log

속성#

읽기 전용, 단일 값

값의 범위#

없음

설명#

샤드 관련 메시지가 기록되는 파일이다.

SD_MSGLOG_FLAG#

데이터 타입#

Unsigned Integer

기본값#

65537

속성#

변경 가능, 단일 값

값의 범위#

[0, 232-1]

설명#

샤드 관련 경고 메시지나 트레이스 메시지를 SD_MSGLOG_FILE에 기록 할지 여부를 나타내는 플래그 값이다.

0 : 기본 에러 메시지

1 : 샤드 메타 에러 메시지

65536 : 샤드 메타 변경 트레이스 메시지

샤드 관련 트레이스 로깅 레벨을 확인하는 방법은 General Reference의 V\$TRACELOG를 참조한다.

SD_MSGLOG_SIZE#

데이터 타입#

Unsigned Integer

기본값#

10 * 1024 * 1024

속성#

읽기 전용, 단일 값

값의 범위#

[0, 232-1]

설명#

샤드 관련 메시지 파일의 최대 크기를 지정한다.

디렉토리#

Altibase Sharding 의 환경 설정에 관한 디렉토리는 Altibase 서버와 동일하다.

본 장에서는 Altibase Sharding 의 추가적인 내용만을 설명한다.

trc 디렉토리#

altibase_sd.log

샤드 관련 경고 메시지나 트레이스 메시지 등이 기록되는 파일이다.