quinta-feira, 19 de outubro de 2017

Tibero 6 disponível no AWS Marketplace

O Tibero 6 foi lançado na plataforma AWS. Pode ser localizado com o título: "Tibero CE Cloud Edition - RHEL".

O Tibero CE (Cloud Edition) é uma versão exclusiva do Tibero 6, um SGBD relacional padrão, que oferece uma arquitetura preparada em nuvem, eficiente em termos de recursos e confiável, para pedidos de processamento de dados de alto volume usando sessões em grande escala. Um sistema de gerenciamento de banco de dados relacional representativo, o Tibero CE oferece um desenvolvimento fácil e flexível com foco na conformidade e compatibilidade de padrões SQL.

Confira os detalhes Aqui.

quinta-feira, 12 de outubro de 2017

Como criar um ambiente de Alta Disponibilidade usando TAC

Bom pessoal, como estamos recebendo bastante solicitações de como criar um ambiente de HA (High Availability) no Tibero usando TAC (Tibero Active Cluster), tecnologia similar ao Oracle RAC, resolvi criar este tutorial para ajudar. Não vou entrar em questões sobre como preparar a infraestrutura para isso neste momento. Para referência, estou usando um ambiente virtual usando VirtuaBox, Com 2 VMs Linux instaladas e com um disco compartilhado entre elas, configurado no virtualizador mesmo.
Espero poder passar para vocês o quanto é simples a configuração de um TAC no Tibero. Alguns "experts" no Brasil já conseguiram finalizar esta tarefa em aproximadamente 10 a 15 minutos. É claro que toda a preparação de infraestrutura já havia sido feita anteriormente. Mesmo assim, a tarefa de criação do TAC é muito simples, permitindo estas finalizações bem rápidas para quem é expert no assunto.

NOTA: Este exemplo baseia-se na versão 6 Fixset 6 do Tibero.

Antes de iniciar, é importante a leitura completa dos manuais do Tibero sobre estes assuntos. Assim como a instalação e configuração dos pré-requisitos de instalação do Tibero.

Para configurar um ambiente de alta disponibilidade, muitas informações são necessárias previamente. Planejamento é fundamental, portanto, elaboramos um mapa de uma situação hipotética para ajudar a configurar o ambiente de forma apropriada. Esta prática é recomendada, pois as variáveis ficam claras no momento de atribuir os valores corretos nos processos de configuração do ambiente.

Para este exercício, algumas etapas anteriores são necessárias, como a criação de VMs com Linux e todo o setup delas. Não é o foco deste tutorial informar como criar este ambiente de infraestrutura. Se alguém tiver alguma dúvida neste sentido, ou qualquer outra dúvida, por favor utilize os comentários deste post.

Termos utilizados neste material:

TAS ou AS (Tibero Active Storage): Responsável pela virtualização de discos, "logic shared cluster file system" entre as instâncias do TAC, entre outras funções.

TAC (Tibero Active Cluster): É a principal tecnologia do Tibero que fornece alta disponibilidade e escalabilidade compartilhando um banco de dados em comum. Funções como load balance e failover são nativas desta tecnologia.

TCM ou CM (Tibero Cluster Manager): Responsável por gerenciar as funções de cluster entre as instâncias do Tibero em um ambiente de alta disponibilidade.
VIP (Virtual IP): Tecnologia que permite a transição de IPs entre os nodes do TAC em caso de falha de algum node, tornando a operação transparente.

Diagrama em blocos genérico de um ambiente de alta disponibilidade usando o Tibero:
(Créditos da imagem para: Franco Rizzo - TmaxSoft USA)


Desenho do esquema da solução usada neste exemplo:


Script de implementação:

 TAS + TAC:

- Instalação e configuração do TAS:

- VM1:

      - Configurar as variáveis de ambiente:

[root@tac1-training ~]# su - tibero

[tibero@tac1-training ~]$ vi .bash_profile
##############################################################
# TIBERO TAS:
##############################################################
export TB_HOME=/home/tibero/tibero6
export TB_SID=tas1
export CM_SID=cm1
export CM_HOME=/home/tibero/tibero6
export LD_LIBRARY_PATH=$TB_HOME/lib:$TB_HOME/client/lib
export PATH=$PATH:$TB_HOME/bin:$TB_HOME/client/bin
tibero@tac1-training ~]$ source .bash_profile

  - Instalar o Tibero:

[tibero@tac1-training ~]$ tar -xzvf /home/install/tibero6-bin-FS06-linux64-142998-opt-20170420182339.tar.gz
[tibero@tac1-training ~]$ cp /home/install/tac1-training.tibero.license.xml tibero6/license/license.xml
  - Configurar o arquivo de parâmetros de inicialização do Tibero:

[tibero@tac1-training ~]$ cd tibero6/config/
[tibero@tac1-training config]$ sh gen_tip.sh

[tibero@tac1-training config]$ vi tas1.tip
DB_NAME=tas
LISTENER_PORT=9620
MAX_SESSION_COUNT=20
MEMORY_TARGET=2G
TOTAL_SHM_SIZE=1G
INSTANCE_TYPE=AS
AS_DISKSTRING="/db/tibero/devs/disk*"
CLUSTER_DATABASE=Y
LOCAL_CLUSTER_ADDR=100.100.100.10
LOCAL_CLUSTER_PORT=20000
CM_PORT=48629
THREAD=0

[tibero@tac1-training config]$ vi cm1.tip
CM_NAME=cm1
CM_UI_PORT=48629
CM_RESOURCE_FILE="/home/tibero/tibero6/config/cm1.rsc"
CM_HEARTBEAT_EXPIRE=60
CM_WATCHDOG_EXPIRE=55

      - Configurar os parâmetros de conexão do client:

[tibero@tac1-training config]$ vi $TB_HOME/client/config/tbdsn.tbr
tas1=
((INSTANCE=(HOST=100.100.100.10)
(PORT=9620)
(DB_NAME=tas)
  )
)

  - Criar e iniciar o Disk Space do TAS:

[tibero@tac1-training config]$ tbboot nomount
[tibero@tac1-training config]$ tbsql sys/tibero@tas1
SQL>
CREATE DISKSPACE ds0 NORMAL REDUNDANCY
FAILGROUP fg1 DISK
'/db/tibero/devs/disk101' NAME disk101
FAILGROUP fg2 DISK
'/db/tibero/devs/disk201' NAME disk201
ATTRIBUTE 'AU_SIZE'='4M';

- Instalação e configuração do TAC:

- VM1:

[tibero@tac1-training config]$ cd $TB_HOME

[tibero@tac1-training tibero6]$ vi tas1.profile
PATH="${PATH}:/home/tibero/tibero6/bin"; export PATH
PATH="${PATH}:/home/tibero/tibero6/client/bin"; export PATH
TB_HOME=/home/tibero/tibero6; export TB_HOME
TB_SID=tas1; export TB_SID
LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/home/tibero/tibero6/client/lib"; export LD_LIBRARY_PATH
LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/home/tibero/tibero6/lib"; export LD_LIBRARY_PATH
  - Adicionar os recursos do TAC:

[tibero@tac1-training tibero6]$ tbcm -b
[tibero@tac1-training tibero6]$ tbcm -s
-  Adicionar o recurso de rede privada:

[tibero@tac1-training tibero6]$ cmrctl add network --nettype private --ipaddr 100.100.100.10  --portno 18629 --name net1
  - Adicionar o recurso de rede pública:

[tibero@tac1-training tibero6]$ cmrctl add network --nettype public --ifname enp0s3 --name pub1

  - Adicionar o recurso de cluster:

[tibero@tac1-training tibero6]$ cmrctl add cluster --incnet net1 --pubnet pub1 --cfile "+/db/tibero/devs/disk*" --name cls1
[tibero@tac1-training tibero6]$ cmrctl start cluster --name cls1

  - Adicionar o recurso de serviço do TAS:

[tibero@tac1-training tibero6]$ cmrctl add service --name tas --type as --cname cls1
  - Adicionar o recurso do TAS:

[tibero@tac1-training tibero6]$ cmrctl add as --name tas1 --svcname tas --dbhome $CM_HOME --envfile /home/tibero/tibero6/tas1.profile

  - Iniciar a instância do TAS:

[tibero@tac1-training tibero6]$ cmrctl start as --name tas1
  - Conectar na instância em execução e adicionar a THREAD para o start up do TAS no node 2:

[tibero@tac1-training tibero6]$ tbsql sys/tibero@tas1

SQL>
ALTER DISKSPACE ds0 ADD THREAD 1;
  - Adicionar o recurso de serviço do TAC:

cmrctl add service --name tac --cname cls1
  - Criar um arquivo de profile requerido pelo CM para o node 1:

[tibero@tac1-training tibero6]$ vi tac1.profile
PATH="${PATH}:/home/tibero/tibero6/bin"; export PATH
PATH="${PATH}:/home/tibero/tibero6/client/bin"; export PATH
TB_HOME=/home/tibero/tibero6; export TB_HOME
TB_SID=tac1; export TB_SID
LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/home/tibero/tibero6/client/lib"; export LD_LIBRARY_PATH
LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/home/tibero/tibero6/lib"; export LD_LIBRARY_PATH

  - Criar o arquivo de parâmetros de inicialização do Tibero para o TAC1:

[tibero@tac1-training tibero6]$ vi config/tac1.tip
DB_NAME=tac
LISTENER_PORT=8629
CONTROL_FILES="+DS0/tac/c1.ctl"
DB_CREATE_FILE_DEST="+DS0/tac"
LOG_ARCHIVE_DEST="+DS0/tac/archive"
MAX_SESSION_COUNT=20
TOTAL_SHM_SIZE=1G
MEMORY_TARGET=2G
USE_ACTIVE_STORAGE=Y
AS_PORT=9620
LOCAL_CLUSTER_ADDR=100.100.100.10
CM_PORT=48629
LOCAL_CLUSTER_PORT=21000
CLUSTER_DATABASE=Y
THREAD=0
UNDO_TABLESPACE=UNDO0
  - Adicionar o recurso de Database:

[tibero@tac1-training tibero6]$ cmrctl add db --name tac1 --svcname tac --dbhome $CM_HOME --envfile /home/tibero/tibero6/tac1.profile

  - Iniciar a instância do Database em NOMOUNT mode:

[tibero@tac1-training tibero6]$ cmrctl start db --name tac1 --option "-t nomount"
      - Configurar os parâmetros de conexão do client:

[tibero@tac1-training config]$ vi $TB_HOME/client/config/tbdsn.tbr
tac1=
((INSTANCE=(HOST=100.100.100.10)
(PORT=8629)
(DB_NAME=tac)
  )
)

  - Criar o Database:

[tibero@tac1-training tibero6]$ tbsql sys/tibero@tac1
SQL>
  CREATE DATABASE "tac"
USER sys IDENTIFIED BY tibero
MAXINSTANCES 8
MAXDATAFILES 256
CHARACTER SET WE8MSWIN1252
LOGFILE
      GROUP 0 '+DS0/tac/log001.log' SIZE 100M,
GROUP 1 '+DS0/tac/log011.log' SIZE 100M,
GROUP 2 '+DS0/tac/log021.log' SIZE 100M
MAXLOGFILES 255
MAXLOGMEMBERS 8
NOARCHIVELOG
DATAFILE '+DS0/tac/system001.dtf' SIZE 100M AUTOEXTEND ON NEXT 5M MAXSIZE 500M
    DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '+DS0/tac/temp001.dtf' SIZE 100M AUTOEXTEND ON NEXT 5M MAXSIZE 500M EXTENT MANAGEMENT LOCAL AUTOALLOCATE
UNDO TABLESPACE UNDO0 DATAFILE '+DS0/tac/undo001.dtf' SIZE 100M AUTOEXTEND ON NEXT 5M MAXSIZE 500M EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

  - Iniciar a instância do Database em NORMAL mode:

[tibero@tac1-training tibero6]$ cmrctl start db --name tac1
  - Criar o UNDO TABLESPACE para o segundo node do TAC:

[tibero@tac1-training tibero6]$ tbsql sys/tibero@tac1

SQL>
  CREATE UNDO TABLESPACE UNDO1 DATAFILE '+DS0/tac/undo002.dtf' SIZE 100M AUTOEXTEND ON NEXT 5M MAXSIZE 500M EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
  - Adicionar os REDO LOGS para o segundo node do TAC:

SQL>
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 3 '+DS0/tac/log031.log' size 100M;
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 4 '+DS0/tac/log041.log' size 100M;
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 5 '+DS0/tac/log051.log' size 100M;

  - Adicionar a THREAD pública para o segundo node do TAC:

SQL>
ALTER DATABASE ENABLE PUBLIC THREAD 1;
  - Criar o dicionário de dados do sistema:

[tibero@tac1-training tibero6]$ . ./tac1.profile
[tibero@tac1-training tibero6]$ sh $TB_HOME/scripts/system.sh -p1 tibero -p2 syscat -a1 Y -a2 Y -a3 Y -a4 Y

- Instalação e configuração do TAS:

- VM2:

      - Configurar as variáveis de ambiente:

[root@tac2-training ~]# su - tibero

[tibero@tac2-training ~]$ vi .bash_profile
##############################################################
# TIBERO TAS:
##############################################################
export TB_HOME=/home/tibero/tibero6
export TB_SID=tas2
export CM_SID=cm2
export CM_HOME=/home/tibero/tibero6
export LD_LIBRARY_PATH=$TB_HOME/lib:$TB_HOME/client/lib
export PATH=$PATH:$TB_HOME/bin:$TB_HOME/client/bin
[tibero@tac1-training ~]$ source .bash_profile

      - Instalar o Tibero:

[tibero@tac2-training ~]$ tar -xzvf /home/install/tibero6-bin-FS06-linux64-142998-opt-20170420182339.tar.gz
[tibero@tac2-training ~]$ cp /home/install/tac2-training.tibero.license.xml tibero6/license/license.xml
      - Configurar o arquivo de parâmetros de inicialização do Tibero:

[tibero@tac2-training ~]$ cd tibero6/config/
[tibero@tac2-training config]$ sh gen_tip.sh

[tibero@tac2-training config]$ vi tas2.tip
DB_NAME=tas
LISTENER_PORT=9620
MAX_SESSION_COUNT=20
MEMORY_TARGET=2G
TOTAL_SHM_SIZE=1G
INSTANCE_TYPE=AS
AS_DISKSTRING="/db/tibero/devs/disk*"
CLUSTER_DATABASE=Y
LOCAL_CLUSTER_ADDR=100.100.100.20
LOCAL_CLUSTER_PORT=20000
CM_PORT=48629
THREAD=1

[tibero@tac2-training config]$ vi cm2.tip
CM_NAME=cm2
CM_UI_PORT=48629
CM_RESOURCE_FILE="/home/tibero/tibero6/config/cm2.rsc"
CM_HEARTBEAT_EXPIRE=60
CM_WATCHDOG_EXPIRE=55
      - Configurar os parâmetros de conexão do client:

[tibero@tac2-training config]$ vi $TB_HOME/client/config/tbdsn.tbr
tas2=
((INSTANCE=(HOST=100.100.100.20)
(PORT=9620)
(DB_NAME=tas)
)
)

  - Instalação e configuração do TAC:

    - VM2:

[tibero@tac2-training config]$ cd $TB_HOME

[tibero@tac2-training tibero6]$ vi tas2.profile
PATH="${PATH}:/home/tibero/tibero6/bin"; export PATH
PATH="${PATH}:/home/tibero/tibero6/client/bin"; export PATH
TB_HOME=/home/tibero/tibero6; export TB_HOME
TB_SID=tas2; export TB_SID
LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/home/tibero/tibero6/client/lib"; export LD_LIBRARY_PATH
LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/home/tibero/tibero6/lib"; export LD_LIBRARY_PATH
      - Adicionar os recursos do TAC:

[tibero@tac2-training tibero6]$ tbcm -b
[tibero@tac2-training tibero6]$ tbcm -s
      - Adicionar o recurso de rede privada:

[tibero@tac2-training tibero6]$ cmrctl add network --nettype private --ipaddr 100.100.100.20  --portno 18629 --name net1
       - Adicionar o recurso de rede pública:

[tibero@tac2-training tibero6]$ cmrctl add network --nettype public --ifname enp0s3 --name pub1

      - Adicionar o recurso de cluster:

[tibero@tac2-training tibero6]$ cmrctl add cluster --incnet net1 --pubnet pub1 --cfile "+/db/tibero/devs/disk*" --name cls1
[tibero@tac2-training tibero6]$ cmrctl start cluster --name cls1

      - Adicionar o recurso do TAS:

[tibero@tac2-training tibero6]$ cmrctl add as --name tas2 --svcname tas --dbhome $CM_HOME --envfile /home/tibero/tibero6/tas2.profile

      - Iniciar a instância do TAS:

[tibero@tac2-training tibero6]$ cmrctl start as --name tas2
      - Criar um arquivo de profile requerido pelo CM para o node 2:

[tibero@tac2-training tibero6]$ vi tac2.profile
PATH="${PATH}:/home/tibero/tibero6/bin"; export PATH
PATH="${PATH}:/home/tibero/tibero6/client/bin"; export PATH
TB_HOME=/home/tibero/tibero6; export TB_HOME
TB_SID=tac2; export TB_SID
LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/home/tibero/tibero6/client/lib"; export LD_LIBRARY_PATH
LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/home/tibero/tibero6/lib"; export LD_LIBRARY_PATH

      - Criar o arquivo de parâmetros de inicialização do Tibero para o TAC2:

[tibero@tac2-training tibero6]$ vi config/tac2.tip
DB_NAME=tac
LISTENER_PORT=8629
CONTROL_FILES="+DS0/tac/c1.ctl"
DB_CREATE_FILE_DEST="+DS0/tac"
LOG_ARCHIVE_DEST="+DS0/tac/archive"
MAX_SESSION_COUNT=20
TOTAL_SHM_SIZE=1G
MEMORY_TARGET=2G
USE_ACTIVE_STORAGE=Y
AS_PORT=9620
LOCAL_CLUSTER_ADDR=100.100.100.20
CM_PORT=48629
LOCAL_CLUSTER_PORT=21000
CLUSTER_DATABASE=Y
THREAD=1
UNDO_TABLESPACE=UNDO1
#SERVER_SIDE_LOAD_BALANCE=LONG

      - Adicionar o recurso de Database:

[tibero@tac2-training tibero6]$ cmrctl add db --name tac2 --svcname tac --dbhome $CM_HOME --envfile /home/tibero/tibero6/tac2.profile

      - Iniciar a instância do Database:

[tibero@tac2-training tibero6]$ cmrctl start db --name tac2
      - Configurar os parâmetros de conexão do client:

[tibero@tac2-training config]$ vi $TB_HOME/client/config/tbdsn.tbr
tac2=
  ((INSTANCE=(HOST=100.100.100.20)
(PORT=8629)
(DB_NAME=tac)
)
)

⇨ Exercícios de loadbalance e failover "SEM VIP":

  - Configurar os parâmetros de conexão do client:

  - VM1:

[tibero@tac1-training config]$ vi $TB_HOME/client/config/tbdsn.tbr
tac=
((INSTANCE=(HOST=100.100.100.10)
(PORT=8629)
(DB_NAME=tac))
(INSTANCE=(HOST=100.100.100.20)
(PORT=8629)
(DB_NAME=tac))
(LOAD_BALANCE=Y)
(USE_FAILOVER=Y)
)
  - VM2:

[tibero@tac2-training ~]$ vi tibero6/client/config/tbdsn.tbr
tac=
((INSTANCE=(HOST=100.100.100.20)
  (PORT=8629)
(DB_NAME=tac))
(INSTANCE=(HOST=100.100.100.10)
(PORT=8629)
(DB_NAME=tac))
(LOAD_BALANCE=Y)
(USE_FAILOVER=Y)
)
  - Teste #001: Com as duas VMs no ar, criar usuário, tabela e inserir dados para testar o HA:

  - VM1:

[tibero@tac1-training ~]$ tbsql sys/tibero@tac

SQL>
  create user TESTE identified by tibero;
grant dba to teste;
conn teste/tibero@tac
create table T1(id number);
insert into T1 values (12345);

  - VM2:

[tibero@tac2-training ~]$ tbsql sys/tibero@tac

SQL>
  select * from T1;
  - VM1:

SQL>
commit;
  - VM2:

SQL>
select * from T1;
ID
  ----------
12345

  - Teste #002: Com as duas VMs no ar, conectar/desconectar algumas vezes para verificar o loadbalance:

- VM1:

[tibero@tac1-training ~]$ tbsql sys/tibero@tac

SQL>
  col INSTANCE_NAME format a10
  col HOST_NAME format a20
  select INSTANCE_NAME, HOST_NAME, THREAD# from v$instance;
  INSTANCE_N HOST_NAME               THREAD#
  ---------- -------------------- ----------
  tac1       tac1-training                 0

[tibero@tac1-training ~]$ tbsql sys/tibero@tac

SQL>
  col INSTANCE_NAME format a10
col HOST_NAME format a20
select INSTANCE_NAME, HOST_NAME, THREAD# from v$instance;
INSTANCE_N HOST_NAME               THREAD#
---------- -------------------- ----------
tac2       tac2-training                 1
  - Teste #003: Com as duas VMs no ar, simular a queda de um nó, para verificar o failover:

    - VM1:

[tibero@tac1-training ~]$ tbsql sys/tibero@tac
SQL>
  col INSTANCE_NAME format a10
col HOST_NAME format a20
select INSTANCE_NAME, HOST_NAME, THREAD# from v$instance;
INSTANCE_N HOST_NAME               THREAD#
---------- -------------------- ----------
tac2       tac2-training                 1

    - VM2:

- Verificado que a conexão foi para a VM2, derrube este nó:

[tibero@tac2-training ~]$ cmrctl stop db --name tac2 --option immediate
- VM1:

- Execute o comando novamente, duas vezes, para verificar o failover:

SQL> /
TBR-2139: Connection to server was interrupted but the fail-over successfully reconnected.

SQL> /
INSTANCE_N HOST_NAME               THREAD#
---------- -------------------- ----------
tac1       tac1-training                 0

 VIP:

To add VIP, "tbcm" must be started using the ROOT privileges, and the "pubnet" attribute must be set for the service specified in "svcname".

  - Stop all nodes:

  - VM1:

[tibero@tac606tac1 tibero6]$ cmrctl stop service --name tac
[tibero@tac606tac1 tibero6]$ cmrctl stop service --name tas
[tibero@tac606tac1 tibero6]$ tbcm -d

  - VM2:

[tibero@tac606tac2 tibero6]$ tbcm -d

  - Configure o VIP:

  - VM1:

  - Configurar os parâmetros de conexão do client:

[tibero@tac1-training config]$ vi $TB_HOME/client/config/tbdsn.tbr
vip=
((INSTANCE=(HOST=100.100.100.11)
(PORT=8629)
(DB_NAME=tac))
(INSTANCE=(HOST=100.100.100.21)
(PORT=8629)
(DB_NAME=tac))
 (LOAD_BALANCE=Y)
 (USE_FAILOVER=Y)
)
  - Log in as ROOT:

[tibero@tac1-training ~]$ su - root

      - Configure as variáveis de ambiente:

[root@tac1-training ~]# vi .bash_profile
####################################################################
# TIBERO CM:
####################################################################
export TB_HOME=/home/tibero/tibero6
export CM_SID=cm1
export CM_HOME=/home/tibero/tibero6
export LD_LIBRARY_PATH=$TB_HOME/lib:$TB_HOME/client/lib
export PATH=$PATH:$TB_HOME/bin:$TB_HOME/client/bin
[root@tac1-training ~]# source .bash_profile

      - Inicie o CM como ROOT:

[root@tac1-training ~]# tbcm -b
CM Guard daemon started up.
import resources from '/home/tibero/tibero6/config/cm1.rsc'...
TBCM 6.1.1 (Build 139624)
TmaxData Corporation Copyright (c) 2008-. All rights reserved.
Tibero cluster manager started up.
Local node name is (cm1:48629).

      - Voltar para o contexto de normal user e verificar o status do CM, note que a informação "ROOT ON" é exibida na linha: "CM MODE":
[root@tac1-training ~]# exit

[tibero@tac1-training ~]$ tbcm -s
CM information
===========================================================
CM NAME             : cm1
CM UI PORT          : 48629
RESOURCE FILE PATH  : /home/tibero/tibero6/config/cm1.rsc
CM MODE             : GUARD ON, FENCE OFF, ROOT ON
LOG LEVEL           : 2
CM BLOCK SIZE       : 512
===========================================================
      - Verificar o status do CLUSTER, note que a informação "(ROOT)" é exibida na linha: "Status" e que a letra "R" aparece na coluna "Mst":

[tibero@tac1-training ~]$ cmrctl show cluster --name cls1
Cluster Resource Info
===============================================================
Cluster name      : cls1
Status            : UP         (ROOT)
Master node       : (1) cm1
Last NID          : 1
Local node        : (1) cm1
Storage type      : Active Storage
AS Diskstring     : /dev/sd*
No. of cls files  : 3
  (1) +0
  (2) +1
  (3) +2
===============================================================
|                          NODE LIST                          |
|-------------------------------------------------------------|
| NID   Name          IP/PORT       Status Schd Mst  FHB  NHB |
| --- -------- -------------------- ------ ---- --- ---- ---- |
|   1      cm1 100.100.100.10/18629     UP    Y R M [ LOCAL ] |
===============================================================
|                   CLUSTER RESOURCE STATUS                   |
|-------------------------------------------------------------|
|       NAME         TYPE    STATUS    NODE        MISC.      |
| ---------------- -------- -------- -------- --------------- |
|                        SERVICE: tas                         |
|             tas1       AS     DOWN      cm1                 |
|                        SERVICE: tac                         |
|             tac1       DB     DOWN      cm1                 |
===============================================================

      - Inicie o serviço do TAS:

[tibero@tac1-training ~]$ cmrctl start service --name tas

      - Inicie o serviço do TAC:

[tibero@tac1-training ~]$ cmrctl start service --name tac

      - Adicione o recurso VIP para o node 1 do TAC:
[tibero@tac1-training ~]$ cmrctl add vip --name vip1 --node cm1 --svcname tac --ipaddr 172.30.248.241/255.255.255.0
Resource add success! (vip, vip1)

  - VM2:

  - Configurar os parâmetros de conexão do client:

[tibero@tac2-training config]$ vi $TB_HOME/client/config/tbdsn.tbr
vip=
((INSTANCE=(HOST=100.100.100.11)
(PORT=8629)
(DB_NAME=tac))
(INSTANCE=(HOST=100.100.100.21)
(PORT=8629)
(DB_NAME=tac))
 (LOAD_BALANCE=Y)
 (USE_FAILOVER=Y)
)
  - Log in as ROOT:

[tibero@tac2-training ~]$ su - root

      - Configure as variáveis de ambiente:

[root@tac2-training ~]# vi .bash_profile
##################################################################### TIBERO CM:
####################################################################
export TB_HOME=/home/tibero/tibero6
export CM_SID=cm2
export CM_HOME=/home/tibero/tibero6
export LD_LIBRARY_PATH=$TB_HOME/lib:$TB_HOME/client/lib
export PATH=$PATH:$TB_HOME/bin:$TB_HOME/client/bin
[root@tac2-training ~]# source .bash_profile

      - Inicie o CM como ROOT:

[root@tac2-training ~]# tbcm -b
CM Guard daemon started up.
import resources from '/home/tibero/tibero6/config/cm1.rsc'...
TBCM 6.1.1 (Build 139624)
TmaxData Corporation Copyright (c) 2008-. All rights reserved.
Tibero cluster manager started up.
Local node name is (cm1:48629).
[root@tac2-training ~]# exit

      - Voltar para o contexto de normal user e iniciar o recurso do TAS da VM2:

[tibero@tac2-training ~]$ cmrctl start as --name tas2

      - Iniciar o recurso do TAC da VM2:

[tibero@tac2-training ~]$ cmrctl start db --name tac2
[tibero@tac2-training ~]$ cmrctl add vip --name vip2 --node cm2 --svcname tac --ipaddr 192.168.15.146/255.255.255.0

  - VM1:

      - Verifique o status do  TAC na VM1 e na VM2 usando apenas a VM1 para isso:

[tibero@tac1-training ~]$ cmrctl show ; cmrctl show --remote cm2@cls1

⇨ Exercícios de loadbalance e failover "COM VIP":

- Refazer os testes #001, #002 e #003 anteriores.