Appendix

본 장에서는 TAS를 이용해 Tibero를 구성하는 방법을 모범 예제(best practice)를 통해 설명합니다.

예제는 Linux x86_64를 기준으로 작성되었습니다.

TAS와 Tibero에서 수행하는 SQL을 제외한 명령은 설치를 원하는 운영체제에 맞게 변경해서 수행해야합니다.

참고 본 장에서 설명하는 예제는 모범 예제(best practice)로, 최소 권장 사양이 아닙니다. 최소 권장 사양은 "Tibero 설치 안내서"를 참고합니다. 또한, 현재 Linux 운영체제의 설치만 지원하고 있습니다.

설치 준비

본 절에서는 데이터베이스 구성 전 준비할 사항들에 대해 설명합니다.

설치 환경

다음은 본 구성 예제에서 사용할 설치 환경을 나타낸 표입니다.

항목

노드 갯수

2

노드 내부 IP

100.100.100.11, 100.100.100.12

TAS용 PORT

9620

TAS용 CM PORT

20005

TAS용 LOCAL CLUSTER PORT

20000

공유 디스크 갯수

4

공유 디스크 크기

각 512GB

공유 디스크 경로

/dev/sdc, /dev/sdd, /dev/sde, /dev/sdf

설치 계정

dba

Tibero 설치 경로

/home/dba/tibero

  • 구성에 사용할 바이너리는 이미 해당 경로에 설치된 것으로 가정합니다.

  • 각 노드에서 보이는 공유 디스크의 경로는 같은 것으로 가정합니다.

디스크 준비

다음은 설치 대상 공유 디스크를 준비하는 과정으로, 모든 노드에서 동일하게 수행합니다.

각 디스크의 권한 또는 소유권을 변경해 직접 사용해도 되지만 재부팅시 디스크 이름이 변경되는 문제가 발생할 수 있으므로 이러한 문제를 예방하기 위해 udev를 사용하여 디바이스 노드를 구성하는 방법을 권고합니다.

다음 예제에서는 udev를 사용하여 구성한 디바이스 노드를 통해 TAS를 설치하는 방법으로 작성 되어 있습니다.

아래는 udev를 사용하여 구성된 디바이스 노드의 예제입니다.

$ ls -al /dev/disk*
lrwxrwxrwx. 1 root root	        3 Aug 13 19:50	/dev/disk0 -> sdc
lrwxrwxrwx. 1 root root	        3 Aug 13 19:50	/dev/disk1 -> sdd
lrwxrwxrwx. 1 root root	        3 Aug 13 19:50	/dev/disk2 -> sde
lrwxrwxrwx. 1 root root	        3 Aug 13 19:50	/dev/disk3 -> sdf
$ ls -l /dev/sd*
brw-rw----. 1 root disk 8,	0 Jul 13 11:20 /dev/sda
brw-rw----. 1 root disk 8,     16 Jul 13 11:20 /dev/sdb
brw-------. 1 dba disk 8,     32 Jul 13 11:20 /dev/sdc
brw-------. 1 dba disk 8,     48 Jul 13 11:20 /dev/sdd
brw-------. 1 dba disk 8,     64 Jul 13 11:20 /dev/sde
brw-------. 1 dba disk 8,     80 Jul 13 11:20 /dev/sdf

위의 예제에서 /dev/disk*로 나타나는 링크들은 udev rules에 따라 생성된 symbolic link입니다.

다음은 디바이스 노드를 구성하기 위한 udev rules 파일의 예제입니다.

$ cat /etc/udev/rules.d/as-disk.rules
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d %N", 
RESULT=="35000c50087de8480", SYMLINK+="disk0", OWNER="dba", MODE="0600"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d %N", 
RESULT=="35000c50087de8481", SYMLINK+="disk1", OWNER="dba", MODE="0600"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d %N", 
RESULT=="35000c50087de8482", SYMLINK+="disk2", OWNER="dba", MODE="0600"
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/lib/udev/scsi_id -g -u -d %N", 
RESULT=="35000c50087de8483", SYMLINK+="disk3", OWNER="dba", MODE="0600"

udev rules 파일은 /etc/udev/rules.d 폴더(Ubuntu 14.04 기준, OS마다 경로가 다를 수 있다) 안에 .rules라 는 확장자로 저장되어야 합니다.

예제로 보여준 rule이 의미하는 바는 명시된 SCSI_ID(RESULT=="SCSI_ID")와 일치하는 디바이스를 sd? 로 표현되는 커널 이름(KERNEL=="sd?")을 가진 block 디바이스(SUBSYSTEM=="block") 노드 중에 찾아서 소유자, 사용자 권한을 설정하고 주어진 symbolic link를 생성하라는 의미입니다.

디바이스의 SCSI_ID는 /lib/udev/scsi_id(Ubuntu 14.04기준, OS마다 경로가 다를 수 있다)를 실행하면 확인할 수 있습니다.

이 프로그램은 관리자 권한으로 실행되어야 하며 아래는 scsi_id를 확인하는 예제입니다.

$ /lib/udev/scsi_id -g -u -d /dev/sdc
35000c50087de8480

커널 파라미터 설정

TAS를 이용해 Tibero를 구성하는 경우 "Tibero 설치 안내서"에 명시된 커널 파라미터 설정에 더하여 추가적인 설정이 필요합니다.

커널 파라미터 설정 파일 위치는 다음과 같습니다. (Linux 기준)

/etc/sysctl.conf

다음과 같이 커널 파라미터를 설정합니다.

fs.aio-max-nr = 4194304

AIX 환경에서 커널 파라미터를 설정할 경우 다음 프러시저를 실행합니다.

# ioo -p -o posix_aio_maxreqs=131072


TAS 인스턴스 설치

본 절에서는 두 개의 노드에 TAS 인스턴스를 구성하는 방법에 대해 설명합니다.

환경변수 설정

해당 운영체제의 사용자 계정별로 존재하는 환경설정 파일(.bashrc 등)에 환경 변수를 설정합니다. 본 예제에서는 다음과 같이 환경변수를 설정합니다.

모든 노드에서 TAS 인스턴스의 바이너리가 설정된 경로로 TB_HOME 환경변수를 설정합니다. 그리고 각 노드의 TAS 인스턴스를 구분하기 위해 TB_SID 환경변수를 노드별로 다르게 설정합니다.

다음은 첫 번째 노드 예시입니다. 첫 번째 노드의 TAS 인스턴스를 위해 TB_SID 환경변수를 as0으로 설정합니다. 첫 번째 노드의 클러스터 매니저를 위해 CM_SID 환경변수를 cm0으로 설정합니다.

export TB_HOME=/home/dba/tibero 
export TB_SID=as0
export CM_SID=cm0
export LD_LIBRARY_PATH=$TB_HOME/lib:$TB_HOME/client/lib 
export PATH=$PATH:$TB_HOME/bin:$TB_HOME/client/bin

두 번째 노드의 TAS 인스턴스를 위해 TB_SID 환경변수를 as1로 설정합니다. CM_SID 환경변수는 cm1로 설정합니다.

[100.100.100.12]$ export TB_SID=as1 
[[email protected]]$ export CM_SID=cm1

초기화 파라미터 설정

TAS 인스턴스의 초기화 파라미터는 기본적으로 Tibero Active Cluster(TAC)의 초기화 파라미터와 같습니다. TAS 인스턴스에서 추가로 설정해야 하는 초기화 파라미터는 다음과 같습니다.

파라미터
설명

INSTANCE_TYPE

Active Storage 인스턴스임을 나타내기 위해 AS로 설정한다.

AS_DISKSTRING

사용할 디스크를 찾기 위한 경로 패턴을 설정한다.

다음은 첫 번째 노드의 초기화 파라미터입니다.

[100.100.100.11]$ cat /home/dba/tibero/config/as0.tip 
INSTANCE_TYPE=AS
AS_DISKSTRING="/dev/disk*" 
AS_ALLOW_ONLY_RAW_DISKS=N

LISTENER_PORT=9620 
TOTAL_SHM_SIZE=3G 
MEMORY_TARGET=4G

CLUSTER_DATABASE=Y 
LOCAL_CLUSTER_ADDR=100.100.100.11 
LOCAL_CLUSTER_PORT=20000 
CM_CLUSTER_MODE=ACTIVE_SHARED 
CM_PORT=20005

THREAD=0

[100.100.100.11]$ cat /home/dba/tibero/config/cm0.tip 
CM_NAME=cm0
CM_UI_PORT=20005
CM_RESOUCE_FILE=/home/dba/tibero/config/cm0_res.crf

다음은 두 번째 노드의 초기화 파라미터입니다.

[100.100.100.12]$ cat /home/dba/tibero/config/as1.tip 
INSTANCE_TYPE=AS
AS_DISKSTRING="/dev/disk*" 
AS_ALLOW_ONLY_RAW_DISKS=N

LISTENER_PORT=9620 
TOTAL_SHM_SIZE=3G 
MEMORY_TARGET=4G

CLUSTER_DATABASE=Y 
LOCAL_CLUSTER_ADDR=100.100.100.12
LOCAL_CLUSTER_PORT=20000 
CM_CLUSTER_MODE=ACTIVE_SHARED 
CM_PORT=20005

THREAD=1

[100.100.100.11]$ cat /home/dba/tibero/config/cm1.tip 
CM_NAME=cm1
CM_UI_PORT=20005
CM_RESOUCE_FILE=/home/dba/tibero/config/cm1_res.crf

접속 정보 설정

다음은 접속 정보 설정 파일을 설정한 예입니다.

$ cat /home/dba/tibero/client/config/tbdsn.tbr 
as0=(
    (INSTANCE=(HOST=100.100.100.11) 
              (PORT=9620)
    )
)
as1=(
          (INSTANCE=(HOST=100.100.100.12) 
                    (PORT=9620)
          )
)

디스크 스페이스 생성과 기동

다음은 디스크 스페이스 생성과 기동하는 과정에 대한 설명입니다.

  1. 디스크 스페이스를 생성하기 위해서 먼저 첫 번째 노드에서 TAS 인스턴스를 NOMOUNT 모드로 기동합니다.

[[email protected]]$ tbboot nomount
  1. 기동된 인스턴스에 접속하여 디스크 스페이스를 생성합니다. RAID와 같은 외부의 데이터 복제 기능을 사용해 데이터의 가용성을 높인 경우, 내부의 데이터 복제 기능을 사용하지 않도록 하기 위해 EXTERNAL REDUNDANCY로 설정합니다.

[[email protected]]$ tbsql sys/tibero@as0 
SQL> CREATE DISKSPACE ds0
    EXTERNAL REDUNDANCY
    DISK '/dev/disk0' NAME disk0 SIZE 512G, 
         '/dev/disk1' NAME disk1 SIZE 512G, 
         '/dev/disk2' NAME disk2 SIZE 512G, 
         '/dev/disk3' NAME disk3 SIZE 512G;

디스크 스페이스 생성이 완료되면 자동으로 인스턴스가 중지되며, NORMAL 모드로 기동할 수 있는 상태가 됩니다.

  1. 첫 번째 노드의 클러스터 매니저가 AS 바이너리를 실행하기 위해 필요한 as 리소스 환경설정용 파일을 미리 생성합니다.

[[email protected]]$ cat $TB_HOME/as0.profile 
export TB_SID=as0

  1. TAS 인스턴스들의 클러스터링을 위해서 클러스터 매니저를 기동하고 리소스를 추가합니다. as 리소스 를 추가할 때에는 미리 생성한 환경설정용 파일의 경로를 envfile attribute에 지정해줘야 합니다.

[[email protected]]$ tbcm -b
[[email protected]]$ cmrctl add network --name net0 --ipaddr 
100.100.100.11 --portno 20010
[[email protected]]$ cmrctl add cluster --name cls0 --incnet net0
--cfile "+/dev/disk*"
[[email protected]]$ cmrctl start cluster --name cls0 
[[email protected]]$ cmrctl add service --type as --name tas --cname cls0 
[[email protected]]$ cmrctl add as --name as0 --svcname tas --envfile 
"$TB_HOME/as0.profile" --dbhome "$TB_HOME"

  1. 인스턴스를 NORMAL 모드로 기동합니다.

[[email protected]]$ tbboot
# 또는 [[email protected]]$ cmrctl start as --name as0

  1. 기동이 완료되면 인스턴스에 접속해 두 번째 노드의 TAS 인스턴스를 위한 THREAD를 추가합니다.

[[email protected]]$ tbsql sys/tibero@as0 
SQL> ALTER DISKSPACE ds0 ADD THREAD 1;

  1. 두 번째 노드의 클러스터 매니저가 AS 바이너리를 실행하기 위해 필요한 as 리소스 환경설정용 파일을 미리 생성합니다.

[[email protected]]$ cat $TB_HOME/as1.profile 
export TB_SID=as1

  1. 두 번째 노드에서 클러스터 매니저를 기동하고 리소스를 추가해줍니다.

[[email protected]]$ tbcm -b
[[email protected]]$ cmrctl add network --name net1 --ipaddr
100.100.100.12 --portno 20010
[[email protected]]$ cmrctl add cluster --name cls0 --incnet net1
--cfile "+/devs/disk*"
[[email protected]]$ cmrctl start cluster --name cls0 
[[email protected]]$ cmrctl add as --name as1 --svcname tas --envfile 
"$TB_HOME/as1.profile" --dbhome "$TB_HOME"

  1. 두 번째 노드의 TAS 인스턴스를 기동합니다.

[[email protected]]$ tbboot
# 또는 [[email protected]]$ cmrctl start as --name as1


Tibero 인스턴스 설치

Tibero 인스턴스를 설치하고 기동하는 과정은 TAS 인스턴스를 사용하지 않는 경우와 동일하며 생성할 파일의 경로를 지정하는 방법에만 차이가 있습니다.

환경변수 설정

해당 운영체제의 사용자 계정별로 존재하는 환경설정 파일(.bashrc 등)에 환경변수를 설정합니다.

본 예제 에서는 다음과 같이 환경변수를 설정합니다.

먼저 모든 노드에서 Tibero 인스턴스의 바이너리가 설정된 경로로 TB_HOME 환경변수를 설정합니다. 그리고 각 노드에서 TB_SID 환경변수를 설정합니다. 첫 번째 노드의 DB 인스턴스를 위해 TB_SID 환경변수를 tac0으로 설정합니다.

export TB_HOME=/home/dba/tibero 
export TB_SID=tac0
export CM_SID=cm0
export LD_LIBRARY_PATH=$TB_HOME/lib:$TB_HOME/client/lib 
export PATH=$PATH:$TB_HOME/bin:$TB_HOME/client/bin

두 번째 노드의 DB 인스턴스를 위해 TB_SID 환경변수를 tac1로 설정합니다. CM_SID가 설정되어 있지 않 다면 cm1으로 설정해줍니다.

[100.100.100.12]$ export TB_SID=tac1 
[[email protected]]$ export CM_SID=cm1

하나의 서버에 여러 인스턴스를 띄우는 경우에는 SID가 달라야 하지만 다른 서버에 각 인스턴스를 띄울 때는 SID가 같아도 무방합니다.

초기화 파라미터 설정

TAS 인스턴스를 사용하기 위해서는 다음의 두 가지 파라미터를 설정합니다.

파라미터
설명

USE_ACTIVE_STORAGE

TAS 인스턴스를 사용하기 위해 Y로 설정한다.

AS_PORT

TAS 인스턴스에 접속하기 위해 TAS 인스턴스의 LISTENER_PORT를 설정한다.

다음은 첫 번째 노드의 초기화 파라미터입니다.

[100.100.100.11]$ cat /home/dba/tibero/config/tac0.tip 
DB_NAME=tibero
LISTENER_PORT=8629 
DB_BLOCK_SIZE=32K 
MAX_SESSION_COUNT=300 
TOTAL_SHM_SIZE=70G 
DB_CACHE_SIZE=55G 
MEMORY_TARGET=250G 
CONTROL_FILES="+DS0/c1.ctl"

USE_ACTIVE_STORAGE=Y 
AS_PORT=9620

CLUSTER_DATABASE=Y 
LOCAL_CLUSTER_ADDR=100.100.100.11 
LOCAL_CLUSTER_PORT=21000 
CM_PORT=20005

THREAD=0 
UNDO_TABLESPACE=UNDO00

다음은 두 번째 노드의 초기화 파라미터입니다.

[100.100.100.12]$ cat /home/dba/tibero/config/tac1.tip 
DB_NAME=tibero
LISTENER_PORT=8629 
DB_BLOCK_SIZE=32K 
MAX_SESSION_COUNT=300 
TOTAL_SHM_SIZE=70G 
DB_CACHE_SIZE=55G 
MEMORY_TARGET=250G 
CONTROL_FILES="+DS0/c1.ctl"

USE_ACTIVE_STORAGE=Y 
AS_PORT=9620
CLUSTER_DATABASE=Y 
LOCAL_CLUSTER_ADDR=100.100.100.12 
LOCAL_CLUSTER_PORT=21000 
CM_PORT=20005

THREAD=1
UNDO_TABLESPACE=UNDO01

접속 정보 설정

다음은 접속 정보 설정 파일을 설정한 예입니다.

$ cat /home/dba/tibero/client/config/tbdsn.tbr 
tac0=(
    (INSTANCE=(HOST=100.100.100.11) 
            (PORT=8629)
    )
)
tac1=(
        (INSTANCE=(HOST=100.100.100.12)
                (PORT=8629)
        )
)

데이터베이스 생성과 기동

다음은 데이터베이스 생성과 기동하는 과정에 대한 설명입니다.

  1. 클러스터 매니저가 Tibero 바이너리를 실행하기 위해 필요한 DB 리소스 환경설정용 파일을 미리 생성합니다.

[[email protected]]$ cat $TB_HOME/tac0.profile 
export TB_SID=tac0
[[email protected]]$ cat $TB_HOME/tac1.profile 
export TB_SID=tac1

  1. 우선 첫 번째 노드에서 TAS 인스턴스를 구성할 때에 부팅한 클러스터 매니저에 Tibero 클러스터링을 위해 사용할 리소스를 생성합니다.

[[email protected]]$ cmrctl add service --type db --name tibero
--cname cls0
[[email protected]]$ cmrctl add db --name tac0 --svcname tibero
--envfile "$TB_HOME/tac0.profile" --dbhome "$TB_HOME"

  1. 인스턴스를 NOMOUNT 모드로 기동합니다.

tbboot -t nomount

  1. 인스턴스에 접속해 데이터베이스를 생성합니다.

[[email protected]]$ tbsql sys/tibero@tac0 
SQL> CREATE DATABASE "tibero"
    USER sys IDENTIFIED BY tibero 
    MAXINSTANCES 32
    MAXDATAFILES 2048 
    CHARACTER SET MSWIN949
    LOGFILE GROUP 1 '+DS0/log001' SIZE 2G, 
            GROUP 2 '+DS0/log002' SIZE 2G, 
            GROUP 3 '+DS0/log003' SIZE 2G
    MAXLOGGROUPS 255
    MAXLOGMEMBERS 8 
    NOARCHIVELOG
    DATAFILE '+DS0/system.tdf' SIZE 4G
            AUTOEXTEND ON NEXT 64M MAXSIZE UNLIMITED 
    SYSSUB DATAFILE '+DS0/syssub.tdf' SIZE 4G
            AUTOEXTEND ON NEXT 64M MAXSIZE UNLIMITED 
    DEFAULT TEMPORARY TABLESPACE temp
            TEMPFILE '+DS0/temp00.tdf' SIZE 32G AUTOEXTEND OFF 
    UNDO TABLESPACE undo00
            DATAFILE '+DS0/undo00.tdf' SIZE 32G AUTOEXTEND OFF 
    DEFAULT TABLESPACE usr DATAFILE '+DS0/usr.tdf' SIZE 4G
            AUTOEXTEND ON NEXT 64m MAXSIZE UNLIMITED;

  1. 인스턴스를 NORMAL 모드로 재기동한 후 두 번째 노드에서 사용할 UNDO 테이블 스페이스와 REDO THREAD를 생성합니다.

[[email protected]]$ tbboot 
[[email protected]]$ tbsql sys/tibero@tac0 
SQL> CREATE UNDO TABLESPACE undo01
            DATAFILE '+DS0/undo01.tdf' size 32G autoextend off;
SQL> ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 4 '+DS0/log004' size 2G; 
SQL> ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 5 '+DS0/log005' size 2G; 
SQL> ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 6 '+DS0/log006' size 2G; 
SQL> ALTER DATABASE ENABLE PUBLIC THREAD 1;

  1. 두 번째 노드의 클러스터 매니저에 DB 리소스를 추가합니다.

[[email protected]]$ cmrctl add db --name tac1 --svcname tibero
--envfile "$TB_HOME/tac1.profile" --dbhome "$TB_HOME"

  1. 두 번째 노드의 인스턴스를 기동합니다.

[[email protected]]$ tbboot


TAS 운영 권장사항

TAS를 설치하고 운영하는데 필요한 권장사항입니다.

초기화 파라미터 설정

Active Storage 인스턴스는 데이터베이스 인스턴스보다 더 적은 양의 메모리를 사용합니다. 원활한 운영을 위해서 다음 예와 같이 메모리 파라미터를 설정하는 것이 좋습니다.

파라미터

TOTAL_SHM_SIZE

1GB 이상

MEMORY_TARGET

2GB 이상

디스크 스페이스 REDUNDANCY 설정

RAID와 같이 외부적인 데이터 복제 기능을 사용하고 있는 경우 REDUNDANCY를 EXTERNAL로 설정해도 무방하고, 그렇지 않은 경우라면 REDUNDANCY를 NORMAL로 설정하는 것이 좋습니다. 만약 속도적인 측면보다 데이터의 가용성 측면이 중요한 경우라면 REDUNDANCY를 HIGH로 설정하는 것이 좋습니다.

디스크 스페이스 실패 그룹 설정

물리적으로 같은 서버 또는 같은 스위치에 속해 있는 디스크들은 같은 실패 그룹으로 설정하는 것이 좋습니다. 스위치 고장, 케이블 고장 등이 발생했을 때 이 디스크들은 동시에 접근 불가 상태가 될 확률이 높기 때문입니다. Active Storage는 다른 실패 그룹에 복사본을 저장해놓기 때문에 한 실패 그룹에 문제가 생겨도 데이터 접근이 가능합니다. 디스크 스페이스의 총 실패 그룹 개수는 3 개 이상으로 구성하는 것이 좋습니다.

디스크 스페이스 용량 설정

디스크 스페이스의 용량은 운영할 데이터베이스의 용량에 따라 적절히 구성합니다. 이때 한 디스크 스페이스가 가질 수 있는 디스크의 최대 개수는 1024개이며, 최대 용량은 16TB입니다. 디스크 장애가 발생하여 데이터 복사본을 새로 만들어야 하는 경우가 생길 수 있으므로 여유 디스크를 추가할 수 있도록 구성하는 것이 좋습니다.

DBA용 관리 팁

SYS 사용자로 SQL을 이용해 Active Storage 인스턴스에 접속을 할 수 있으며 'TAS 정보 조회' 에 설명한 뷰들을 이용해 현재 디스크 스페이스 상태, 디스크 상태를 확인할 수 있습니다. 만약 디스크 장애 가 발생하면 뷰에서 디스크 상태가 FAIL로 바뀌게 됩니다.

디스크 속성

디스크 스페이스를 구성하는 디스크들의 속성(크기와 속도)은 비슷한 것이 좋습니다. 디스크가 크기와 속도가 같으면 각 디스크가 같은 비율로 사용이 되며 이러한 경우 스트라이핑에 효과적입니다.

Last updated