Instalación de KeyDB: Alternativa Multihilo a Redis
KeyDB es un fork activo de Redis que introduce soporte nativo para múltiples hilos, permitiendo aprovechar todos los núcleos del procesador sin la limitación de hilo único de Redis. Totalmente compatible con el protocolo y los comandos de Redis, KeyDB puede reemplazar cualquier instalación existente sin cambios en la aplicación, ofreciendo un rendimiento significativamente mayor en servidores con múltiples núcleos.
Requisitos Previos
- Ubuntu 20.04/22.04 o CentOS/Rocky Linux 8+
- Al menos 2 GB de RAM (más según el tamaño del dataset)
- CPU con múltiples núcleos (para aprovechar el multithreading)
- SSD NVMe (para la función FLASH opcional)
- Acceso root o usuario con privilegios sudo
Instalación de KeyDB
Instalación en Ubuntu/Debian
# Añadir repositorio oficial de KeyDB
curl -s https://download.keydb.dev/pkg/open_source/gpg | sudo apt-key add -
echo "deb https://download.keydb.dev/pkg/open_source/deb $(lsb_release -cs) main" \
| sudo tee /etc/apt/sources.list.d/keydb.list
sudo apt-get update
sudo apt-get install -y keydb
# Iniciar y habilitar el servicio
sudo systemctl enable keydb-server
sudo systemctl start keydb-server
# Verificar instalación
keydb-cli ping
# Respuesta: PONG
keydb-server --version
Instalación en CentOS/Rocky Linux
# Añadir repositorio RPM
cat > /etc/yum.repos.d/keydb.repo << 'EOF'
[keydb]
name=KeyDB
baseurl=https://download.keydb.dev/pkg/open_source/rpm/el$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://download.keydb.dev/pkg/open_source/gpg
EOF
sudo yum install -y keydb
sudo systemctl enable keydb-server
sudo systemctl start keydb-server
Instalación con Docker
# Ejecutar KeyDB con Docker
docker run -d \
--name keydb \
-p 6379:6379 \
-v keydb_data:/data \
--restart unless-stopped \
eqalpha/keydb:latest \
keydb-server \
--server-threads 4 \
--requirepass "mi_password_segura"
# Verificar que responde
docker exec keydb keydb-cli -a "mi_password_segura" ping
Configuración Básica
El archivo de configuración de KeyDB extiende la sintaxis de Redis:
sudo cat > /etc/keydb/keydb.conf << 'EOF'
# ================================================================
# Configuración de KeyDB - Compatible con Redis
# ================================================================
# ---- RED ----
bind 127.0.0.1 ::1
port 6379
protected-mode yes
# Contraseña de acceso (cambiar en producción)
requirepass "contraseña_segura_aqui"
# ---- MULTITHREADING (Característica principal de KeyDB) ----
# Número de hilos de servidor (recomendado: número de núcleos CPU)
server-threads 4
# Afinidad de hilos a CPUs específicas (opcional)
# server-thread-affinity true
# ---- PERSISTENCIA ----
# RDB (snapshots)
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/keydb
# AOF (Append Only File) - más durabilidad
appendonly yes
appendfilename "keydb.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# ---- MEMORIA ----
maxmemory 2gb
maxmemory-policy allkeys-lru
# ---- RENDIMIENTO ----
hz 10
dynamic-hz yes
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes
# ---- LOGS ----
loglevel notice
logfile /var/log/keydb/keydb-server.log
EOF
sudo mkdir -p /var/log/keydb /var/lib/keydb
sudo chown keydb:keydb /var/log/keydb /var/lib/keydb
sudo systemctl restart keydb-server
sudo systemctl status keydb-server
Compatibilidad con Redis
KeyDB es un reemplazo directo de Redis:
# Verificar que todos los comandos de Redis funcionan
keydb-cli -a "contraseña_segura_aqui"
# Comandos básicos (idénticos a Redis)
SET usuario:1:nombre "Juan García"
GET usuario:1:nombre
# Estructuras de datos de Redis: hashes
HSET producto:1 nombre "Servidor VPS" precio 19.99 stock 100
HGETALL producto:1
# Listas
RPUSH cola:trabajo "tarea-1" "tarea-2" "tarea-3"
LRANGE cola:trabajo 0 -1
LPOP cola:trabajo
# Sets
SADD etiquetas:articulo:1 "linux" "servidores" "vps"
SMEMBERS etiquetas:articulo:1
# Sorted sets (para rankings, colas de prioridad)
ZADD ranking:jugadores 1500 "jugador1" 2300 "jugador2" 800 "jugador3"
ZREVRANGE ranking:jugadores 0 -1 WITHSCORES
# Streams (Redis 5.0+)
XADD eventos * tipo "login" usuario "juan" ip "192.168.1.1"
XLEN eventos
# Todas las librerías de cliente Redis son compatibles
# Python: redis-py, Jedis (Java), ioredis (Node.js), StackExchange.Redis (.NET)
Rendimiento Multihilo
Verificar y optimizar el uso de múltiples hilos:
# Ver información del servidor y threads
keydb-cli -a "contraseña_segura_aqui" info server | grep -E "thread|version"
# Benchmark de rendimiento (comparar con Redis single-thread)
# Instalar redis-benchmark (incluido en redis-tools)
sudo apt-get install -y redis-tools
# Benchmark con pipeline (alta concurrencia)
redis-benchmark \
-h localhost \
-p 6379 \
-a "contraseña_segura_aqui" \
-t set,get,incr,lpush,rpush,sadd,zadd,hset \
-n 1000000 \
-c 200 \
-P 32 \
--threads 4
# Ver estadísticas de uso de CPU por hilo
keydb-cli -a "contraseña_segura_aqui" info stats | grep -E "total_commands|instantaneous"
# Monitor en tiempo real
keydb-cli -a "contraseña_segura_aqui" monitor &
# Detener: kill %1
Ajustar la configuración según el hardware:
# Ver número de núcleos disponibles
nproc
# Ajustar server-threads al número de núcleos
# Para 8 núcleos, usar 6-7 (dejar 1-2 para el sistema operativo)
sudo sed -i 's/server-threads 4/server-threads 6/' /etc/keydb/keydb.conf
sudo systemctl restart keydb-server
# Configurar el sistema operativo para máximo rendimiento
# Deshabilitar THP (Transparent Huge Pages)
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
# Ajustar overcommit memory
sudo sysctl -w vm.overcommit_memory=1
echo "vm.overcommit_memory=1" | sudo tee -a /etc/sysctl.conf
Almacenamiento FLASH
KeyDB FLASH permite extender la RAM con almacenamiento NVMe:
# FLASH está disponible en KeyDB Enterprise o compilando desde fuente
# Para la versión open source, la configuración básica es:
# Verificar si FLASH está disponible en la compilación instalada
keydb-server --version | grep flash
# Configurar FLASH en keydb.conf (si está disponible)
cat >> /etc/keydb/keydb.conf << 'EOF'
# ---- KEYDB FLASH (extensión de memoria con SSD) ----
# Requiere KeyDB compilado con soporte FLASH o versión Enterprise
# storage-provider flash /mnt/nvme/keydb-flash
# flash-alloc-size 1gb
EOF
# Para simular el efecto de FLASH con la versión OSS:
# Usar maxmemory-policy allkeys-lru para gestión eficiente
# y asegurarse de que el swap usa SSD NVMe
sudo swapon /dev/nvme0n1p2
Replicación Activa
A diferencia de Redis, KeyDB permite replicación activa-activa:
# Configurar replicación activa (MULTI-MASTER)
# En ambos nodos, añadir en keydb.conf:
cat >> /etc/keydb/keydb.conf << 'EOF'
# ---- REPLICACIÓN ACTIVA (Active Replication) ----
# Activar modo activo-activo (solo en KeyDB, no en Redis)
active-replica yes
# Conectar a los nodos réplica (pueden tener escrituras simultáneas)
# En nodo 1:
replicaof 192.168.1.2 6379
# En nodo 2:
# replicaof 192.168.1.1 6379
# Contraseña del nodo maestro
masterauth "contraseña_segura_aqui"
EOF
sudo systemctl restart keydb-server
# Verificar replicación en nodo maestro
keydb-cli -a "contraseña_segura_aqui" info replication
# Verificar en réplica
keydb-cli -h 192.168.1.2 -a "contraseña_segura_aqui" info replication
Migración desde Redis
Migrar desde una instalación existente de Redis:
# OPCIÓN 1: Migración en vivo (sin tiempo de inactividad)
# 1. Instalar KeyDB en el nuevo servidor
# 2. Configurar KeyDB como réplica de Redis existente
# En keydb.conf del nuevo servidor:
# replicaof redis-servidor-actual 6379
# 3. Esperar a que la replicación se sincronice
keydb-cli info replication | grep master_sync_in_progress
# 4. Verificar que los datos están completos
keydb-cli dbsize
redis-cli -h redis-original dbsize
# 5. Cambiar la aplicación al nuevo servidor KeyDB
# OPCIÓN 2: Migración via RDB dump
# En el servidor Redis actual
redis-cli BGSAVE
redis-cli LASTSAVE # Esperar a que el timestamp sea reciente
# Copiar el archivo RDB
scp /var/lib/redis/dump.rdb usuario@nuevo-servidor:/var/lib/keydb/dump.rdb
# Reiniciar KeyDB para cargar el dump
sudo systemctl stop keydb-server
sudo cp /var/lib/keydb/dump.rdb /var/lib/keydb/dump.rdb.backup
sudo systemctl start keydb-server
# Verificar datos migrados
keydb-cli dbsize
keydb-cli info keyspace
# OPCIÓN 3: Reemplazar Redis en el mismo servidor
# Detener Redis
sudo systemctl stop redis-server
sudo systemctl disable redis-server
# Configurar KeyDB en el mismo puerto (6379)
# KeyDB ya está instalado y usa el mismo puerto por defecto
sudo systemctl start keydb-server
# Las aplicaciones se conectarán a KeyDB sin cambios
Solución de Problemas
KeyDB no arranca (puerto en uso):
# Verificar si Redis u otro proceso usa el puerto 6379
ss -tlnp | grep 6379
sudo systemctl status redis-server
# Detener Redis si está activo
sudo systemctl stop redis-server
sudo systemctl start keydb-server
Alto uso de CPU con multithreading:
# Verificar la distribución de la carga entre hilos
top -p $(pgrep keydb-server) -H
# Si la carga no se distribuye, reducir el número de hilos
keydb-cli -a "pass" config set server-threads 2
Error de memoria (OOM):
# Ver uso de memoria actual
keydb-cli -a "pass" info memory | grep used_memory_human
# Ajustar maxmemory
keydb-cli -a "pass" config set maxmemory 3gb
# Verificar la política de evicción
keydb-cli -a "pass" config get maxmemory-policy
La replicación activa tiene conflictos de escritura:
# KeyDB usa last-write-wins para conflictos
# Ver el log para identificar conflictos
sudo tail -f /var/log/keydb/keydb-server.log | grep -i conflict
# Verificar el lag de replicación
keydb-cli -a "pass" info replication | grep master_last_io
Conclusión
KeyDB ofrece una ruta de migración sin fricciones desde Redis gracias a su total compatibilidad de protocolo y comandos, mientras proporciona mejoras sustanciales de rendimiento mediante el procesamiento multihilo nativo. La característica de replicación activa-activa abre posibilidades de alta disponibilidad que no son posibles con Redis OSS, y el soporte para FLASH permite escalar más allá de la RAM disponible en hardware moderno con SSD NVMe.


