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
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)