Document Type | Technical Information
Category | Installation
Applicable Product Version | Tibero 7.2.4
Document Number | TINTI039
Overview
1. What is TAC?
TAC automatically fail-overs to a normally operating node in case of failures in the DB engine, OS, system, or public network, maintaining an uninterrupted system and enabling quick recovery.
Depending on the workload, it can be configured as a large-scale triple-node cluster beyond dual redundancy to deliver optimal performance when handling large volumes of data.
TAC allows flexible capacity adjustment through horizontal scaling of active nodes and improves system performance by minimizing disk I/O using Global Cache.
2. TAC Installation Architecture
Method
TAC Installation (using raw device)
1. Installation Environment
1) Installation Steps
Step | Item | Description |
|---|---|---|
1 | Basic Setup | Environment variables, CM, Tibero tip settings |
2 | Cluster Membership Layer Setup | Process of connecting each node into a cluster |
3 | Cluster Resource Layer Setup | Process of registering resources used by nodes |
4 | DB Configuration | DB configuration |
1-2) Node Environment
Item | Node 1 | Node 2 | Description | |
OS | hostname | tibero0 | tibero1 | Hostname of each server |
| User | tibero | tibero | OS user where Tibero is installed | |
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 | Communication port between Tibero nodes | |
| CM_PORT | 28629 | 28629 | Communication for cmrctl commands and TiberoβCM communication | |
CM | SID | cm0 | cm1 | TBCM SID |
| CM Inter-Connect PORT | 29000 | 29000 | Communication port between TBCM nodes (defined when running cmrctl add command) | |
| CM_UI_PORT | 28629 | 28629 | Port to connect to TBCM for status check when running cmrctl commands | |
1-3) Environment Variables
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 Check
Raw devices have the following characteristics:
- Applications access directly without going through the OS
- Not mounted on Linux Filesystem
- Character Device
- Uses one device as if it were a single file
However, because raw devices are used like files, they are more difficult to manage than filesystems.
Raw devices are used as shown below:
[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. Installation
2-1) $CM.tip Configuration
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 Configuration
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 Configuration
Node 1 | Node 2 |
|---|---|
(tibero)$ vi $TB_HOME/client/config/tbdsn.tbr tibero0=( | (tibero)$ vi $TB_HOME/client/config/tbdsn.tbr tibero0=( |
2-4) Register CM Membership Layer Resources
Node | Item | Command |
|---|---|---|
Node 1 | Start TBCM | (tibero)$ tbcm -b # Run as root if VIP is used |
| Register Network | (tibero)$ cmrctl add network --name net0 --ipaddr 10.10.10.121 --portno 29000 (tibero)$ cmrctl add network --name pub0 --nettype public --ifname enp0s3 | |
| Register Cluster | (tibero)$ cmrctl add cluster --name cls0 --incnet net0 --pubnet pub0 --cfile "/dev/raw/raw21,/dev/raw/raw22" | |
| Start Cluster | (tibero)$ cmrctl start cluster --name cls0 | |
Node 2 | Start TBCM | (tibero)$ tbcm -b # Run as root if VIP is used |
| Register Network | (tibero)$ cmrctl add network --name net1 --ipaddr 10.10.10.122 --portno 29000 (tibero)$ cmrctl add network --name pub1 --nettype public --ifname enp0s3 | |
| Register Cluster | (tibero)$ cmrctl add cluster --name cls0 --incnet net1 --pubnet pub1 --cfile "/dev/raw/raw21,/dev/raw/raw22" | |
| Start Cluster | (tibero)$ cmrctl start cluster --name cls0 |
2-5) Register CM Resource Layer Resources
Since the service is shared, registration is omitted on Node 2.
Node | Item | Command |
|---|---|---|
Node 1 | Register DB Service | (tibero)$ cmrctl add service --name tibero --cname cls0 --type db |
| Register DB | (tibero)$ cmrctl add db --name tibero0 --svcname tibero --dbhome $TB_HOME --envfile $HOME/.bash_profile | |
| Register 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 | Register DB | (tibero)$ cmrctl add db --name tibero1 --svcname tibero --dbhome $TB_HOME --envfile $HOME/.bash_profile |
| Register 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 |
Note
VIP registration is not mandatory, and if registered, TBCM must be started with root privileges.
VIP registration command
cmrctl add vip --name <vip_name> --node <cm_sid> --svcname <database_name> --ipaddr <virtual_IP>/<Netmask> --bcase <broadcast>
2-6) Create DB
Node | Item | Command |
|---|---|---|
Node 1 | Start DB nomount | (tibero)$ tbboot nomount (or cmrctl start db --name tibero0 --option "-t nomount") |
| Create DB | (tibero)$ tbsql sys/tibero SQL> create database | |
| Start DB | (tibero)$ tbboot | |
| Run system_install.sh | (tibero)$ sh $TB_HOME/scripts/system_install.sh -p1 tibero -p2 syscat | |
| Add Undo and Redo on Node 2 | (tibero)$ tbsql sys/tibero SQL> create undo tablespace UNDO1 datafile '/dev/raw/raw20' size 100m autoextend on next 32M; | |
| Activate Node 2 | SQL> alter database enable public thread 1 ; | |
Node 2 | Start DB | (tibero)$ tbboot |
2-7) Verification
Item | Description |
|---|---|
Cluster | |
DB |
Reference
1. $CM_SID.tip Configuration
Item | Required | Description |
|---|---|---|
| CM_NAME | Required | Name used as node identifier when creating a cluster. Different nodes must have different values. |
| CM_UI_PORT | Required | Network port number used to connect to CM when executing cmrctl commands. |
| CM_RESOURCE_FILE | Required | Path of the CM resource file. |
| LOG_LVL_CM | Optional | Specifies the logging level of CM. Higher values cause CM to save more logs. Accepts integer values from 1 to 6. (Default: 2) |
| CM_LOG_DEST | Optional | Directory where CM logs are saved. Must be an absolute path. (Default: $CM_HOME/instance/$CM_SID/) |
| CM_HEARTBEAT_EXPIRE | Optional | Standard time for CM to detect issues in other CM nodes. After this time, the cluster member is considered out (unit: seconds, default: 300) |
| CM_WATCHDOG_EXPIRE | Optional | Expiration period when watchdog function is enabled between Tibero and CM. If CM does not operate within this time, Tibero automatically shuts down. Must be less than CM_HEARTBEAT_EXPIRE (unit: seconds, default: 290) |
| CM_FENCE | Optional | Determines whether to run the CM fence daemon. If CM performs I/O longer than the time specified in CM_WATCHDOG_EXPIRE, other CMs exclude this CM's node from the cluster, requiring the node to reboot the OS. |