Instalar Apache Cloudberry (Incubating): Guía Completa y Verificada
¿Qué es Apache Cloudberry?
Apache Cloudberry (Incubating) es una base de datos MPP (Massively Parallel Processing) de código abierto avanzada y madura, derivada del código fuente de Greenplum Database 7 pero construida sobre un kernel PostgreSQL más moderno. Es un proyecto incubado en la Apache Software Foundation bajo el modelo Apache-2.0, garantizando gobernanza neutral y toma de decisiones basada en mérito.
Cloudberry puede servir como data warehouse y también para cargas de trabajo de analítica a gran escala e IA/ML. Soporta desde terabytes hasta petabytes de datos sobre hardware commodity, máquinas virtuales o nube pública.
Casos de Uso Principales
- Data Warehouse MPP: Almacenamiento y consulta distribuida de grandes volúmenes de datos con procesamiento paralelo.
- Analítica OLAP: Consultas complejas sobre datasets masivos con ejecución paralela en segmentos.
- Machine Learning In-Database: Uso de Apache MADlib para algoritmos ML directamente en la base de datos.
- Análisis Espacial: Extensiones PostGIS para consultas geoespaciales distribuidas.
- Migración desde Greenplum: Migración sencilla usando herramientas oficiales como cbcopy y gpbackup.
Requisitos del Sistema
| Componente | Entorno Desarrollo | Entorno Producción |
|---|---|---|
| CPU | 4 cores | 16+ cores |
| Memoria | 8 GB | 32+ GB |
| Disco | SSD | SSD con RAID recomendado |
| Red | 10 Gbps NIC (2 preferido) | 10 Gbps NIC (2 preferido) |
| Sistema Operativo | Rocky Linux 8/9, Ubuntu 22.04/24.04, RHEL 8/9 | Mismo que desarrollo |
| Filesystem | XFS | XFS obligatorio |
Soporte de arquitectura: x86_64 (disponible desde 2.1+) y AARCH64 (planificado para 2.2).
Instalación Paso a Paso
Opción 1: Instalación vía RPM/DEB (Recomendada para Producción)
La instalación automática resuelve dependencias como bash, openssh, rsync, perl, python3, libcurl, libevent, libidn2, libselinux, libstdc++, libuuid, libuv, libxml2, libyaml, libzstd, lz4, openldap, openssl, pam, readline, pcre2, xz para RHEL/Rocky Linux.
# Instalar paquetes RPM (RHEL/Rocky Linux)
sudo yum install cloudberry
# O instalar paquetes DEB (Ubuntu/Debian)
sudo apt-get install cloudberry
# Verificar versión instalada
cloudberry --version
# Verificar estado del servicio
systemctl status cloudberryOpción 2: Compilación desde Fuente (Para Desarrollo/Testing)
git clone https://github.com/apache/cloudberry.git
cd cloudberry
make
make installOpción 3: Docker (Solo Desarrollo/Testing)
Existen imágenes Docker comunitarias en woblerr/docker-cloudberry para despliegues single-node y multi-node, aptas para desarrollo, testing y aprendizaje.
# Ejecutar contenedor de prueba
docker run -d --name cloudberry-dev \
-p 5432:5432 \
-v /data:/var/lib/cloudberry \
woblerr/cloudberry:latest⚠️ Advertencia: No usar Docker para producción. Las imágenes comunitarias no están documentadas oficialmente por Apache.
Configuración Inicial del Cluster
Paso 1: Preparación del Sistema Operativo
# Configurar kernel parameters (en /etc/sysctl.conf)
echo "vm.swappiness=10" >> /etc/sysctl.conf
echo "vm.dirty_ratio=20" >> /etc/sysctl.conf
echo "vm.dirty_background_ratio=5" >> /etc/sysctl.conf
sysctl -pPaso 2: Configuración de Red
Datos exchange network: 2 NICs de 10 Gbps con bonding.
# Configurar bonding en /etc/sysconfig/bonding
cat > /etc/sysconfig/bonding <<EOF
BONDING_OPTS='mode=4 miimon=100 xmit_hash_policy=layer3+4'
IPADDR0="192.168.1.10"
NETMASK0="255.255.255.0"
GATEWAY="192.168.1.1"
EOF
# Activar bonding
systemctl enable NetworkManager-wait-online.service
systemctl restart NetworkManagerGateway por defecto debe usar bond0 del data exchange network.
Paso 3: Configuración de Almacenamiento
Los datos se almacenan exclusivamente en nodos segment, NO en el coordinator.
# Crear volumes lógicos con LVM (recomendado)
lvcreate -L 100G -n /data0 vg_cloudberry
lvcreate -L 200G -n /data1 vg_cloudberry
lvcreate -L 50G -n /system vg_cloudberry
# Montar en XFS (obligatorio)
mkfs.xfs /dev/vg_cloudberry/data0
mkfs.xfs /dev/vg_cloudberry/data1
mkfs.xfs /dev/vg_cloudberry/system
mount /dev/vg_cloudberry/data0 /data0
mount /dev/vg_cloudberry/data1 /data1
mount /dev/vg_cloudberry/system /systemCapacidad máxima al 70% para archivos temporales y evitar degradación de rendimiento.
Paso 4: Inicialización del Cluster
# Ejecutar en el nodo coordinator
gpinitsystem -a -f /etc/cloudberry/gpConfigurationFile.conf
# Verificar inicialización
gpstate -sPaso 5: Configuración de Seguridad Básica
# Configurar autenticación (MD5 o SCRAM-SHA-256)
psql -h localhost -U gpadmin -d postgresql -c "ALTER USER gpadmin PASSWORD 'secure_password';"
# Deshabilitar AllowEmptyPasswords por defecto
echo "password_encryption=md5" >> /etc/cloudberry/postgresql.conf
echo "password_hash_algorithm=scram-sha-256" >> /etc/cloudberry/postgresql.conf
# Deshabilitar UseDNS para evitar resolución DNS lenta
echo "use_dns = off" >> /etc/cloudberry/postgresql.confPaso 6: Configuración de Firewall
# Permitir tráfico en puerto 5432 (coordinador)
firewall-cmd --permanent --add-port=5432/tcp
firewall-cmd --reloadComprobación Posterior a la Instalación
Verificación de Estado del Cluster
# Estado general del cluster
gpstate -s
# Listar segmentos activos
gpstate -l
# Verificar conectividad desde coordinator
psql -h localhost -U gpadmin -d postgresql -c "SELECT version();"Ejecución de Pruebas Básicas
psql -h localhost -U gpadmin -d postgresql <<EOF
-- Verificar versión
SELECT version();
-- Crear tabla de prueba (con DISTRIBUTED clause)
CREATE TABLE test_table (
id INT,
name VARCHAR(100),
value DECIMAL(10,2)
) DISTRIBUTED BY (id);
-- Insertar datos
INSERT INTO test_table VALUES (1, 'test', 100.50);
-- Consultar datos
SELECT * FROM test_table;
-- Verificar distribución
SELECT distribution_key FROM pg_dist_partition WHERE relname = 'test_table';
EOFComprobación de Rendimiento Básico
# Ejecutar consulta distribuida simple
psql -h localhost -U gpadmin -d postgresql <<EOF
EXPLAIN ANALYZE
SELECT COUNT(*) FROM test_table;
EOFBackup y Restauración
gpbackup/gprestore (Paralelo - Recomendado)
Ventajas:
- Usa ACCESS SHARE locks en lugar de EXCLUSIVE, permitiendo DDL durante backups
- Escala independientemente del número de segmentos
- Cada segment host escribe a disco local simultáneamente
# Backup paralelo completo
gpbackup -d postgresql://gpadmin@localhost:5432/postgres
# Verificar backup
ls -lh /var/lib/cloudberry/backups/
# Restauración completa
gprestore -d postgresql://gpadmin@localhost:5432/postgrespg_dump/pg_restore (No-paralelo - Solo Casos Especiales)
⚠️ Advertencia: Más lento porque todos los datos pasan por el coordinator. Requiere modificar CREATE TABLE statements para incluir DISTRIBUTED clause.
# Backup con pg_dump (solo para casos especiales)
pg_dump -h localhost -U gpadmin postgresql > backup.sql
# Restauración con pg_restore
pg_restore -h localhost -U gpadmin postgresql backup.sqlActualización y Rollback
Actualización de Versión
# Para RPM/DEB: actualizar paquetes
sudo yum update cloudberry # RHEL/Rocky Linux
sudo apt-get update && sudo apt-get upgrade cloudberry # Ubuntu/Debian
# Para compilación desde fuente:
cd /path/to/cloudberry
git pull origin main
make installRollback a Versión Anterior
# Guardar backup completo antes de actualizar
gpbackup -d postgresql://gpadmin@localhost:5432/postgres --full
# Desinstalar versión actual
sudo yum remove cloudberry # RHEL/Rocky Linux
sudo apt-get remove cloudberry # Ubuntu/Debian
# Instalar versión anterior desde backup o repositorio antiguoErrores Habituales y Soluciones
Error 1: "Connection refused" al conectar con psql
Causa: Servicio no iniciado o puerto incorrecto.
systemctl start cloudberry
systemctl status cloudberry
# Verificar que el puerto 5432 esté escuchando
netstat -tlnp | grep 5432Error 2: "Segment initialization failed"
Causa: Configuración de red incorrecta o almacenamiento no disponible.
# Verificar conectividad entre nodos
ping
# Verificar que el almacenamiento esté montado correctamente
df -h /data0 /data1
# Re-inicializar cluster si es necesario
gpinitsystem -a -f /etc/cloudberry/gpConfigurationFile.conf Error 3: "cbcopy validation failed"
Causa: Diferencias en schema o datos entre source y target.
# Verificar logs de error
cat $USER/gpAdminLogs/cbcopy_$timestamp.log
# Ejecutar cbcopy con validación incremental
cbcopy --source-host=127.0.0.1 --source-port=15432 \
--source-user=gpadmin --dest-host=127.0.0.1 \
--dest-port=25432 --dest-user=gpadmin \
--full --metadata-only --with-global-metadataError 4: "Network file systems not supported"
Causa: Intento de usar NFS o SMB para almacenamiento compartido.
Solución: Presentar storage compartido como block device, no como network filesystem.
Seguridad
Cifrado de Datos (TDE)
# Configurar Transparent Data Encryption
echo "ssl = on" >> /etc/cloudberry/postgresql.conf
echo "ssl_cert_file = '/etc/ssl/certs/server.crt'" >> /etc/cloudberry/postgresql.conf
echo "ssl_key_file = '/etc/ssl/private/server.key'" >> /etc/cloudberry/postgresql.confAutenticación y Políticas de Contraseñas
- Passwords guardados como MD5 o SCRAM-SHA-256 hashes en pgauthid
- PermitEmptyPasswords deshabilitado por defecto
- UseDNS deshabilitado para evitar resolución DNS lenta
- Log auditing para detectar amenazas de seguridad
- Row-Level Security: Políticas RLS permiten definir acceso a filas específicas por usuario
- Password Profiles: Controlan políticas de contraseñas: bloqueo tras fallos de login, reutilización limitada
⚠️ Nota sobre endpoint security software: Software antivirus/protección puede interferir con operaciones. Testear en entorno no-producción.
Migración desde Greenplum Database
cbcopy (Herramienta Oficial)
Utilidad poderosa para migración eficiente entre Greenplum 6.x/7.x → Cloudberry y actualizaciones 1.x → 2.x.
# Migrar metadata
cbcopy --source-host=127.0.0.1 --source-port=15432 \
--source-user=gpadmin --dest-host=127.0.0.1 \
--dest-port=25432 --dest-user=gpadmin \
--full --metadata-only --with-global-metadata
# Migrar datos
cbcopy --source-host=127.0.0.1 --source-port=15432 \
--source-user=gpadmin --dest-host=127.0.0.1 \
--dest-port=25432 --dest-user=gpadmin \
--full --data-only --truncate --copy-jobs=8Modos disponibles: --full, --dbname, --schema, --include-table, --append, --truncate.
cbcopy valida automáticamente comparando row counts entre source y target. Logs de error en $USER/gpAdminLogs/cbcopy_$timestamp.log.
Preguntas Frecuentes (FAQ)
¿Puedo usar Cloudberry para reemplazar clusters Greenplum existentes?
Sí. Uno de los objetivos es compatibilidad con Greenplum. Migrar usando gpbackup o cbcopy.
¿Cuál es la diferencia con Greenplum Database?
Cloudberry toma el codebase de Greenplum 7 pero tiene kernel PostgreSQL más nuevo y moderno, con más features.
¿Soporta Docker Compose oficial?
No hay documentación oficial para Docker Compose. Existen imágenes comunitarias en woblerr/docker-cloudberry para desarrollo/testing.
¿Qué versiones de Java soporta?
Open JDK 8/11/17 y Oracle JDK 8/11/17 para PL/Java y PXF (AdoptOpenJDK recomendado).
¿Cómo validar una migración con cbcopy?
cbcopy valida automáticamente comparando row counts entre source y target. Logs de error en $USER/gpAdminLogs/cbcopy_$timestamp.log.