문서유형ㅣ기술정보
분야ㅣ설치
적용제품버전ㅣTibero 7.2.4
문서번호ㅣTINTI039
개요
1. TAC란?
TAC는 DB엔진, OS 및 시스템, Public Network 등의 장애 발생할 경우 정상 작동하는 노드로 자동 Fail-over 함으로써 무중단 시스템을 유지하고, 빠르게 복구할 수 있도록 돕습니다.
업무에 따라 이중화를 넘은 초대형 삼중화 노드로 구성하여 대용량의 데이터를 처리 시 최상의 성능을 발휘할 수 있습니다.
TAC는 수평적인 Active 노드 증설로 용량을 유연하게 조절할 수 있으며, Global Cache를 적용하여 Disk I/O를 최소화해 시스템 성능을 향상시킬 수 있습니다.
2. TAC 설치 구성도
방법
TAC 설치(using raw device)
1. 설치 환경
1) 설치 순서
순서 | 항목 | 내용 |
|---|---|---|
1 | 기본 설정 | 환경변수, CM, Tibero tip 설정 |
2 | Cluster Membership Layer 구성 | 각 Node들을 Cluster로 연결하는 과정 |
3 | Cluster Resource Layer 구성 | Node들이 사용할 자원들을 등록하는 과정 |
4 | DB 구성 | DB 구성 |
1-2) 노드 환경
항목 | Node 1 | Node 2 | 설명 | |
OS | hostname | tibero0 | tibero1 | 각 서버의 hostname |
| User | tibero | tibero | Tibero가 설치될 OS 유저 | |
TAC | SID | tibero0 | tibero1 | Tibero Instance Name |
| DB_NAME | tibero | Tibero Database Name | ||
| LISTENER_PORT | 8629 | 8629 | Tibero Listener Port | |
| Public IP | 192.168.50.120 NIC : enps3 | 192.168.50.122 NIC : enps3 | Public IP | |
| LOCAL_CLUSTER_ADDR | 10.10.10.120 | 10.10.10.122 | Inter-Connect IP | |
| LOCAL_CLUSTER_PORT | 18629 | 18629 | Tibero Node간 통신 Port | |
| CM_PORT | 28629 | 28629 | cmrctl 명령어와 Tibero↔CM 통신을 위한 통신 | |
CM | SID | cm0 | cm1 | TBCM SID |
| CM Inter-Connect PORT | 29000 | 29000 | TBCM Node간 통신 Port (cmrctl add 명령시 정의) | |
| CM_UI_PORT | 28629 | 28629 | cmrctl 명령어 실행시 TBCM의 상태 체크를 위해 TBCM에 접속하는 Port | |
1-3) 환경변수
Node 1 | Node 2 |
|---|---|
(tibero)$ cat .bash_profile ### Tibero ENV ### ### Tibero Cluster Manager ENV ### | (tibero)$ cat .bash_profile ### Tibero ENV ### ### Tibero Cluster Manager ENV ### |
1-4) Raw Device 점검
Raw Device는 다음과 같은 특징을 가지고 있습니다.
- Application이 OS를 거치지 않고 직접적으로 접근
- Linux Filesystem에 mount되지 않음
- Character Device
- 하나의 장치를 하나의 파일처럼 이용
단 Raw Device는 장치를 파일처럼 이용하기 때문에 파일시스템과 달리 관리가 어렵다는 단점이 존재합니다.
다음과 같이 Raw Device를 장치를 사용합니다.
[root@tibero ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 100G 0 disk
└─sdb1 8:17 0 100G 0 part
├─datavg-control1 253:5 0 100M 0 lvm
├─datavg-control2 253:6 0 100M 0 lvm
├─datavg-redo001 253:7 0 300M 0 lvm
├─datavg-redo011 253:8 0 300M 0 lvm
├─datavg-redo021 253:9 0 300M 0 lvm
├─datavg-redo002 253:10 0 300M 0 lvm
├─datavg-redo012 253:11 0 300M 0 lvm
├─datavg-redo022 253:12 0 300M 0 lvm
├─datavg-redo101 253:13 0 300M 0 lvm
├─datavg-redo111 253:14 0 300M 0 lvm
├─datavg-redo121 253:15 0 300M 0 lvm
├─datavg-redo102 253:16 0 300M 0 lvm
├─datavg-redo112 253:17 0 300M 0 lvm
├─datavg-redo122 253:18 0 300M 0 lvm
├─datavg-system001 253:19 0 300M 0 lvm
├─datavg-temp001 253:20 0 300M 0 lvm
├─datavg-usr001 253:21 0 300M 0 lvm
├─datavg-syssub 253:22 0 300M 0 lvm
├─datavg-undo0 253:23 0 300M 0 lvm
├─datavg-undo1 253:24 0 300M 0 lvm
├─datavg-cfile1 253:25 0 300M 0 lvm
└─datavg-cfile2 253:26 0 300M 0 lvm
[root@tibero ~]# vi /etc/udev/rules.d/tac.rules
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="control1", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="control2", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="redo001", RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="redo011", RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="redo021", RUN+="/bin/raw /dev/raw/raw5 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="redo002", RUN+="/bin/raw /dev/raw/raw6 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="redo012", RUN+="/bin/raw /dev/raw/raw7 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="redo022", RUN+="/bin/raw /dev/raw/raw8 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="redo101", RUN+="/bin/raw /dev/raw/raw9 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="redo111", RUN+="/bin/raw /dev/raw/raw10 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="redo121", RUN+="/bin/raw /dev/raw/raw11 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="redo102", RUN+="/bin/raw /dev/raw/raw12 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="redo112", RUN+="/bin/raw /dev/raw/raw13 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="redo122", RUN+="/bin/raw /dev/raw/raw14 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="system001", RUN+="/bin/raw /dev/raw/raw15 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="temp001", RUN+="/bin/raw /dev/raw/raw16 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="usr001", RUN+="/bin/raw /dev/raw/raw17 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="syssub", RUN+="/bin/raw /dev/raw/raw18 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="undo0", RUN+="/bin/raw /dev/raw/raw19 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="undo1", RUN+="/bin/raw /dev/raw/raw20 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="cfile1", RUN+="/bin/raw /dev/raw/raw21 %N"
ACTION=="add|change",ENV{DM_VG_NAME}=="datavg",ENV{DM_LV_NAME}=="cfile2", RUN+="/bin/raw /dev/raw/raw22 %N"
ACTION=="add",KERNEL=="raw*",OWNER="tibero",GROUP="dba",MODE="0660"
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
2. 설치
2-1) $CM.tip 설정
Node 1 | Node 2 |
|---|---|
(tibero)$ vi $TB_HOME/config/$CM_SID.tip CM_NAME=cm0 | (tibero)$ vi $TB_HOME/config/$CM_SID.tip CM_NAME=cm1 |
2-2) $TB.tip 설정
Node 1 | Node 2 |
|---|---|
(tibero)$ vi $TB_HOME/config/$TB_SID.tip DB_NAME=tibero ############Memory & Session################### ########cluster################ | (tibero)$ vi $TB_HOME/config/$TB_SID.tip DB_NAME=tibero ############Memory & Session################### ########cluster################ |
2-3) tbdsn.tbr 설정
Node 1 | Node 2 |
|---|---|
(tibero)$ vi $TB_HOME/client/config/tbdsn.tbr tibero0=( | (tibero)$ vi $TB_HOME/client/config/tbdsn.tbr tibero0=( |
2-4) CM Membership Layer Resource 등록
Node | 항목 | 명령어 |
|---|---|---|
Node 1 | TBCM 기동 | (tibero)$ tbcm -b # vip 사용 환경일 경우 root로 수행 |
| 네트워크 등록 | (tibero)$ cmrctl add network --name net0 --ipaddr 10.10.10.121 --portno 29000 (tibero)$ cmrctl add network --name pub0 --nettype public --ifname enp0s3 | |
| Cluster 등록 | (tibero)$ cmrctl add cluster --name cls0 --incnet net0 --pubnet pub0 --cfile "/dev/raw/raw21,/dev/raw/raw22" | |
| Cluster 기동 | (tibero)$ cmrctl start cluster --name cls0 | |
Node 2 | TBCM 기동 | (tibero)$ tbcm -b # vip 사용 환경일 경우 root로 수행 |
| 네트워크 등록 | (tibero)$ cmrctl add network --name net1 --ipaddr 10.10.10.122 --portno 29000 (tibero)$ cmrctl add network --name pub1 --nettype public --ifname enp0s3 | |
| Cluster 등록 | (tibero)$ cmrctl add cluster --name cls0 --incnet net1 --pubnet pub1 --cfile "/dev/raw/raw21,/dev/raw/raw22" | |
| Cluster 기동 | (tibero)$ cmrctl start cluster --name cls0 |
2-5) CM Resource Layer Resource 등록
서비스는 공유되기 때문에 Node 2에서 등록 생략합니다.
Node | 항목 | 명령어 |
|---|---|---|
Node 1 | DB 서비스 등록 | (tibero)$ cmrctl add service --name tibero --cname cls0 --type db |
| DB 등록 | (tibero)$ cmrctl add db --name tibero0 --svcname tibero --dbhome $TB_HOME --envfile $HOME/.bash_profile | |
| VIP 등록 | (tibero)$ cmrctl add vip --name vip0 --node cm0 --svcname tibero --ipaddr 192.168.50.126/255.255.255.0 --bcast 192.168.50.255 | |
Node 2 | DB 등록 | (tibero)$ cmrctl add db --name tibero1 --svcname tibero --dbhome $TB_HOME --envfile $HOME/.bash_profile |
| VIP 등록 | (tibero)$ cmrctl add vip --name vip1 --node cm1 --svcname tibero --ipaddr 192.168.50.127/255.255.255.0 --bcast 192.168.50.255 |
참고
VIP 등록은 필수가 아니며, 등록시 TBCM이 root 권한으로 기동되어야 합니다.
VIP 등록 커맨드
cmrctl add vip --name <vip_name> --node <cm_sid> --svcname <database_name> --ipaddr <virtual_IP>/<Netmask> --bcase <broadcast>
2-6) DB 생성
Node | 항목 | 명령어 |
|---|---|---|
Node 1 | DB nomount 기동 | (tibero)$ tbboot nomount (혹은 cmrctl start db --name tibero0 --option "-t nomount") |
| DB 생성 | (tibero)$ tbsql sys/tibero SQL> create database | |
| DB 기동 | (tibero)$ tbboot | |
| system_install.sh 수행 | (tibero)$ sh $TB_HOME/scripts/system_install.sh -p1 tibero -p2 syscat | |
| Node 2 Undo, Redo 추가 | (tibero)$ tbsql sys/tibero SQL> create undo tablespace UNDO1 datafile '/dev/raw/raw20' size 100m autoextend on next 32M; | |
| Node 2 활성화 | SQL> alter database enable public thread 1 ; | |
Node 2 | DB 기동 | (tibero)$ tbboot |
2-7) 확인
항목 | 내용 |
|---|---|
Cluster | |
DB |
참고
1. $CM_SID.tip 설정
항목 | 필수 | 설명 |
|---|---|---|
| CM_NAME | 필수 | 클러스터를 생성할 때에 node identifier 로 쓸 이름이다 . 서로 다른 노드의 CM 은 다른 값을 가져야 한다. |
| CM_UI_PORT | 필수 | cmrctl 명령어 수행할 때에 CM 으로 접속하는 용도로 사용할 네트워크 포트 번호이다 |
| CM_RESOURCE_FILE | 필수 | CM 리소스 파일의 경로 |
| LOG_LVL_CM | 선택 | CM이 로그를 남기는 수준을 지정한다. 값이 높을수록 CM 이 더 많은 로그를 저장하며 , 1~6 사이의 정수값을 가질 수 있다.(기본값: 2) |
| CM_LOG_DEST | 선택 | CM이 로그를 남길 디렉터리를 지정한다. 이 값은 반드시 절대 경로여야 한다. (기본값 : $CM_HOME/instance/$CM_SID/ |
| CM_HEARTBEAT_EXPIRE | 선택 | Heartbeat expire란 다른 노드의 CM 에 문제가 생겼다는 것을 CM 이 알아차리는데 필요한 표준 시간을 의미한다. 해당 시간을 지나면 cluster member에서 out (단위 : 초 (second), 기본값 : 300) |
| CM_WATCHDOG_EXPIRE | 선택 | Tibero와 CM 사이에 watchdog 기능이 활성화되어 있을 경우 만료 기간을 지정한다. 만약 CM 이 이 값이 지정한 시간 동안 동작하지 않으면 , Tibero 가 자동적으로 종료된다. CM_HEARTBEAT_EXPIRE 보다 작은 값을 사용해야 한다(단위 : 초 (second), 기본값 : 290) |
| CM_FENCE | 선택 | CM fence데몬을 실행시킬지를 결정한다 CM이 I/O 수행을 CM_WATCHDOG_EXPIRE 에 지정된 시간보다 오래할 경우 , 다른 CM 들이 이 CM 의 노드를 클러스터에서 제외시키기 때문에 이 CM 의 노드는 OS 를 재부팅해야 한다. |