Advertising:

Upgrade de Zabbix 5.0.3 a 6.0.0 PostgreSQL 12 a 13 y TimescaleDB de 1.7.1 a 2.3.1

From Zabbix-ES
Revision as of 09:21, 29 October 2021 by Unknown user (talk) (Created page with "<center> {| class="wikitable" ! width="33%" |Instalación Actual ! width="33%" |Upgrade ! width="33%" |Requerimientos mínimos |- style="vertical-align:top;" | '''OS...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
Instalación Actual Upgrade Requerimientos mínimos
OS          : CentOS Linux release 7.8.2003 (Core)
Zabbix      : 5.0.3
PostgreSQL  : 12
TimescaleDB : 1.7.1
PHP         : 7.3.21
OS          : Oracle Linux Server release 8.4
Zabbix      : 6.0.0
PostgreSQL  : 13
TimescaleDB : 2.3.1
PHP         : 7.4.6
PostgreSQL  : 13.X
TimescaleDB : 2.0.1 a 2.3
PHP         : 7.2.0 a 7.2.5


Instalación de PostgreSQL con la misma versión que producción

URL: https://www.postgresql.org/download/linux/redhat/

Select version: 12
Select platform: Red Hat Enterprise, Rocky, CentOS or Oracle version 8
Select architecture: x86_64

Instalar el repositorio

# dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# dnf repolist

Desactivar Repositorios no necesarios

# dnf config-manager --set-disabled pgdg96
# dnf config-manager --set-disabled pgdg10
# dnf config-manager --set-disabled pgdg11
# dnf config-manager --set-disabled pgdg14
# dnf clean all 
# dnf repolist
repo id                                                                                             repo name
ol8_UEKR6                                                                                           Latest Unbreakable Enterprise Kernel Release 6 for Oracle Linux 8 (x86_64)
ol8_appstream                                                                                       Oracle Linux 8 Application Stream (x86_64)
ol8_baseos_latest                                                                                   Oracle Linux 8 BaseOS Latest (x86_64)
ol8_developer_EPEL                                                                                  Oracle Linux 8 EPEL (x86_64)
pgdg-common                                                                                         PostgreSQL common RPMs for RHEL/CentOS 8 - x86_64
pgdg12                                                                                              PostgreSQL 12 for RHEL/CentOS 8 - x86_64
pgdg13                                                                                              PostgreSQL 13 for RHEL/CentOS 8 - x86_64

Instalamos PostgreSQL

# dnf -qy module disable postgresql
# dnf install -y postgresql12 postgresql12-server

Crear el ROL de replica y actualizar pg_hba.conf (Todo con usuario postgres)

- Ejecutar en MASTER
# su - postgres

- Creamos el usuario para la replicacion
$ createuser --replication -P -e replica
Enter password for new role: (xxxxx)
Enter it again: (xxxx)

$ exit

$ echo "host replication replica [IP_REMOTA]/32 md5" >> $PGDATA/pg_hba.conf

- Recargamos el pg_hba.conf sin reiniciar postgres
$  psql -U postgres -c "select pg_reload_conf();"
 pg_reload_conf 
----------------
 t
(1 row)

Instalación de TSDB 1.7.1 misma versión que producción

Nota: Verificar la versión productiva con rpm -qa | grep timescaledb-postgresql, en este caso es timescaledb-postgresql-12-1.7.2-0.el7.x86_64
- Creamos el repositorio e instalamos TSDB 1.7.1
tee /etc/yum.repos.d/timescale_timescaledb.repo <<EOL
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/$(rpm -E %{rhel})/\$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOL
# dnf clean all
# dnf install -y timescaledb-postgresql-12-1.7.1-0.el8

Nota: Verificamos las versiones disponibles con el siguiente comando dnf provides */timescaledb-1.7.1.so
- Verificamos las librerías instaladas
# ls -la /usr/pgsql-12/lib/time*

Configurar el Environment y lanzar la replicación

Nota: Toda la operatoria la hacemos en la maquina slave con el usuario postgres

Creamos el environment de Postgres

Creamos el .pgsql_profile de Postgres

# su - postgres

$ cat <<EOF >>/var/lib/pgsql/.pgsql_profile
alias pg12='. /var/lib/pgsql/entorno_bd.sh 12'
alias pg13='. /var/lib/pgsql/entorno_bd.sh 13'
export PATH
echo " "

echo "################################################################"
echo "#                                                              #"
echo "#        To load environment variables:                        #"
echo "#                                                              #"
echo "# pg12 -> . /var/lib/pgsql/entorno_bd.sh 12                    #"
echo "# pg13 -> . /var/lib/pgsql/entorno_bd.sh 13                    #"
echo "#                                                              #"
echo "################################################################"
echo " "
EOF

Actualizamos el bash_profile de Postgres

$ cat <<EOF >>/var/lib/pgsql/.bash_profile
alias l='ls -la'
[ -f /var/lib/pgsql/.pgsql_profile ] && source /var/lib/pgsql/.pgsql_profile
EOF

Creamos el script que carga los entornos de PostgreSQL

$ tee /var/lib/pgsql/entorno_bd.sh <<EOF
########################
#VARIABLES MODIFICACLES#
########################
export V_DBVERSION=\$1
###############################
#!!VARIABLES NO MODIFICABLES!!#
###############################
export V_PGSOFT=/usr/pgsql-\$V_DBVERSION
export V_ADMIN_HOME=/var/lib/pgsql
export PGDATA=/var/lib/pgsql/\$V_DBVERSION/data
export PATH=\$V_PGSOFT/bin:\$PATH
export LD_LIBRARY_PATH=\$V_PGSOFT/lib

echo "Environment Postgres \$V_DBVERSION cargado!"
echo
EOF
$ chmod 750 /var/lib/pgsql/entorno_bd.sh
$ chown postgres:postgres /var/lib/pgsql/entorno_bd.sh

Lanzamos la replicación

IMPORTANTE: Desactivar en Zabbix la autenticación vía LDAP antes de lanzar la copia y luego volver a activarla.
$ . /var/lib/pgsql/entorno_bd.sh 12
Environment Postgres 12 cargado!
$ pg_basebackup -h 10.151.0.69 -U replica -D $PGDATA -P -v -Xs -c fast -C -S pgstandby2
Password: xxxxx
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: B5BB/A6000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created replication slot "pgstandby2"
  7220671/181730815 kB (3%), 0/1 tablespace (...sql/12/data/base/16402/165107136)
  ...
  181863935/181863935 kB (100%), 1/1 tablespace                                         
pg_basebackup: write-ahead log end point: B5BD/5F2BDCF8
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk ...
pg_basebackup: base backup completed

Descripción de los parámetros del pg_basebackup

     -h [HOST ORIGEN] 
     -U [USUARIO DE REPLICACIOM] 
     -D [PGDATA] 
     -P      # mostrar información de progreso
     -v      # Activa el modo Verbose
     -Xs     # incluye los archivos WAL necesarios, en el modo especificado (s=STREAM)
     -c fast # utilizar checkpoint rápido o extendido
     -C      # crear un slot de replicación
     -S [SLOTNAME]

TIPs útiles

Eliminar el slot de replicación no utilizado en MASTER

$ psql -U postgres -c "select * FROM pg_replication_slots ;"            # Nota: Ejecutar en MASTER.
$ psql -U postgres -c "select pg_drop_replication_slot('pgstandby2');"  # Nota: Ejecutar en MASTER.

Ver los WAL que faltan aplicar

- Buscamos el Filename del WAL B5BD/5F2BDCF8
$ psql -U postgres -c "SELECT pg_walfile_name('B5BD/5F2BDCF8');"        # Nota: Ejecutar en MASTER.
pg_walfile_name
--------------------------
000000010000B5BE00000084
(1 row)
- Listar los WALs del SLAVE
$ ls -la /var/lib/pgsql/12/data/pg_wal

Actualizar la PSW del ROL de REPLICA

$ alter user replica password 'xxxxxx';

Ver los Slots de replicación activos

$ psql -U postgres -x -c "SELECT * FROM pg_replication_slots;"  # Nota: Ejecutar en MASTER.
-[ RECORD 2 ]-------+--------------
slot_name           | pgstandby2
plugin              | 
slot_type           | physical
datoid              | 
database            | 
temporary           | f
active              | t
active_pid          | 14634
xmin                | 
catalog_xmin        | 
restart_lsn         | B5BB/CE000000
confirmed_flush_lsn | 
$ psql -U postgres -x -c "select * from pg_stat_replication;"  # Nota: Ejecutar en MASTER.

Arrancamos la BD y verificamos que TSDB tenga datos

# systemctl start postgresql-12.service
Nota: Este proceso tarda unos minutos porque tiene que aplicar los REDOLOGS que se generaron entre que se lanzo el backup y que este finalizo.
      Mirando el fichero de LOG hay que esperar a que salga el mensaje "LOG:  database system is ready to accept connections"

- Analizamos el LOG de arranque. 
$ tail -f $(date +'/var/lib/pgsql/12/data/log/postgresql-%a.log')

2021-10-18 11:46:18.019 CEST [6870] LOG:  database system was interrupted; last known up at 2021-10-18 11:42:05 CEST
2021-10-18 11:46:18.382 CEST [6870] LOG:  redo starts at B646/D65CC540
 Tiempo de espera...
2021-10-18 11:47:42.011 CEST [6870] LOG:  consistent recovery state reached at B647/4B6BC940
2021-10-18 11:47:42.011 CEST [6870] LOG:  redo done at B647/4B6BC940
 Tiempo de espera...
2021-10-18 11:48:23.219 CEST [6868] LOG:  database system is ready to accept connections
2021-10-18 11:48:23.236 CEST [6902] LOG:  TimescaleDB background worker launcher connected to shared catalogs
# systemctl status postgresql-12.service
# psql -U postgres -d zabbix -c "SELECT * FROM timescaledb_information.compressed_chunk_stats;"

Replicamos entorno de Zabbix 5.0.3 en la nueva maquina

Update de PHP de la version 7.2.4 a la 7.4.6

Nota: Zabbix necesita como mínimo 7.2.0 pero esto nos evitara tener que actualizarlo en upgrades posteriores.
# dnf module list php        # Nota: Listear los modulos de PHP existentes y su estado
# dnf -y module reset php       # Nota: Es recomendado remover todo el contenido instalado de un modulo utilizando el comando reset. Luego del reset podremos habilitar otro nuevo stream.
# dnf -y module install php:7.4 # Nota: Instalamos el modulo de PHP 7.4.X
# dnf -y install php-*          # Nota: Instalamos módulos de PHP adicionales para que Zabbix funcione correctamente.
# dnf changelog php | less

Instalación de ZABBIX con la misma versión que producción

# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
# dnf clean all
# dnf -y install zabbix-server-pgsql-5.0.3-1.el8 zabbix-web-pgsql-5.0.3-1.el8 zabbix-nginx-conf-5.0.3-1.el8 zabbix-agent2-5.0.3-1.el8

   # Nota: Listar los paquetes del Repo dnf --showduplicates list zabbix-server-pgsql

Reconfiguramos Zabbix Server y arrancamos Zabbix FrontEnd

Hacemos un backup de la configuración del Zabbix Server recién instalado

# cp /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.original

Copiamos el fichero de configuración original del Zabbix Server en la nueva maquina

# scp 10.151.0.69:/etc/zabbix/zabbix_server.conf 10.151.0.128:/etc/zabbix/zabbix_server.conf

El único parámetro a modificar es el DBHost

perl -p -i -e 's/^DBHost=.*/DBHost=10.151.0.128/g' /etc/zabbix/zabbix_server.conf

Reconfiguramos el Zabbix Frontend

perl -p -i -e 's/^#.*listen.*/        listen          80;/g' /etc/nginx/conf.d/zabbix.conf
perl -p -i -e 's/^#.*server_name.*/        server_name     10.151.0.128;/g' /etc/nginx/conf.d/zabbix.conf

Reconfiguramos Timezone de PHP

echo php_value[date.timezone] = Europe/Madrid >>/etc/php-fpm.d/zabbix.conf

Reiniciamos los servicios y nos conectamos para reconfigurar el Frontend via GUI

# systemctl restart nginx php-fpm
# systemctl status nginx php-fpm
URL SETUP: http://10.151.0.128/setup.php

Actualizar TimescaleDB 1.7.1 a TimescaleDB 2.3.1 con PostgreSQL 12

Instalamos las librerías de TSDB 2

# dnf -y install timescaledb-2-postgresql-12-2.3.1-0.el8 timescaledb-2-loader-postgresql-12-2.3.1-0.el8

   # Nota: Buscamos la versión compatible 2.3 para PG12  dnf provides *pg12*/timescaledb-2.3*

Verificamos las librerías instaladas

# ls -la /usr/pgsql-12/lib/time*

Actualizar la extensión de TimescaleDB

# psql -U postgres -X -d zabbix
zabbix=# ALTER EXTENSION timescaledb UPDATE TO "2.3.1";
ALTER EXTENSION
zabbix=# \dx timescaledb
                                    List of installed extensions
    Name     | Version | Schema |                            Description                            
-------------+---------+--------+-------------------------------------------------------------------
 timescaledb | 2.3.1   | public | Enables scalable inserts and complex queries for time-series data
(1 row)