Tibero Active Cluster en AWS

La instalación de Tibero que vamos a hacer es similar a la instalación que haríamos de Oracle RAC en dos nodos. Como algunas personas ya sabréis, AWS no permitía instalar Oracle RAC hasta hace muy poquito tiempo. Los discos EBS necesarios para configurar el almacenamiento compartido no se podían conectar con varias máquinas virtuales de forma simultánea. Esta característica se llama “Multi-Attach”, pero Amazon incorporó esta funcionalidad en Febrero de 2020 💪 (Documentación en AWS aquí).

Otro requisito de Oracle era consiste en habilitar “Multicast”. Esto es posible desde Diciembre de 2019 utilizando “transit gateway”. No es un requisito para Tibero, pero os dejo la página con de AWS con la noticia por si os interesa leer sobre el tema.

Vamos con la arquitectura de nuestra prueba y unos comentarios importantes acerca de la misma.

  • Vamos a crear todos los recursos en la misma zona de disponibilidad (“Availability Zone”). Es un requisito ya que los volúmenes EBS sólo están disponibles para instancias dentro de la misma zona. En este caso eu-west-1a.
  • Para poder conectar los discos a las dos instancias (“Multi-Attach”) necesitamos usar volúmenes EBS de tipo provisioned “Provisioned IOPS SSD (io1).

Para facilitar las cosas, os pongo aquí debajo como se llaman los diferentes componentes de Tibero y cuál sería su equivalente en Oracle. Asimismo, incluyo los comandos que vamos a utilizar y su análogo con Oracle.

Tibero Cluster Manager (CM) Oracle Clusterware
Tibero Active Storage (TAS)Oracle Automatic Storage Management (ASM)
Tibero Active Cluster (TAC)Oracle Real Application Clusters (RAC)
$ cmrctl$ crsctl
$ tbsql$ sqlplus

Configuración AWS

Red VPC

Creamos la red VPC para nuestro entorno con un espacio de direcciones 192.168.0.0/16. Os recuerdo que Amazon recomienda utilizar un bloque de direcciones de /16 o más pequeño. En nuestro caso utilizaremos el archiconocido “192.168”.

⚠️ Crearemos todos los recursos en la región de Irlanda eu-west-1. Tened en cuenta que algunos de estos recursos tienen un coste asociado. Tenéis toda la información de precios en la siguiente página.

Una vez en la consola de AWS ->
-> Click «Services» ->
-> Click «VPC» ->
-> Click «Your VPCs» ->
-> Click «Create VPC» ->
-> Name tag = «tibero-vpc» ->
-> IPv4 CIDR block* = «192.168.0.0/16» ->
-> Click «Create»

Una vez creada podemos comprobar que todo está correcto.

Este paso es opcional, pero lo vamos a hacer para que nuestra instancia tenga un nombre DNS público del tipo “ec2-public-ipv4-address.compute-1.amazonaws.com”, aunque podríamos conectarnos por IP.

En el mismo panel que estamos de VPCs ->
-> Seleccionamos nuestra VPC «tibero-vpc» ->
-> Click «Actions» ->
-> Click «Edit DNS hostnames» ->
-> Habilitamos «DNS hostnames» (enable) ->
-> Click «Save»

Subnets

Creamos las dos redes (“Subnets”) para la red pública y privada del cluster. Es importante recordar que las cuatro primeras y la última dirección IP dentro del espacio de nuestra VPC están reservadas para Amazon (192.168.0.0/1/2/3 y 192.168.0.255). Por comodidad, crearemos las subredes 192.168.1.0/24 y 192.168.2.0/24.

En la consola de AWS ->
-> Click «Services» ->
-> Click «VPC» ->
-> Click «Subnets» ->
-> Click «Create subnet» ->
-> Name tag = «tibero-pub» ->
-> VPC* = «vpc-021d506b4141d7f16» (el ID correspondiente a tibero-vpc) ->
-> Availability Zone = «eu-west-1a» ->
-> VPC CIDRs = «192.168.0.0/16» ->
-> IPv4 CIDR block* = «192.168.1.0/24» ->
-> Click «Create»

De forma casi idéntica para la red privada ->
-> Dentro del panel de «Subnets» ->
-> Click «Create subnet» ->
-> Name tag = «tibero-priv» ->
-> VPC* = «vpc-021d506b4141d7f16» (el ID correspondiente a tibero-vpc) ->
-> Availability Zone = «eu-west-1a» ->
-> VPC CIDRs = «192.168.0.0/16» ->
-> IPv4 CIDR block* = «192.168.2.0/24» ->
-> Click «Create»

Comprobamos que tenemos las dos “Subnets” correctamente configuradas.

Gateway

Para permitir el acceso desde fuera, tenemos que crear un gateway de Internet, conectarlo a nuestra VPC y modificar la rutas de acceso. Normalmente, este paso se realiza de forma automática si escogemos una VPC nueva dentro del asistente de creación de instancias EC2. En este caso, como estamos configurando la VPC por separado, necesitamos hacer estos pasos adicionales. No os asustéis, es pan comido.

Dentro del panel de control de VPC ->
-> Click «Internet Gateways» ->
-> Click «Create internet gateway» ->
-> Name tag = «tibero-ig» ->
-> Click «Create» ->
-> Seleccionamos el gateway recién creado «tibero-ig» ->
-> Click «Actions» ->
-> Click «Attach to VPC» ->
-> VPC = «vpc-021d506b4141d7f16 – tibero-vpc» (el ID de nuestra VPC) ->
-> Click «Attach»

Ahora tenemos que añadir una ruta a nuestro gateway de Internet.

Dentro del panel de control de VPC ->
-> Click «Your VPCs» ->
-> Seleccionamos nuestra VPC «tibero-vpc» ->
-> En la sección inferior, hacemos Click en la tabla de rutas (“Route table”) e.g. «rtb-02be65db4035c4f97» ->
-> Click «Actions» ->
-> Click «Edit routes» ->
-> Click «Add route» ->
-> Destination = «0.0.0.0/0» ->
-> Target = «Internet Gateway» ->
-> Nos saldrá nuestro gateway de Internet «igw-0e378f22bb615ea60 – tibero-ig» ->
-> Click «Save routes»

Podemos verificar que la configuración si pulsamos “Routes” en la sección inferior de nuestra tabla de rutas. Deberías ver algo similar.

Un paso adicional que tenemos que hacer es habilitar la auto-asignación de IPs públicas en nuestra subred tibero-pub. De nuevo, este paso es automático cuando creamos una una nueva instancia, pero esta vez queremos hacer las cosas con un poco más de nivel.

Dentro del panel de control de VPC ->
-> Click «Subnets» ->
-> Seleccionamos nuestra VPC «tibero-pub» ->
-> Click «Actions» ->
-> Click «Modify auto-assign IP settings» ->
-> Habilitamos la opción «Enable auto-assign public IPv2 address» ->
-> Click «Save»

Security group

Creamos un grupo de seguridad de seguridad nuevo (“Security Group”) para abrir el acceso desde Internet a nuestra VPC recién creada y permitir la comunicación entre las instancias.

En la consola de AWS ->
-> Click «EC2» ->
-> Click «Security Groups» ->
-> Click «Create security group» ->
-> Security group name = «tibero-sg» ->
-> Description = «Tibero security group for testing» ->
-> VPC = «vpc-021d506b4141d7f16 (tibero-vpc)» (el ID de nuestra VPC ->
-> Click «Add rule» ->
-> Type = «SSH» ->
-> Source type = «Anywhere» ->
-> Click «Add rule» ->
-> Type «All traffic» ->
-> Source type = «Custom» ->
-> Source = «192.168.1.0/24» ->
-> Description – optional = «Public network» ->
-> Click «Add rule» ->
-> Type «All traffic» ->
-> Source type = «Custom» ->
-> Source = «192.168.2.0/24» ->
-> Description – optional = «Private network» ->
-> Click «Create security group»

Revisamos las reglas para confirmar que todo está perfecto. 👌

Instancia tibero-vm1

Es hora de crear la primera instancia EC2 (tibero-vm1) 😄 Hemos optado por configurar una instancia de la familia M por estar optimizadas para EBS sin coste adicional y mostrar un buen equilibrio entre computación, memory y recursos de red. Es una buena instancia para bases de datos pequeñas y medianas. La más pequeña es de tipo “large” con 2 CPUs virtuales y 8GB de memoria. Con esto tendremos suficiente “músculo” para nuestras pruebas 💪

En la consola de AWS (verificar que seguimos en eu-west-1) ->
-> Click «EC2» ->
-> Click «Instances» ->
-> Click «Launch Instance» ->
-> Click «Select» en Amazon Linux 2 AMI (HVM), SSD Volume Type (64-bit x86) ->
-> Seleccionamos el tipo de instancia «General Purpose – m5n.large» ->
-> Click «Next: Configure Instance Details» ->
-> Number Instances = «1» ->
-> Network = «vpc-021d506b4141d7f16 | tibero-vpc» (el ID de tibero-vpc) ->
-> Subnet = «subnet-06563ee47accc68bb | tibero-pub | eu-west-1a» (el id de tibero-pub) ->
-> Primary IP en eth0 = «192.168.1.10» ->
-> Click «Add Device» ->
-> Seleccionamos la subnet «subnet-007d10da1ddfb691c (tibero-priv)» ->
-> Primary IP en eth1 = «192.168.2.10» ->
-> Click «Next: Add Storage» ->
-> Size = «60» ->
-> Click «Next: Add Tags» ->
-> Click «Next: Configure Security Group» ->
-> Click «Select an existing security group» ->
-> Seleccionamos «sg-0c1b40e3e96dd4255 – tibero-sg» (el ID de nuestra Security group) ->
-> Click «Review and Launch» (x2 si recibes el aviso de que está abierta al mundo) ->
-> Click «Launch» ->
-> Seleccionamos “Create a new key pair” ->
-> Key par name = “tibero” ->
-> Click «Download Key Pair» (y guardamos el archivo a buen recaudo) ->
-> Click «Launch Instances»

Cuando tenemos dos o más interfaces de red, tenemos que crear una IP elástica manualmente y asignarla al interfaz de red (NIC).

En la consola de EC2 ->
-> Click «Instances» ->
-> Seleccionamos nuestra instancia «tibero-vm1» ->
-> Click «eth0» en la sección inferior (Network Interfaces) ->
-> Copiamos el nombre del Interfaz ID «eni-0978c05fc9e778640» ->
-> Click «Elastic IPs» en el panel izquierdo ->
-> Click «Allocate Elastic IP address» ->
-> Click «Allocate» ->
-> Click «Actions» ->
-> Click «Associate Elastic IP address» ->
-> Seleccionamos «Network Interface» ->
-> Network Interface = «eni-0978c05fc9e778640» ->
-> Click «Associate»

Seleccionamos nuestra instancia a recién creada en el panel de Instancias de EC2 y pulsamos en el icono del lápiz para renombrarla a «tibero-vm1». Ahora podemos acceder a la dirección pública de DNS e IP para poder conectarnos (e.g. ec2-52-19-34-243.eu-west-1.compute.amazonaws.com y 52.19.34.243)

Volúmenes EBS

Vamos con uno de los pasos más interesantes de la configuración en AWS y es la creación de los volúmenes EBS Multi-Attach y su conexión con la instancia que acabamos de crear.

En la consola de AWS (verificar que seguimos en eu-west-1) ->
-> Click «EC2» ->
-> Click «Volumes» en la sección Elastic Block Store ->
-> Click «Create Volume» ->
-> Volume Type = «Provisioned IOPS SSD (io2)» ->
-> Size (GiB) = «20» ->
-> IOPS = «1000» (100-200 nos valdría también) ->
-> Availability Zone* = «eu-west-1a» ->
-> Habilitamos Muti-Attach «Enable» ->
-> Click «Create Volume» ->
-> Renombramos el volumen pulsando en el lápiz a «tib-vol-1»

Repetimos el proceso otras dos veces, para tener 3 volúmenes en total, con los nombres tib-vol-2 y tib-vol-3. Deberías ver algo así.

Ahora conectamos los tres volúmenes a la instancia que acabamos de crear.

En el panel de volúmenes EBS ->
-> Seleccionamos «tib-vol-1» ->
-> Click «Actions» ->
-> Click «Attach Volume» ->
-> Instance = «i-0a7de1949e35e083f – (tibero-vm1) (running)» ->
-> Device = «/dev/sdf» ->
-> Click «Attach»

En el panel de volúmenes EBS ->
-> Seleccionamos «tib-vol-2» ->
-> Click «Actions» ->
-> Click «Attach Volume» ->
-> Instance = «i-0a7de1949e35e083f – (tibero-vm1) (running)» ->
-> Device = «/dev/sdg» ->
-> Click «Attach»

En el panel de volúmenes EBS ->
-> Seleccionamos «tib-vol-3» ->
-> Click «Actions» ->
-> Click «Attach Volume» ->
-> Instance = «i-0a7de1949e35e083f – (tibero-vm1) (running)» ->
-> Device = «/dev/sdh» ->
-> Click «Attach»

Verificamos que los volúmenes están todos conectados.

Cambio de Hostname (tibero-vm1)

Verificamos que podemos conectarnos y cambiamos el nombre de la máquina. Necesitaremos el archivo que hemos descargado antes y darle permisos 600 si estamos en Linux/Mac. Podemos conectarnos tanto por IP como por nombre de DNS. Por comodidad, me conectaré por IP.

chmod 600 tibero.pem

ssh -i tibero.pem ec2-user@52.19.34.243

Last login: Mon May 11 13:33:13 2020 from x.x.x.x

__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|

https://aws.amazon.com/amazon-linux-2/
2 package(s) needed for security, out of 11 available
Run "sudo yum update" to apply all updates.
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

sudo hostnamectl set-hostname tibero-vm1

Si queréis quitar el warning del locale podéis añadir la localización “en_US.utf8” al entorno y no os volverá a salir.

sudo sh -c 'echo "LANG=en_US.utf-8" >> /etc/environment'
sudo sh -c 'echo "LC_ALL=en_US.utf-8" >> /etc/environment'

Configuración tibero-vm1

Paquetes SO

Ya podemos empezar con la configuración e instalación de Tibero👌 La documentación que he utilizado está en esta página. Vamos con la configuración de paquetes de sistema.

sudo su -

amazon-linux-extras install epel

yum update -y

yum -y --nogpgcheck \
  install \
  java-1.8.0-openjdk-devel.x86_64 \
  libibverbs \
  gcc \
  gcc-c++ \
  libstdc++ \
  libstdc++-devel \
  libaio \
  libaio.x86_64 \
  libaio-devel \
  perl \
  make \
  systemd \
  tree \
  wget \
  curl \
  bc \
  nfs-utils \
  tar \
  ncurses-compat-libs \
  libnsl \
  geos \
  mlocate \
  ntp \
  net-tools \
  zip \
  unzip

yum -y autoremove

/sbin/ldconfig -v

Parámetros Kernel

Configuramos los parámetros del Kernel.Utilizamos un script para poder automatizar el proceso. Si os fijáis en el script, reservamos un máximo del 80% de la memoria disponible para memoria compartida, que será utilizada principalmente por Tibero.

function sysctl_set() {

sed -i "/$1/d" /etc/sysctl.conf
echo "$1 = $2" >> /etc/sysctl.conf

}

echo "#Tibero Specifics" >> /etc/sysctl.conf

sysctl_set "kernel.sem" "10000 32000 10000 10000"
sysctl_set "kernel.shmmni" "4096"
sysctl_set "kernel.shmall" "65956797"

SET_SHMMAX=`free -bwl | grep "Mem:" | awk '{print $2}'`
PCT_RAM_USED=0.8
TOTAL_RAM_BYTES=`echo "scale=1; $SET_SHMMAX*$PCT_RAM_USED" | bc -l | awk -F'.' '{print $1}'`
echo $TOTAL_RAM_BYTES

sysctl_set "kernel.shmmax" "$TOTAL_RAM_BYTES"
sysctl_set "fs.file-max" "6815744"
sysctl_set "fs.aio-max-nr" "4194304"
sysctl_set "net.ipv4.ip_local_port_range" "1024 65000"
sysctl_set "net.ipv4.tcp_max_syn_backlog" "8192"
sysctl_set "net.core.rmem_default" "4194304"
sysctl_set "net.core.wmem_default" "262144"
sysctl_set "net.core.rmem_max" "67108864"
sysctl_set "net.core.wmem_max" "67108864"

sysctl -p

Usuarios y grupos

Creamos los usuarios, grupos y directorios que vamos a usar para Tibero.

groupadd -g 500 dba
useradd -g dba tibero

mkdir /tibero
chown tibero:dba /tibero

13. Configuramos los límites del SO.

⚠️ En un entorno productivo, probablemente nos interesaría configurar HugePages para reducir la carga de trabajo del SO a la hora de gestionar la memoria cuando tenemos bastante RAM. Para el alcance de esta prueba, lo omitimos. Me lo apunto para posibles tests de rendimiento con/sin HugePages 😉

cat >> /etc/security/limits.conf <<EOF
tibero soft nproc 2047
tibero hard nproc 16384
tibero soft nofile 1024
tibero hard nofile 65536
EOF

cat >> /etc/pam.d/login <<EOF
session required pam_limits.so
EOF

Configuración EBS (UDEV)

Vamos ahora a configurar los volúmenes EBS compartidos en nuestra instancia con UDEV. Ahora con la funcionalidad Mutli-Attach de AWS, por fin vamos a poder instalar clusters Activo-Activo. Tibero Active Cluster tiene una ventaja interesante, y es que está soportado en AWS.

Para ellos particionaremos las 3

# Formateamos los discos
# Formateamos los 3 discos
for disk in /dev/sdf /dev/sdg /dev/sdh
do
fdisk ${disk} <<EOF
n
p
1


w
EOF
done

# Configuramos las reglas UDEV
cat >> 99-tibero.rules << EOF
# Tibero UDEV rules
KERNEL=="nvme[0-9]*n[0-9]*", ENV{DEVTYPE}=="disk", ATTRS{model}=="Amazon Elastic Block Store", PROGRAM=="/sbin/ebsnvme-id -u /dev/%k", RESULT=="sdf", SYMLINK+="disk%k", OWNER="tibero", GROUP="dba", MODE="0600"
KERNEL=="nvme[0-9]*n[0-9]*", ENV{DEVTYPE}=="disk", ATTRS{model}=="Amazon Elastic Block Store", PROGRAM=="/sbin/ebsnvme-id -u /dev/%k", RESULT=="sdg", SYMLINK+="disk%k", OWNER="tibero", GROUP="dba", MODE="0600"
KERNEL=="nvme[0-9]*n[0-9]*", ENV{DEVTYPE}=="disk", ATTRS{model}=="Amazon Elastic Block Store", PROGRAM=="/sbin/ebsnvme-id -u /dev/%k", RESULT=="sdh", SYMLINK+="disk%k", OWNER="tibero", GROUP="dba", MODE="0600"
EOF

# Cargamos las reglas recién creadas
udevadm control --reload-rules && udevadm trigger

# Verificamos la configuración de los discos
ls -l /dev | egrep "disknvme|tibero"

Este es el resultado que deberíamos ver al final de este paso.

Descargamos la versión 6 FixSet 07 desde esta página en TMaxSoft (tibero6-bin-FS07_CS_1912-linux64-174424-opt.tar.gz) y movemos el archivo al directorio /tmp.

# Como root
chown tibero:dba /tmp/tibero6-bin-FS07_CS_1912-linux64-174424-opt.tar.gz

su - tibero -c "cd /tibero && tar -xvf /tmp/tibero6-*.tar.gz"

Instancia tibero-vm2

Este es el momento perfecto para “clonar” nuestra instancia utilizando la funcionalidad de snapshots de AWS, ya que tenemos todo listo para empezar a instalar Tibero.

En el panel de instancias de EC2 ->
-> Seleccionamos nuestra instancia «tibero-vm1» ->
-> Click «Actions» ->
-> Click «Instance State» ->
-> Click «Stop» ->
-> Click «Yes, Stop» ->
-> Esperamos a que el estado cambie a «stopped» ->
-> Click «Actions» ->
-> Click «Image ->
-> Click «Create Image» ->
-> Image name = «tibero-vm-snapshot» ->
-> Eliminamos los tres volúmenes EBS haciendo Click en «X» (x3) ->
-> Click «Create Image»

Ahora podemos usar esa imagen para crear tibero-vm2. No os olvidéis de levantar tibero-vm1.

Dentro del panel de EC2 ->
-> Click «AMIs» en el panel izquierdo ->
-> Seleccionamos nuestra AMI «tibero-vm-snapshot» ->
-> Click «Actions» ->
-> Click «Launch» ->
-> Seleccionamos «m5n.large» ->
-> Click «Next: Configure Instance Details» ->
-> Number Instances = «1» ->
-> Network = «vpc-021d506b4141d7f16 | tibero-vpc» (el ID de tibero-vpc) ->
-> Subnet = «subnet-06563ee47accc68bb | tibero-pub | eu-west-1a» (el id de tibero-pub) ->
-> Primary IP en eth0 = «192.168.1.20» ->
-> Click «Add Device» ->
-> Seleccionamos la subnet «subnet-007d10da1ddfb691c (tibero-priv)» ->
-> Primary IP en eth1 = «192.168.2.20» ->
-> Click «Next: Add Storage» ->
-> Click «Next: Add Tags» ->
-> Click «Next: Configure Security Group» ->
-> Click «Select an existing security group» ->
-> Seleccionamos «sg-0c1b40e3e96dd4255 – tibero-sg» (el ID de nuestra Security group) ->
-> Click «Review and Launch» (x2 si recibes el aviso de que está abierta al mundo) ->
-> Click «Launch» ->
-> Seleccionamos “Create a new key pair” ->
-> Key par name = “tibero” ->
-> Click «Download Key Pair» (y guardamos el archivo a buen recaudo) ->
-> Click «Launch Instances»

Creamos una nueva IP elástica para el segundo nodo (tibero-vm2)

En la consola de EC2 ->
-> Click «Instances» ->
-> Seleccionamos nuestra instancia «tibero-vm2» ->
-> Click «eth0» en la sección inferior (Network Interfaces) ->
-> Copiamos el nombre del Interfaz ID «eni-0743244d13cc09d70» ->
-> Click «Elastic IPs» en el panel izquierdo ->
-> Click «Allocate Elastic IP address» ->
-> Click «Allocate» ->
-> Click «Actions» ->
-> Click «Associate Elastic IP address» ->
-> Seleccionamos «Network Interface» ->
-> Network Interface = «eni-0743244d13cc09d70» ->
-> Click «Associate»

Seleccionamos nuestra instancia recién creada y pulsamos en el icono del lápiz para renombrarla a «tibero-vm2». Deberíamos ver las dos en este estado.

Tenemos que conectar nuestros discos EBS, igual que hicimos con la primera instancia para que sean visibles por la máquina.

En el panel de volúmenes EBS ->
-> Seleccionamos «tib-vol-1» ->
-> Click «Actions» ->
-> Click «Attach Volume» ->
-> Instance = «i-0a91a5a8f3e6e63f6 – (tibero-vm2) (running)» ->
-> Device = «/dev/sdf» ->
-> Click «Attach»

En el panel de volúmenes EBS ->
-> Seleccionamos «tib-vol-2» ->
-> Click «Actions» ->
-> Click «Attach Volume» ->
-> Instance = «i-0a91a5a8f3e6e63f6 – (tibero-vm2) (running)» ->
-> Device = «/dev/sdg» ->
-> Click «Attach»

En el panel de volúmenes EBS ->
-> Seleccionamos «tib-vol-3» ->
-> Click «Actions» ->
-> Click «Attach Volume» ->
-> Instance = «i-0a91a5a8f3e6e63f6 – (tibero-vm2) (running)» ->
-> Device = «/dev/sdh» ->
-> Click «Attach»

Cambio de Hostname (tibero-vm2)

Hacemos los cambios necesarios en la segunda instancia para que quede todo preparado para la instalaciónd e Tibero. 

Cambiamos el hostname de la máquina.

ssh -i tibero.pem ec2-user@34.253.179.35

sudo hostnamectl set-hostname tibero-vm2

Colocamos la licencia de Tibero de tibero-vm2 en /tmp y la copiamos a su ubicación correspondiente.

# Como tibero
cp /tmp/license.xml $TB_HOME/license

Instalación Cluster Tibero

Nodo 0 – Configuración (tibero-vm1)

/home/tibero/.bash_profile

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH


# Tibero .bash_profile
export TB_SID=tac0
export TB_HOME=/tibero/tibero6
export TB_CONFIG=$TB_HOME/config
export PATH=$PATH:$TB_HOME/bin:$TB_HOME/client/bin
export LD_LIBRARY_PATH=/lib:/usr/lib:$TB_HOME/lib:$TB_HOME/client/lib
export LD_LIBRARY_PATH_64=/lib:/usr/lib:$TB_HOME/lib:$TB_HOME/client/lib

export PS1='[SID=$TB_SID \u@\h:\w]$ '

# Cluster Manager (Cluster env. only)
export CM_SID=cm0
export CM_HOME=$TB_HOME

⚠️ Necesitaremos solicitar dos licencias de prueba para poder usar el software en ambas máquinas. Esto es, quizás, una de las partes más engorrosas del proceso (menos automatizable). Es necesario introducir correctamente el nombre de host en el formulario web (tibero-vm1 y tibero-vm2) para que no nos de problemas. Recibiremos la licencia por correo electrónico.

/tibero/tibero6/license/license.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<tmax_license>
  <license version="1.0">
    <product version="6">Tibero</product>
    <serial_ID>1589277870</serial_ID>
    <issue_date>2020/05/12</issue_date>
    <licensee>tibero-vm1</licensee>
    <edition>enterprise</edition>
    <type>demo</type>
    <demo_duration>184</demo_duration>
    <identified_by_host>tibero-vm1</identified_by_host>
    <signature>x7PGiZY1eUEr4RE2fKh5FM3ebyzbQ6WxuVHzJwQetUI=</signature>
  </license>
</tmax_license>

/tibero/tibero6/config/cm0.tip

CM_NAME=cm0
CM_UI_PORT=6629
CM_RESOURCE_FILE=/tibero/tibero6/cm0_res.crf

/tibero/tibero6/config/as0.tip

INSTANCE_TYPE=AS
AS_DISKSTRING="/dev/disk*"
AS_ALLOW_ONLY_RAW_DISKS=N

LISTENER_PORT=9620
TOTAL_SHM_SIZE=1G
MEMORY_TARGET=2G

CLUSTER_DATABASE=Y
LOCAL_CLUSTER_ADDR=192.168.2.10
LOCAL_CLUSTER_PORT=7029
CM_PORT=6629

THREAD=0

/tibero/tibero6/config/tac0.tip

DB_NAME=tibero
LISTENER_PORT=8629
DB_BLOCK_SIZE=8K
MAX_SESSION_COUNT=400
TOTAL_SHM_SIZE=5G
MEMORY_TARGET=6G

CONTROL_FILES="+DS0/c1.ctl"

USE_ACTIVE_STORAGE=Y
AS_PORT=9620

CLUSTER_DATABASE=Y
LOCAL_CLUSTER_ADDR=192.168.2.10
LOCAL_CLUSTER_PORT=7629
CM_PORT=6629

THREAD=0
UNDO_TABLESPACE=UNDO00

/tibero/tibero6/client/config/tbdsn.tbr

as0=(
      (INSTANCE=(HOST=192.168.2.10)
                (PORT=9620)
      )
)

as1=(
      (INSTANCE=(HOST=192.168.2.20)
                (PORT=9620)
      )
)


tac0=(
    (INSTANCE=(HOST=192.168.1.10)
              (PORT=8629)
              (DB_NAME=tibero)
    )
)

tac1=(
    (INSTANCE=(HOST=192.168.1.20)
              (PORT=8629)
              (DB_NAME=tibero)
    )
)

Nodo 1 – Configuración (tibero-vm2)

/home/tibero/.bash_profile

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH


# Tibero .bash_profile
export TB_SID=tac1
export TB_HOME=/tibero/tibero6
export TB_CONFIG=$TB_HOME/config
export PATH=$PATH:$TB_HOME/bin:$TB_HOME/client/bin
export LD_LIBRARY_PATH=/lib:/usr/lib:$TB_HOME/lib:$TB_HOME/client/lib
export LD_LIBRARY_PATH_64=/lib:/usr/lib:$TB_HOME/lib:$TB_HOME/client/lib

export PS1='[SID=$TB_SID \u@\h:\w]$ '

#Cluster Manager (Cluster env. only)
export CM_SID=cm1
export CM_HOME=$TB_HOME

/tibero/tibero6/license/license.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<tmax_license>
  <license version="1.0">
    <product version="6">Tibero</product>
    <serial_ID>1589277908</serial_ID>
    <issue_date>2020/05/12</issue_date>
    <licensee>tibero-vm2</licensee>
    <edition>enterprise</edition>
    <type>demo</type>
    <demo_duration>184</demo_duration>
    <identified_by_host>tibero-vm2</identified_by_host>
    <signature>FhiS4JY1eUEr4RE2fKh5FIffJDTbQ6WxuVHzJwQetUI=</signature>
  </license>
</tmax_license>

/tibero/tibero6/config/cm1.tip

CM_NAME=cm1
CM_UI_PORT=6629
CM_RESOURCE_FILE=/tibero/tibero6/cm1_res.crf

/tibero/tibero6/config/as1.tip

INSTANCE_TYPE=AS
AS_DISKSTRING="/dev/disk*"
AS_ALLOW_ONLY_RAW_DISKS=N

LISTENER_PORT=9620
TOTAL_SHM_SIZE=1G
MEMORY_TARGET=2G

CLUSTER_DATABASE=Y
LOCAL_CLUSTER_ADDR=192.168.2.20
LOCAL_CLUSTER_PORT=7029
CM_PORT=6629

THREAD=1

/tibero/tibero6/config/tac1.tip

DB_NAME=tibero
LISTENER_PORT=8629
DB_BLOCK_SIZE=8K
MAX_SESSION_COUNT=400
TOTAL_SHM_SIZE=5G
MEMORY_TARGET=6G

CONTROL_FILES="+DS0/c1.ctl"

USE_ACTIVE_STORAGE=Y
AS_PORT=9620

CLUSTER_DATABASE=Y
LOCAL_CLUSTER_ADDR=192.168.2.20
LOCAL_CLUSTER_PORT=7629
CM_PORT=6629

THREAD=1
UNDO_TABLESPACE=UNDO01

/tibero/tibero6/client/config/tbdsn.tbr

as0=(
    (INSTANCE=(HOST=192.168.2.10)
              (PORT=9620)
    )
)

as1=(
    (INSTANCE=(HOST=192.168.2.20)
              (PORT=9620)
    )
)


tac0=(
     (INSTANCE=(HOST=192.168.1.10)
               (PORT=8629)
               (DB_NAME=tibero)
     )
)

tac1=(
     (INSTANCE=(HOST=192.168.1.20)
               (PORT=8629)
               (DB_NAME=tibero)
     )
)

Creación de la instancia de Active Storage (tibero-vm1)

export TB_SID=as0

tbboot nomount

tbsql sys/tibero@as0

CREATE DISKSPACE ds0
NORMAL REDUNDANCY
DISK '/dev/disknvme1n1' NAME disk0,
     '/dev/disknvme2n1' NAME disk1,
     '/dev/disknvme3n1' NAME disk2;

Arrancamos el Cluster Manager (tibero-vm1)

tbcm -b

# Podemos comprobar que está escuchando en el puerto (LISTEN)
netstat -an | grep 6629

Añadimos los recursos de cluster (tibero-vm1)

cmrctl add network --name inter1 --nettype private --ipaddr 192.168.2.10 --portno 5629

cmrctl add cluster --name cls0 --incnet inter1 --cfile "+/dev/disk*"

cmrctl start cluster --name cls0

cmrctl add service --type as --name tas --cname cls0

cmrctl add as --name as0 --svcname tas --dbhome "$TB_HOME"

cmrctl start as --name as0

cmrctl add service --type db --name tibero --cname cls0

cmrctl add db --name tac0 --svcname tibero --dbhome "$TB_HOME"

Podemos comprobar los recursos del cluster como el comando cmrcrtl.

Además podemos conectarnos a la instancia de Active Storage (AS) y comprobar los discos, así como los “diskspaces” (diskgroups en Oracle). Aquí ya podemos ver la enorme similitud con Oracle.

tbsql sys/tibero@as0

select * from v$as_disk;

select * from v$as_diskspace;

Creación de la Instancia de Base de Datos (tibero-vm1)

export TB_SID=tac0

tbboot -t nomount

tbsql sys/tibero@tac0

CREATE DATABASE "tibero"
    USER sys IDENTIFIED BY tibero
    MAXINSTANCES 32
    MAXDATAFILES 2048
    CHARACTER SET MSWIN949
    LOGFILE GROUP 1 '+DS0/log001' SIZE 50M,
            GROUP 2 '+DS0/log002' SIZE 50M,
            GROUP 3 '+DS0/log003' SIZE 50M
    MAXLOGGROUPS 255
    MAXLOGMEMBERS 8
    NOARCHIVELOG
    DATAFILE '+DS0/system.tdf' SIZE 700M
            AUTOEXTEND ON NEXT 64M MAXSIZE UNLIMITED
    SYSSUB DATAFILE '+DS0/syssub.tdf' SIZE 200M
            AUTOEXTEND ON NEXT 64M MAXSIZE UNLIMITED
    DEFAULT TEMPORARY TABLESPACE temp
            TEMPFILE '+DS0/temp00.tdf' SIZE 200M AUTOEXTEND OFF
    UNDO TABLESPACE undo00
            DATAFILE '+DS0/undo00.tdf' SIZE 1G AUTOEXTEND OFF
    DEFAULT TABLESPACE USERS DATAFILE '+DS0/users.tdf' SIZE 200M
            AUTOEXTEND ON NEXT 64m MAXSIZE UNLIMITED;

cmrctl start service --name tibero

$TB_HOME/scripts/system.sh -p1 tibero -p2 syscat -a1 Y -a2 Y -a3 Y -a4 Y

Preparación del Nodo 1 (desde tibero-vm1)

tbsql sys/tibero@as0

ALTER DISKSPACE ds0 ADD THREAD 1;

Inicio del Cluster Manager (tibero-vm2)

tbcm -b

Añadimos los recursos de cluster (tibero-vm2)

cmrctl add network --name inter2 --nettype private --ipaddr 192.168.2.20 --portno 5629

cmrctl add cluster --name cls0 --incnet inter2 --cfile "+/dev/disk*"

cmrctl start cluster --name cls0

# Mostramos los recursos de ambos nodos
cmrctl show all

Añadimos los ficheros de log y “tablespace” de UNDO (tibero-vm2)

tbsql sys/tibero@tac0

alter database add logfile thread 1 group 4 '+DS0/log004' size 50M;
alter database add logfile thread 1 group 5 '+DS0/log005' size 50M;
alter database add logfile thread 1 group 6 '+DS0/log006' size 50M;
alter database enable public thread 1;
create undo tablespace UNDO01 datafile '+DS0/undo01.tdf' size 100M autoextend on next 100M maxsize 32G;

Añadimos la instancia local de Active Storage (AS) (tibero-vm2)

cmrctl add as --name as1 --svcname tas --dbhome "$TB_HOME"

Arrancamos la instancia de AS (tibero-vm2)

cmrctl start as --name as1

# Comprobamos los recursos de AS

tbsql sys/tibero@as1

select * from v$as_disk;

select * from v$as_diskspace;

Añadimos el recurso de base de datos TAC1 (tibero-vm2)

cmrctl add db --name tac1 --svcname tibero --dbhome "$TB_HOME"

cmrctl start db --name tac1

Verificamos que las dos instancias están activas

tbsql sys/tibero

select instance_name, host_name, status from gv$instance;