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 |
Tabla de contenidos
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;
