Workstation Logo
Productos
Labs de IAAgentes OpenAIAgentes ClaudeGrok BotWorkstation CRM (WSL CRM)MarketingTodos los Productos
Soluciones IA
Estaciones de Trabajo IAAI SME PackagesIA PrivadaClústeres GPUIA en el BordeLaboratorio IA EmpresarialIA por Industria
Servicios
Modernización de plataformaIngeniería digitalFundamentos de datos e IAOperaciones autónomasConsultoría de IAAutomatización DevOpsCiberseguridadDesarrollo de softwareCreación de agentesConfiguración MLOps
Sobre Nosotros
SociosHistorias de Clientes
Artículos
Documentación
WSL ProxyRing PromoterWSL VaultJobshoutSysOps 24/7
Blog
ContáctenosLogin
Workstation

Estaciones de trabajo de IA, software multiagente de IA, infraestructura de GPU y soluciones de agentes inteligentes para empresas modernas.

Contáctenos

Soluciones de IA

Estaciones de Trabajo IAAI SME PackagesIA PrivadaClústeres GPUIA en el BordeLaboratorio IA EmpresarialIA por Industria

Productos

Todos los ProductosWSL CRM y ERPMarketingAgentes OpenAIWSL ProxyRing PromoterWSL VaultJobshoutSysOps 24/7

Empresa

Sobre NosotrosPor qué WorkstationSociosHistorias de ClientesPreciosContacto

Recursos

ArtículosDocumentaciónBlogBuscarMapa del Sitio
Oficina Reino Unido
77-79 Marlowes, Hemel Hempstead HP1 1LFCómo llegar: tome la salida 20 de la M25, Outer LondonN.º de empresa: 11641870Lun - Vie: 9:00 - 18:00 GMT
+44 7515 356 146
Oficina Bélgica
Workstation SRL, Rue Vanderkindere 34, 1180 Uccle, BrusselsBE 0751.518.683Lun - Vie: 9:00 - 18:00 CET
+32 492 45 67 46
Oficina India
#159 Sector 9, Pocket 1, DDA Flats, 110077 Dwarka, New Delhi
+91 98881 98841

© 2026 Workstation AI. Todos los derechos reservados.

PrivacidadCookiesTérminos de ServicioMapa del sitio web

Loading blog...

Home / Blog
DatabaseKubernetesDevOpsBackend

Alta disponibilidad de Couchbase en producción: XDCR, operador Kubernetes e implementación multirregional

Enterprise Couchbase HA con XDCR, operador autónomo e implementación de múltiples nubes

Balinder Walia12 de abril de 202638 min read
Introducción a

: Por qué Couchbase para cargas de trabajo de producción de alta disponibilidad

Couchbase Server es una base de datos NoSQL distribuida y multimodelo diseñada para aplicaciones interactivas que exigen un rendimiento constante de baja latencia a cualquier escala. A diferencia de las bases de datos que incorporan características distribuidas como una ocurrencia tardía, Couchbase se diseñó desde su inicio en torno a una topología de igual a igual sin compartir nada, donde cada nodo es igual y los datos se fragmentan automáticamente en todo el clúster utilizando un mecanismo de hash determinista llamadovBuckets. Esta elección de arquitectura elimina puntos únicos de falla en la capa de datos y permite el escalamiento horizontal sin cambios en las aplicaciones.

Lo que distingue a Couchbase en el panorama de la alta disponibilidad es suCross Data Center Replication (XDCR), un motor de replicación asíncrono integrado que transmite continuamente mutaciones entre clústeres distribuidos geográficamente. Combinado con conmutación por error automática, reconocimiento de rack/zona y un amplio conjunto de servicios integrados (datos, índice, consulta, búsqueda, análisis y eventos), Couchbase proporciona una plataforma unificada que puede servir como base de datos operativa y motor analítico para aplicaciones modernas.

En esta guía completa, exploraremos todos los aspectos de la ejecución del servidor Couchbase en entornos de producción de alta disponibilidad: la arquitectura interna que hace posible la alta disponibilidad, la configuración XDCR para implementaciones multirregionales, el operador autónomo Couchbase para Kubernetes, patrones de implementación específicos de la nube para AWS EKS, Azure AKS y GCP GKE, implementaciones bare metal de k3s con Rancher y Longhorn, estrategias de copia de seguridad y restauración, consulta N1QL ajuste, refuerzo de seguridad, monitoreo y Couchbase Mobile con Sync Gateway para implementaciones perimetrales. Al final, tendrá conocimientos prácticos para implementar y operar clústeres Couchbase de nivel de producción en cualquier infraestructura.

Arquitectura de servidor

Couchbase: servicios, vBuckets y fragmentación automática

Comprender la arquitectura interna de Couchbase es fundamental antes de implementarlo para lograr alta disponibilidad. Couchbase utiliza una arquitecturade escalamiento multidimensional (MDS)donde se pueden implementar y escalar diferentes servicios de forma independiente en los nodos del clúster. Esto brinda a los operadores un control detallado sobre la asignación de recursos y el aislamiento del rendimiento.

Los seis servicios principales

Couchbase Server proporciona seis servicios integrados, cada uno de los cuales maneja un tipo de carga de trabajo distinto:

  • Servicio de datos (KV): el motor central de valores clave construido sobre una arquitectura que prioriza la memoria. Maneja operaciones CRUD, administra la distribución de vBucket y sirve como capa de persistencia. Los datos se almacenan en la memoria (caché administrada) y se conservan de forma asincrónica en el disco. Este servicio debe ejecutarse en al menos un nodo de cada clúster.
  • Servicio de índice (GSI): mantiene índices secundarios globales que admiten consultas N1QL. Los índices se almacenan por separado de los datos, lo que permite un escalado independiente. Admite modos de almacenamiento de índices estándar y optimizados para memoria.
  • Servicio de consultas (N1QL): ejecuta consultas N1QL (SQL++ para JSON) en el clúster. Sin estado por diseño, lo que facilita el escalado horizontal. Coordina con los servicios de Datos e Índice para planificar y ejecutar consultas.
  • Servicio de búsqueda (FTS): proporciona capacidades de búsqueda de texto completo impulsadas por el motor de búsqueda Bleve. Admite coincidencias aproximadas, consultas geoespaciales, búsqueda por facetas y analizadores personalizados. Los índices se dividen y replican en los nodos de búsqueda.
  • Servicio de análisis (CBAS): ejecuta consultas analíticas complejas utilizando un motor de procesamiento paralelo basado en Apache Asterix. Opera con su propia copia de los datos, lo que garantiza que las cargas de trabajo analíticas nunca afecten la latencia operativa.
  • Servicio de eventos: ejecuta funciones JavaScript del lado del servidor en respuesta a mutaciones de datos. Permite el enriquecimiento de datos, transformaciones, eliminaciones en cascada y activadores de integración en tiempo real sin infraestructura externa.
Arquitectura y configuración del clústerCouchbase Distribución de serviciosClúster Couchbase (conmutación por error automática habilitada, detección de 3 segundos)Nodo 1 (10.0.1.10)Servicio de datos (KV)vBuckets 0-341 | Caché de 256 MBServicio de índice(GSI)Servicio de consulta(N1QL)Mapa de vBucket (activo)0-341 activo | 342-682 réplicaPersistencia automática en disco (asíncrono)Nodo 2 (10.0.1.11)Servicio de datos (KV)vCubos 342-682 | Caché de 256 MBServicio de búsqueda (FTS)Servicio de análisis (CBAS)Mapa de vBucket (activo)342-682 activo | 683-1023 réplicaTransmisión DCP a AnalyticsNodo 3 (10.0.1.12)Servicio de datos (KV)vBuckets 683-1023 | Caché de 256 MBServicio de eventosServicio de consulta(N1QL)Mapa de vBucket (activo)683-1023 activo | 0-341 réplicaConsumidor DCP de eventosAdministrador de conmutación por error automáticoMonitoreo de latidos del corazón | Detección de 3s | Promoción vBucket | Máximo 3 conmutaciones por error secuencialesDatos (KV)Índice/ConsultaBúsqueda/Análisis/EventosReplicación dentro del clústerLatido del corazón

Distribución de vBucket y fragmentación automática

Couchbase distribuye datos en todo el clúster utilizando1024 vBuckets(depósitos virtuales). Cada documento se asigna a un vBucket utilizando un hash CRC32 de la clave del documento módulo 1024. El mapa del clúster, mantenido por cada nodo y almacenado en caché por cada cliente SDK, asigna cada vBucket a un nodo específico. Este mapeo determinista significa que los clientes siempre saben exactamente qué nodo contiene un documento determinado, lo que permite lecturas y escrituras de un solo salto con una latencia inferior a milisegundos.

Cuando se agregan o eliminan nodos, Couchbase redistribuye los vBuckets automáticamente a través de un proceso llamadoreequilibrio. Durante el reequilibrio, el clúster mueve vBuckets entre nodos mientras permanece en pleno funcionamiento. El reequilibrio se organiza cuidadosamente para mantener la cantidad configurada de réplicas en todo momento, y los clientes son redirigidos sin problemas a las nuevas ubicaciones de vBucket a través de actualizaciones del mapa del clúster.

Replicación dentro del clúster y conmutación por error automática

Cada vBucket tiene una copiaactivay hasta tres copiasréplicadistribuidas en diferentes nodos. Cuando un cliente escribe un documento, la escritura va al vBucket activo en el nodo responsable. Luego, el servicio de datos replica la mutación para replicar vBuckets en otros nodos a través de la secuencia internaDCP (Protocolo de cambio de base de datos). De forma predeterminada, Couchbase configura una réplica, pero para implementaciones de alta disponibilidad en producción, se recomiendan dos réplicas:

# Configure bucket with 2 replicas via CLI
/opt/couchbase/bin/couchbase-cli bucket-create \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --bucket production-data \
  --bucket-type couchbase \
  --bucket-ramsize 4096 \
  --bucket-replica 2 \
  --bucket-priority high \
  --bucket-eviction-policy valueOnly \
  --enable-flush 0 \
  --compression-mode active \
  --max-ttl 0 \
  --durability-min-level majorityAndPersistActive

Conmutación por error automáticaes el mecanismo de Couchbase para detectar y recuperarse automáticamente de fallas de nodos. Cuando un nodo deja de responder, el orquestador del clúster espera un tiempo de espera configurable (mínimo 5 segundos, recomendado 30 segundos para producción) y luego promueve las réplicas de vBuckets en los nodos supervivientes al estado activo. Esto sucede sin ninguna intervención del lado de la aplicación: los clientes del SDK reciben un mapa de clúster actualizado e inmediatamente enrutan las solicitudes a los nuevos vBuckets activos.

# Configure auto-failover settings
/opt/couchbase/bin/couchbase-cli setting-autofailover \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --enable-auto-failover 1 \
  --auto-failover-timeout 30 \
  --max-failovers 3 \
  --enable-failover-of-server-groups 1 \
  --failover-on-data-disk-issues 1 \
  --failover-data-disk-period 120 \
  --can-abort-rebalance 1
Parámetros clave de conmutación por error automática de

:

  • tiempo de espera de conmutación por error automático: segundos de espera antes de activar la conmutación por error. Los valores más bajos reducen el tiempo de inactividad pero aumentan el riesgo de falsos positivos. 30 segundos es el ajuste de producción recomendado.
  • max-failovers: número máximo de conmutaciones por error automáticas secuenciales antes de requerir intervención manual. Establezca en 3 para un clúster de 5 nodos (para mantener el quórum).
  • enable-failover-of-server-groups: permite la conmutación por error de un grupo de servidores completo (bastidor/zona), fundamental para implementaciones con reconocimiento de zona.
  • problemas de conmutación por error en el disco de datos: activa la conmutación por error cuando el servicio de datos detecta errores persistentes de E/S del disco.

XDCR: Replicación entre centros de datos

XDCR es la tecnología de replicación multirregional insignia de Couchbase. A diferencia de la replicación a nivel de base de datos que se encuentra en los sistemas RDBMS tradicionales, XDCR opera en el nivel del depósitoy transmite mutaciones de documentos individuales entre clústeres Couchbase independientes. Cada clúster sigue siendo completamente autónomo: puede aceptar lecturas y escrituras de forma independiente, lo que hace que XDCR sea ideal para implementaciones multirregionales activo-activo donde los usuarios necesitan acceso de baja latencia desde cualquier geografía.

unidireccional frente a bidireccional XDCR

XDCR unidireccionalreplica mutaciones de un grupo de origen a un grupo de destino en una dirección. Esto es adecuado para escenarios de recuperación ante desastres, lectura de réplicas en regiones remotas o alimentación de datos desde un clúster operativo a un clúster de análisis.

XDCR bidireccionalcrea enlaces de replicación en ambas direcciones entre dos clústeres, lo que permite implementaciones activo-activo donde ambos clústeres aceptan escrituras. Esta es la configuración más poderosa pero requiere una planificación cuidadosa de la resolución de conflictos.

XDCR Replicación bidireccional multirregiónEE.UU.-ESTE (AWS EKS)Clúster: cb-us-east5 nodos | Datos+Índice+ConsultaCubo: aplicaciónCucharón: usuariosResolución de conflictos: LWW (marca de tiempo)XDCR: Compresión activada | TLS 1.3escribe: ~15k operaciones/seg.UE-OESTE (Azure AKS)Clúster: cb-eu-west5 nodos | Datos+Índice+ConsultaCubo: aplicaciónCucharón: usuariosResolución de conflictos: LWW (marca de tiempo)XDCR: Compresión activada | TLS 1.3escribe: ~12k operaciones/seg.AP-SUR (GCP GKE)Clúster: cb-ap-sur3 nodos | Datos+Índice+ConsultaCucharón: aplicaciónCucharón: usuariosResolución de conflictos: LWW (marca de tiempo)XDCR: Compresión activada | TLS 1.3escribe: ~8k operaciones/seg.XDCRXDCRXDCR (bidireccional)Estrategias de resolución de conflictosLWW (La última escritura gana por marca de tiempo) | Número de secuencia | Resolución de conflictos personalizada mediante funciones de combinación (Enterprise)XDCR AdelanteXDCR InversoEnlace entre regionesAWSAzureGCP

Configuración de la replicación XDCR

La configuración de XDCR implica crear una referencia de clúster remoto y luego definir enlaces de replicación a nivel de depósito. A continuación se muestran los comandos CLI y las llamadas REST API para una configuración bidireccional completa:

# Step 1: Create remote cluster reference on the US-EAST cluster
/opt/couchbase/bin/couchbase-cli xdcr-setup \
  --cluster cb-us-east.example.com:8091 \
  --username Administrator \
  --password password \
  --create \
  --xdcr-cluster-name eu-west-cluster \
  --xdcr-hostname cb-eu-west.example.com:8091 \
  --xdcr-username Administrator \
  --xdcr-password password \
  --xdcr-demand-encryption 1 \
  --xdcr-encryption-type full \
  --xdcr-certificate /path/to/eu-west-ca.pem

# Step 2: Create replication from US-EAST to EU-WEST for the 'app' bucket
/opt/couchbase/bin/couchbase-cli xdcr-replicate \
  --cluster cb-us-east.example.com:8091 \
  --username Administrator \
  --password password \
  --create \
  --xdcr-cluster-name eu-west-cluster \
  --xdcr-from-bucket app \
  --xdcr-to-bucket app \
  --xdcr-replication-mode xmem \
  --enable-compression 1 \
  --filter-expression "" \
  --priority high \
  --network-usage-limit 0

# Step 3: Create the reverse replication on EU-WEST cluster (bidirectional)
/opt/couchbase/bin/couchbase-cli xdcr-setup \
  --cluster cb-eu-west.example.com:8091 \
  --username Administrator \
  --password password \
  --create \
  --xdcr-cluster-name us-east-cluster \
  --xdcr-hostname cb-us-east.example.com:8091 \
  --xdcr-username Administrator \
  --xdcr-password password \
  --xdcr-demand-encryption 1 \
  --xdcr-encryption-type full \
  --xdcr-certificate /path/to/us-east-ca.pem

/opt/couchbase/bin/couchbase-cli xdcr-replicate \
  --cluster cb-eu-west.example.com:8091 \
  --username Administrator \
  --password password \
  --create \
  --xdcr-cluster-name us-east-cluster \
  --xdcr-from-bucket app \
  --xdcr-to-bucket app \
  --xdcr-replication-mode xmem \
  --enable-compression 1

Estrategias de resolución de conflictos

En XDCR bidireccional, el mismo documento se puede modificar simultáneamente en diferentes clústeres, creando conflictos. Couchbase proporciona múltiples estrategias de resolución de conflictos:

  • Basado en marca de tiempo (LWW: la última escritura gana): gana la mutación con la marca de tiempo más reciente. Este es el valor predeterminado y funciona bien en la mayoría de los casos de uso. Requiere sincronización NTP en todos los clústeres (dentro de 5 segundos de desviación). Se establece en el momento de la creación del depósito y no se puede cambiar más adelante.
  • basado en números de secuencia: utiliza el número de secuencia interno (ID de revisión) para determinar el ganador. Gana la mutación con el mayor número de revisiones. Útil cuando la sincronización de la marca de tiempo no es confiable.
  • Resolución de conflictos personalizada (Enterprise): Couchbase Enterprise Edition admite funciones de combinación personalizadas que ejecutan JavaScript del lado del servidor para resolver conflictos con la lógica específica de la aplicación. Esto permite escenarios como fusionar elementos del carrito de compras de diferentes regiones o aplicar reglas de resolución de conflictos específicas de un dominio.
# Create a bucket with timestamp-based conflict resolution
curl -X POST http://localhost:8091/pools/default/buckets \
  -u Administrator:password \
  -d name=app \
  -d ramQuota=4096 \
  -d replicaNumber=2 \
  -d bucketType=couchbase \
  -d conflictResolutionType=lww \
  -d compressionMode=active \
  -d durabilityMinLevel=majorityAndPersistActive

# XDCR advanced settings via REST API
curl -X POST http://localhost:8091/settings/replications/<replication-id> \
  -u Administrator:password \
  -d optimisticReplicationThreshold=256 \
  -d sourceNozzlePerNode=4 \
  -d targetNozzlePerNode=4 \
  -d checkpointInterval=600 \
  -d batchCount=500 \
  -d batchSize=2048 \
  -d failureRestartInterval=10 \
  -d docBatchSizeKb=2048 \
  -d networkUsageLimit=0 \
  -d priority=High

Filtrado XDCR

XDCR admite el filtrado para que pueda replicar solo un subconjunto de documentos. Los filtros utilizan expresiones regulares en claves de documentos y también pueden filtrar según la caducidad o eliminación del documento:

# Replicate only documents with keys starting with 'user::'
/opt/couchbase/bin/couchbase-cli xdcr-replicate \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --create \
  --xdcr-cluster-name remote-cluster \
  --xdcr-from-bucket app \
  --xdcr-to-bucket app-users \
  --filter-expression "^user::" \
  --filter-skip-restream 0

# Replicate documents matching a complex pattern
# (orders from 2026 with specific type)
--filter-expression "REGEXP_CONTAINS(META().id, '^order::2026') AND type='premium'"

Couchbase Operador Autónomo para Kubernetes

El operador autónomo Couchbase (CAO)es un operador Kubernetes de nivel empresarial que automatiza la implementación, administración, escalamiento y recuperación de clústeres de servidores Couchbase. A diferencia de las implementaciones simples de StatefulSet, el operador autónomo comprende la topología interna de Couchbase: administra las operaciones de reequilibrio, coordina las actualizaciones continuas, maneja el conocimiento del grupo de servidores y se integra con las primitivas de programación Kubernetes para garantizar la ubicación óptima de los pods Couchbase.

Couchbase Operador autónomo en KubernetesCouchbase Operador AutónomoRelojes CouchbaseCluster CRD | ConciliaCouchbaseClúster CRDDeclaración de estado deseadoTLS SecretosRotación automática a través del administrador de certificadosGrupo de servidores: zona-a (rack-1)StatefulSet: cb-prod-data-zacb-prod-0000Datos + Índice4 CPU | 16GiPVC: 100Gi gp3cb-prod-0001Consulta + Búsqueda4 CPU | 8GiPVC: 50Gi gp3PVC (EBS gp3)Servicio IP del clústerAntiafinidad: solo nodos de zona aGrupo de servidores: zona-b (rack-2)Conjunto con estado: cb-prod-data-zbcb-prod-0002Datos + Índice4 CPU | 16GiPVC: 100Gi gp3cb-prod-0003Consulta + Búsqueda4 CPU | 8GiPVC: 50Gi gp3PVC (EBS gp3)Servicio IP del clústerAntiafinidad: solo nodos de zona bGrupo de servidores: zona-c (rack-3)Conjunto con estado: cb-prod-data-zccb-prod-0004Datos + Análisis8 CPU | 32GiPVC: 200Gi gp3cb-prod-0005Evento2 CPU | 8GiPVC: 50Gi gp3PVC (EBS gp3)Servicio IP del clústerAntiafinidad: solo nodos de zona cServicios expuestosPuerto de nodo 8091 | SDK 11210 | N1QL 8093Controlador de admisiónvalida CRD | Gancho web TLSControlador de respaldocbbackupmgr | S3/GCS/AzureOperadorDatos/Índice/ConsultaAnálisis/EventosPVC AlmacenamientoProgramación de podsSeguridad/Validación

CouchbaseCluster CRD Especificación

El CouchbaseCluster CRD es la configuración central que declara el estado deseado de su implementación Couchbase. El operador autónomo concilia esto en StatefulSets, Servicios, PVC, Secretos y recursos RBAC. A continuación se muestra un CRD listo para producción:

apiVersion: couchbase.com/v2
kind: CouchbaseCluster
metadata:
  name: cb-production
  namespace: couchbase
spec:
  image: couchbase/server:7.6.1-enterprise
  antiAffinity: true
  platform: aws
  cluster:
    autoFailoverTimeout: 30s
    autoFailoverMaxCount: 3
    autoFailoverOnDataDiskIssues: true
    autoFailoverOnDataDiskIssuesTimePeriod: 120s
    autoFailoverServerGroup: true
    clusterName: cb-production
    dataServiceMemoryQuota: 8Gi
    indexServiceMemoryQuota: 4Gi
    searchServiceMemoryQuota: 2Gi
    analyticsServiceMemoryQuota: 4Gi
    eventingServiceMemoryQuota: 2Gi
    indexStorageSetting: memory_optimized
    autoCompaction:
      databaseFragmentationThreshold:
        percent: 30
        size: 1Gi
      viewFragmentationThreshold:
        percent: 30
        size: 1Gi
      parallelCompaction: false
      timeWindow:
        start: "02:00"
        end: "06:00"
        abortCompactionOutsideWindow: true
  security:
    adminSecret: cb-admin-credentials
    rbac:
      managed: true
      selector:
        matchLabels:
          cluster: cb-production
    ldap:
      hosts:
      - ldap.example.com
      port: 636
      encryption: TLS
  networking:
    tls:
      static:
        serverSecret: couchbase-server-tls
        operatorSecret: couchbase-operator-tls
    exposeAdminConsole: true
    adminConsoleServices:
    - data
    adminConsoleServiceType: NodePort
    exposedFeatures:
    - client
    - xdcr
    exposedFeatureServiceType: NodePort
  buckets:
    managed: true
    selector:
      matchLabels:
        cluster: cb-production
  servers:
  - name: data-zone-a
    size: 2
    services:
    - data
    - index
    serverGroups:
    - zone-a
    pod:
      metadata:
        labels:
          couchbase-service: data-index
        annotations:
          prometheus.io/scrape: "true"
          prometheus.io/port: "9091"
      spec:
        nodeSelector:
          topology.kubernetes.io/zone: us-east-1a
        tolerations:
        - key: couchbase
          operator: Equal
          value: "true"
          effect: NoSchedule
        resources:
          requests:
            cpu: "4"
            memory: 16Gi
          limits:
            cpu: "8"
            memory: 20Gi
    volumeMounts:
      default: couchbase-data
      data: couchbase-data
      index: couchbase-index
  - name: data-zone-b
    size: 2
    services:
    - data
    - index
    serverGroups:
    - zone-b
    pod:
      spec:
        nodeSelector:
          topology.kubernetes.io/zone: us-east-1b
        tolerations:
        - key: couchbase
          operator: Equal
          value: "true"
          effect: NoSchedule
        resources:
          requests:
            cpu: "4"
            memory: 16Gi
          limits:
            cpu: "8"
            memory: 20Gi
    volumeMounts:
      default: couchbase-data
      data: couchbase-data
      index: couchbase-index
  - name: query-search
    size: 2
    services:
    - query
    - search
    serverGroups:
    - zone-a
    - zone-b
    pod:
      spec:
        resources:
          requests:
            cpu: "4"
            memory: 8Gi
          limits:
            cpu: "8"
            memory: 12Gi
    volumeMounts:
      default: couchbase-default
  - name: analytics-eventing
    size: 2
    services:
    - analytics
    - eventing
    serverGroups:
    - zone-c
    pod:
      spec:
        nodeSelector:
          topology.kubernetes.io/zone: us-east-1c
        resources:
          requests:
            cpu: "8"
            memory: 32Gi
          limits:
            cpu: "16"
            memory: 40Gi
    volumeMounts:
      default: couchbase-analytics
      analytics:
      - couchbase-analytics
  serverGroups:
  - zone-a
  - zone-b
  - zone-c
  volumeClaimTemplates:
  - metadata:
      name: couchbase-data
    spec:
      storageClassName: ebs-gp3-couchbase
      resources:
        requests:
          storage: 100Gi
  - metadata:
      name: couchbase-index
    spec:
      storageClassName: ebs-gp3-couchbase
      resources:
        requests:
          storage: 50Gi
  - metadata:
      name: couchbase-default
    spec:
      storageClassName: ebs-gp3-couchbase
      resources:
        requests:
          storage: 20Gi
  - metadata:
      name: couchbase-analytics
    spec:
      storageClassName: ebs-gp3-couchbase
      resources:
        requests:
          storage: 200Gi
Instalación del operador

a través de Helm

# Add Couchbase Helm repository
helm repo add couchbase https://couchbase-partners.github.io/helm-charts/
helm repo update

# Install the Couchbase Autonomous Operator
helm install couchbase-operator couchbase/couchbase-operator \
  --namespace couchbase \
  --create-namespace \
  --set operator.image.repository=couchbase/operator \
  --set operator.image.tag=2.7.1 \
  --set admissionController.enabled=true

# Create the admin credentials secret
kubectl create secret generic cb-admin-credentials \
  --namespace couchbase \
  --from-literal=username=Administrator \
  --from-literal=password=$(openssl rand -base64 24)

# Deploy the CouchbaseCluster CRD
kubectl apply -f couchbase-cluster.yaml

# Verify deployment
kubectl get couchbaseclusters -n couchbase
kubectl get pods -n couchbase -l app=couchbase
kubectl get svc -n couchbase

Grupos de servidores y reconocimiento de zona/rack

Los grupos de servidores

son el mecanismo de Couchbase para garantizar que los vBuckets activos y sus réplicas se coloquen en diferentes dominios de falla (zonas de disponibilidad, bastidores o centros de datos). Cuando se configuran grupos de servidores, Couchbase garantiza que ningún par activo y de réplica para el mismo vBucket resida en el mismo grupo de servidores. Esto significa que una falla completa de la zona no resultará en la pérdida de datos.

El operador autónomo asigna grupos de servidores a etiquetas de topología de nodos Kubernetes y programa automáticamente pods en las zonas correctas. Combinado con reglas antiafinidad de pods, esto garantiza que los pods Couchbase se distribuyan en la infraestructura física para lograr la máxima resiliencia.

AWS Implementación de EKS

Amazon EKS requiere una configuración específica para un rendimiento óptimo de Couchbase. Las consideraciones clave son el almacenamiento (EBS gp3 para rendimiento), los tipos de instancias (r6i/r7i con memoria optimizada para nodos de datos) y las redes (VPC CNI para redes a nivel de pod).

# EBS gp3 StorageClass optimized for Couchbase
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ebs-gp3-couchbase
provisioner: ebs.csi.aws.com
parameters:
  type: gp3
  iops: "6000"
  throughput: "500"
  encrypted: "true"
  kmsKeyId: "arn:aws:kms:us-east-1:123456789:key/mrk-abcdef"
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

---
# Recommended EKS node groups for Couchbase
# Data nodes:     r6i.2xlarge (8 vCPU, 64 GiB) or r7i.2xlarge
# Index/Query:    m6i.2xlarge (8 vCPU, 32 GiB)
# Analytics:      r6i.4xlarge (16 vCPU, 128 GiB)
# Eventing:       m6i.xlarge  (4 vCPU, 16 GiB)

# EKS managed node group with taints for Couchbase
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: couchbase-eks
  region: us-east-1
managedNodeGroups:
- name: cb-data
  instanceType: r6i.2xlarge
  desiredCapacity: 4
  minSize: 4
  maxSize: 8
  volumeSize: 200
  volumeType: gp3
  volumeIOPS: 6000
  volumeThroughput: 500
  availabilityZones: ["us-east-1a", "us-east-1b"]
  labels:
    workload: couchbase-data
  taints:
  - key: couchbase
    value: "true"
    effect: NoSchedule
  iam:
    attachPolicyARNs:
    - arn:aws:iam::policy/AmazonEBSCSIDriverPolicy
- name: cb-query
  instanceType: m6i.2xlarge
  desiredCapacity: 2
  minSize: 2
  maxSize: 4
  availabilityZones: ["us-east-1a", "us-east-1b"]
  labels:
    workload: couchbase-query

Azure Implementación de AKS

Azure AKS utiliza Premium SSD v2 o Ultra Disk para las demandas de E/S de Couchbase y Azure Private Link para una conectividad XDCR segura entre regiones.

# Azure Premium SSD v2 StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azure-premium-couchbase
provisioner: disk.csi.azure.com
parameters:
  skuName: PremiumV2_LRS
  DiskIOPSReadWrite: "6000"
  DiskMBpsReadWrite: "500"
  cachingMode: None
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

---
# Ultra Disk StorageClass for high-performance workloads
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azure-ultra-couchbase
provisioner: disk.csi.azure.com
parameters:
  skuName: UltraSSD_LRS
  DiskIOPSReadWrite: "10000"
  DiskMBpsReadWrite: "1000"
  cachingMode: None
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

---
# AKS recommended VM sizes:
# Data nodes:      Standard_E8s_v5  (8 vCPU, 64 GiB)
# Index/Query:     Standard_D8s_v5  (8 vCPU, 32 GiB)
# Analytics:       Standard_E16s_v5 (16 vCPU, 128 GiB)
Implementación de

GCP GKE

Google Kubernetes Engine utiliza discos persistentes SSD e identidad de carga de trabajo para un acceso seguro a Google Cloud Storage para realizar copias de seguridad.

# GKE SSD Persistent Disk StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ssd-couchbase
provisioner: pd.csi.storage.gke.io
parameters:
  type: pd-ssd
  provisioned-iops-on-create: "6000"
  provisioned-throughput-on-create: "500"
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

---
# GKE Hyperdisk Balanced for cost-effective performance
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: hyperdisk-couchbase
provisioner: pd.csi.storage.gke.io
parameters:
  type: hyperdisk-balanced
  provisioned-iops-on-create: "6000"
  provisioned-throughput-on-create: "500"
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

---
# GKE recommended machine types:
# Data nodes:      n2-highmem-8   (8 vCPU, 64 GB)
# Index/Query:     n2-standard-8  (8 vCPU, 32 GB)
# Analytics:       n2-highmem-16  (16 vCPU, 128 GB)

Metal desnudo k3s/Rancher con Longhorn

Para organizaciones que necesitan un control total de la infraestructura sin depender de un proveedor de nube, el k3s básico con administración Rancher y almacenamiento distribuido Longhorn proporciona una base excelente para Couchbase HA. Esta arquitectura es popular en industrias reguladas, escenarios de computación de vanguardia y entornos sensibles a los costos.

k3s / Rancher Bare Metal Couchbase ImplementaciónConsola de gestión ganaderaNodo 1: servidor k3s (rack-1)Couchbase Datos + Índicecb-prod-0000 | 8 CPU, 64GBvBuckets 0-341 activos | Puerto SDK 11210Consulta Couchbase (N1QL)cb-prod-0001 | Puerto 8093Metal LB VIPPrometheusVolumen de bocina larga/dev/sdb NVMe | 3 réplicas en nodosAntiafinidad: no hay módulos Couchbase colocadosNodo 2: servidor k3s (rack-2)Couchbase Datos + Índicecb-prod-0002 | 8 CPU, 64GBvBuckets 342-682 activos | Puerto SDK 11210Couchbase Búsqueda (FTS)cb-prod-0003 | Puerto 8094MetalLB VIPGrafanaVolumen de bocina larga/dev/sdb NVMe | 3 réplicas en nodosAntiafinidad: no hay módulos Couchbase colocadosNodo 3: agente k3s (bastidor 3)Couchbase Datos + Análisiscb-prod-0004 | 16 CPU, 128GBvBuckets 683-1023 activos | CBASCouchbase Eventocb-prod-0005 | Consumidor DCPMetal LB VIPCAO OperadorVolumen de bocina larga/dev/sdb NVMe | 3 réplicas en nodosAntiafinidad: no hay módulos Couchbase colocadosBalanceador de carga MetalLBVIP: 192.168.1.200-210 | SDK + Consola web + XDCRCopia de seguridad: cbbackupmgr → MinIO S3Diario completo + incremental por hora | MinIO en NVMededicadoDatos/ÍndiceConsulta/BúsquedaAnálisis/Eventos/MetalLBBocina largaReplicación DCPGestión de rancheros
# k3s bare metal setup for Couchbase

# Install k3s on master nodes (HA with embedded etcd)
curl -sfL https://get.k3s.io | sh -s - server \
  --cluster-init \
  --disable traefik \
  --disable servicelb \
  --write-kubeconfig-mode 644 \
  --node-taint couchbase=true:NoSchedule \
  --node-label topology.kubernetes.io/zone=rack-1

# Join additional server nodes
curl -sfL https://get.k3s.io | sh -s - server \
  --server https://master-1:6443 \
  --token $(cat /var/lib/rancher/k3s/server/node-token) \
  --node-taint couchbase=true:NoSchedule \
  --node-label topology.kubernetes.io/zone=rack-2

# Join agent nodes
curl -sfL https://get.k3s.io | sh -s - agent \
  --server https://master-1:6443 \
  --token $(cat /var/lib/rancher/k3s/server/node-token) \
  --node-taint couchbase=true:NoSchedule \
  --node-label topology.kubernetes.io/zone=rack-3

# Install Longhorn for distributed storage
helm repo add longhorn https://charts.longhorn.io
helm install longhorn longhorn/longhorn \
  --namespace longhorn-system \
  --create-namespace \
  --set defaultSettings.defaultReplicaCount=3 \
  --set defaultSettings.defaultDataPath=/mnt/longhorn \
  --set defaultSettings.guaranteedInstanceManagerCPU=12

# Create Longhorn StorageClass for Couchbase
kubectl apply -f - <
Copia de seguridad y restauración de

con cbbackupmgr

Couchbase proporcionacbbackupmgr, una herramienta de respaldo empresarial que admite respaldos completos, incrementales y diferenciales con compresión y cifrado opcionales. Para implementaciones de HA de producción, una estrategia de respaldo sólida combina respaldos de nivel Couchbase con capacidades de instantáneas en la nube.

Configuración de copia de seguridad

# Initialize a backup repository
/opt/couchbase/bin/cbbackupmgr config \
  --archive /backup/couchbase \
  --repo production-backup \
  --include-data production-data \
  --include-data user-profiles \
  --exclude-data _system

# Run a full backup
/opt/couchbase/bin/cbbackupmgr backup \
  --archive /backup/couchbase \
  --repo production-backup \
  --cluster couchbase://localhost \
  --username Administrator \
  --password "$CB_PASSWORD" \
  --threads 4 \
  --no-progress-bar

# Run an incremental backup (only mutations since last backup)
/opt/couchbase/bin/cbbackupmgr backup \
  --archive /backup/couchbase \
  --repo production-backup \
  --cluster couchbase://localhost \
  --username Administrator \
  --password "$CB_PASSWORD" \
  --threads 4

# List available backups
/opt/couchbase/bin/cbbackupmgr list \
  --archive /backup/couchbase \
  --repo production-backup

# Restore from a specific backup
/opt/couchbase/bin/cbbackupmgr restore \
  --archive /backup/couchbase \
  --repo production-backup \
  --cluster couchbase://target-cluster:8091 \
  --username Administrator \
  --password "$CB_PASSWORD" \
  --start 2026-04-12T00_00_00 \
  --end 2026-04-12T14_30_00 \
  --threads 4

Script de copia de seguridad automatizado para Kubernetes

#!/bin/bash
# couchbase-backup.sh — Automated backup to S3-compatible storage

set -euo pipefail

CLUSTER_HOST="cb-production-srv.couchbase.svc.cluster.local"
BACKUP_DIR="/backup/couchbase"
REPO_NAME="prod-$(date +%Y%m%d)"
S3_BUCKET="s3://couchbase-backups/production"
RETENTION_DAYS=14

log() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] $*"; }

log "Starting Couchbase backup for cluster: $CLUSTER_HOST"

if [ ! -d "$BACKUP_DIR/$REPO_NAME" ]; then
  log "Configuring new backup repository: $REPO_NAME"
  cbbackupmgr config \
    --archive "$BACKUP_DIR" \
    --repo "$REPO_NAME" \
    --include-data production-data \
    --include-data user-profiles
fi

log "Running incremental backup..."
cbbackupmgr backup \
  --archive "$BACKUP_DIR" \
  --repo "$REPO_NAME" \
  --cluster "couchbase://$CLUSTER_HOST" \
  --username "$CB_USERNAME" \
  --password "$CB_PASSWORD" \
  --threads 4 \
  --no-progress-bar

BACKUP_SIZE=$(du -sh "$BACKUP_DIR/$REPO_NAME" | cut -f1)
log "Backup complete. Size: $BACKUP_SIZE"

log "Syncing to S3: $S3_BUCKET/$REPO_NAME"
aws s3 sync "$BACKUP_DIR/$REPO_NAME" "$S3_BUCKET/$REPO_NAME" \
  --storage-class STANDARD_IA \
  --sse aws:kms

log "Cleaning up backups older than $RETENTION_DAYS days..."
find "$BACKUP_DIR" -maxdepth 1 -name "prod-*" -mtime +"$RETENTION_DAYS" -exec rm -rf {} \;

log "Backup pipeline complete."

CouchbaseBackup CRD (administrado por el operador)

El operador autónomo proporciona CRD para la gestión automatizada de copias de seguridad:

apiVersion: couchbase.com/v2
kind: CouchbaseBackup
metadata:
  name: cb-daily-backup
  namespace: couchbase
spec:
  strategy: full_incremental
  full:
    schedule: "0 2 * * 0"   # Full backup every Sunday at 2 AM
  incremental:
    schedule: "0 2 * * 1-6" # Incremental Mon-Sat at 2 AM
  successfulJobsHistoryLimit: 5
  failedJobsHistoryLimit: 3
  backOffLimit: 3
  logRetention: 168h
  size: 100Gi
  s3bucket: s3://couchbase-backups/production
---
apiVersion: couchbase.com/v2
kind: CouchbaseBackupRestore
metadata:
  name: cb-restore-pitr
  namespace: couchbase
spec:
  backup: cb-daily-backup
  repo: "20260412"
  start:
    int: 1
  end:
    int: 5
  backOffLimit: 3

Ajuste del rendimiento de consultas N1QL

N1QL (SQL++ para JSON) es el lenguaje de consulta de Couchbase. Para ajustar el rendimiento de N1QL es necesario comprender el planificador de consultas, el diseño del índice y las optimizaciones del lado del servidor.

Estrategias de índice

: GSI y FTS

-- Global Secondary Index (GSI) for common query patterns

-- Composite index for user lookups
CREATE INDEX idx_users_email_status
  ON `user-profiles`(email, status)
  WHERE type = 'user'
  WITH {"num_replica": 1, "defer_build": false};

-- Covering index (includes all queried fields to avoid fetch)
CREATE INDEX idx_orders_covering
  ON `production-data`(customer_id, order_date, total_amount, status)
  WHERE type = 'order'
  WITH {"num_replica": 1};

-- Array index for nested documents
CREATE INDEX idx_order_items
  ON `production-data`(DISTINCT ARRAY item.product_id FOR item IN items END)
  WHERE type = 'order'
  WITH {"num_replica": 1};

-- Partial index for active records only
CREATE INDEX idx_active_sessions
  ON `production-data`(user_id, created_at)
  WHERE type = 'session' AND status = 'active'
  WITH {"num_replica": 1};

-- Adaptive index for dynamic query patterns
CREATE INDEX idx_adaptive_products
  ON `production-data`(DISTINCT PAIRS(self))
  WHERE type = 'product'
  WITH {"num_replica": 1};

-- Check index status
SELECT name, state, num_docs_indexed, num_docs_pending
FROM system:indexes
WHERE keyspace_id = 'production-data';

-- Analyze query execution plan
EXPLAIN SELECT u.name, u.email, COUNT(o.id) AS order_count
FROM `user-profiles` u
JOIN `production-data` o ON o.customer_id = u.id
WHERE u.status = 'active' AND o.type = 'order'
GROUP BY u.name, u.email
ORDER BY order_count DESC
LIMIT 100;

-- Use ADVISE to get index recommendations
ADVISE SELECT * FROM `production-data`
WHERE type = 'order'
  AND customer_id = 'cust-12345'
  AND order_date BETWEEN '2026-01-01' AND '2026-04-12'
ORDER BY order_date DESC;
Consejos de optimización de consultas

-- Use PREPARE for frequently executed queries (cached plan)
PREPARE get_user_orders AS
SELECT o.id, o.order_date, o.total_amount, o.status
FROM `production-data` o
WHERE o.type = 'order'
  AND o.customer_id = $customer_id
ORDER BY o.order_date DESC
LIMIT $page_size OFFSET $page_offset;

-- Execute prepared statement
EXECUTE get_user_orders
USING {"customer_id": "cust-12345", "page_size": 20, "page_offset": 0};

-- Use META().id for direct key-value lookups (fastest path)
SELECT META().id, *
FROM `production-data`
USE KEYS ["order::2026-001", "order::2026-002", "order::2026-003"];

-- Correlated subquery with USE KEYS for joins
SELECT u.name,
  (SELECT o.id, o.total_amount
   FROM `production-data` o
   USE KEYS u.order_ids
   WHERE o.status = 'completed') AS completed_orders
FROM `user-profiles` u
WHERE META(u).id = 'user::12345';

-- Use INFER to understand document schema
INFER `production-data` WITH {"sample_size": 10000, "similarity_metric": 0.6};

Gestión de memoria y configuración de depósitos

La arquitectura de memoria primero de

Couchbase significa que la asignación de RAM afecta directamente el rendimiento. Cada servicio tiene su propia cuota de memoria y los depósitos comparten la cuota del servicio de datos. El tamaño adecuado evita los desalojos de caché que degradan la latencia.

# Configure cluster-level memory quotas
/opt/couchbase/bin/couchbase-cli setting-cluster \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --cluster-ramsize 8192 \
  --cluster-index-ramsize 4096 \
  --cluster-fts-ramsize 2048 \
  --cluster-eventing-ramsize 2048 \
  --cluster-analytics-ramsize 4096

# Memory allocation guidelines:
# Data Service:      60% of available node RAM
# Index Service:     20% of available node RAM
# Search Service:    10% of available node RAM
# OS/overhead:       10% reserved

# Bucket memory sizing formula:
# Required RAM = (avg_doc_size * num_docs * 2.5) / num_data_nodes
# The 2.5 multiplier accounts for:
#   - Metadata overhead (~56 bytes per document)
#   - Internal fragmentation
#   - Replica copies in memory

# Create an optimized production bucket
curl -X POST http://localhost:8091/pools/default/buckets \
  -u Administrator:password \
  -d name=production-data \
  -d ramQuota=4096 \
  -d bucketType=couchbase \
  -d replicaNumber=2 \
  -d threadsNumber=8 \
  -d evictionPolicy=valueOnly \
  -d compressionMode=active \
  -d maxTTL=0 \
  -d conflictResolutionType=lww \
  -d flushEnabled=0 \
  -d durabilityMinLevel=majorityAndPersistActive

# Eviction policies:
# valueOnly  - Evicts document values but keeps metadata in RAM
#              Best for workloads where key access patterns are predictable
# fullEviction - Evicts both values and metadata
#                Best for very large datasets that exceed available RAM
# noEviction - (Ephemeral buckets only) Rejects writes when RAM is full
#              Best for caching use cases

Cifrado TLS y RBAC

Proteger Couchbase en producción requiere cifrado de datos en tránsito (TLS), control de acceso detallado basado en roles (RBAC) y registro de auditoría.

# Enable TLS for all Couchbase services
/opt/couchbase/bin/couchbase-cli ssl-manage \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --set-node-certificate

# Enforce minimum TLS version
/opt/couchbase/bin/couchbase-cli setting-security \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --set \
  --tls-min-version tlsv1.2 \
  --tls-honor-cipher-order 1 \
  --hsts-max-age 31536000 \
  --hsts-preload-enabled 1

# Create application-specific RBAC users
/opt/couchbase/bin/couchbase-cli user-manage \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --set \
  --rbac-username app-service \
  --rbac-password "$(openssl rand -base64 32)" \
  --rbac-name "Application Service Account" \
  --roles 'data_reader[production-data],data_writer[production-data],query_select[production-data],query_insert[production-data],query_update[production-data],query_delete[production-data]' \
  --auth-domain local

# Create a read-only analytics user
/opt/couchbase/bin/couchbase-cli user-manage \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --set \
  --rbac-username analytics-reader \
  --rbac-password "$(openssl rand -base64 32)" \
  --roles 'data_reader[production-data],query_select[production-data],analytics_reader[production-data]' \
  --auth-domain local

# Enable audit logging
/opt/couchbase/bin/couchbase-cli setting-audit \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --set \
  --audit-enabled 1 \
  --audit-log-path /opt/couchbase/var/lib/couchbase/logs \
  --audit-log-rotate-interval 86400 \
  --audit-log-rotate-size 20971520

Kubernetes TLS con administrador de certificados

# Certificate for Couchbase server TLS
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: couchbase-server-tls
  namespace: couchbase
spec:
  secretName: couchbase-server-tls
  duration: 8760h   # 1 year
  renewBefore: 720h  # 30 days before expiry
  privateKey:
    algorithm: RSA
    size: 4096
  usages:
  - server auth
  - client auth
  dnsNames:
  - "*.cb-production.couchbase.svc.cluster.local"
  - "*.cb-production.couchbase.svc"
  - "cb-production-srv.couchbase.svc.cluster.local"
  - "localhost"
  issuerRef:
    name: couchbase-ca-issuer
    kind: ClusterIssuer
Monitoreo

con Exportador Prometheus

Couchbase expone métricas ricas a través de su REST API. Elcouchbase-exporterlos traduce al formato Prometheus para un monitoreo completo.

# Deploy Couchbase Prometheus Exporter
apiVersion: apps/v1
kind: Deployment
metadata:
  name: couchbase-exporter
  namespace: couchbase
spec:
  replicas: 1
  selector:
    matchLabels:
      app: couchbase-exporter
  template:
    metadata:
      labels:
        app: couchbase-exporter
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "9091"
    spec:
      containers:
      - name: exporter
        image: couchbase/exporter:1.0.9
        args:
        - --couchbase-address=cb-production-srv.couchbase.svc.cluster.local
        - --couchbase-port=8091
        - --couchbase-username=$(CB_USERNAME)
        - --couchbase-password=$(CB_PASSWORD)
        - --server-address=0.0.0.0:9091
        - --per-node-refresh=5
        env:
        - name: CB_USERNAME
          valueFrom:
            secretKeyRef:
              name: cb-admin-credentials
              key: username
        - name: CB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: cb-admin-credentials
              key: password
        ports:
        - containerPort: 9091
          name: metrics
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 500m
            memory: 256Mi
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: couchbase-monitor
  namespace: couchbase
spec:
  selector:
    matchLabels:
      app: couchbase-exporter
  endpoints:
  - port: metrics
    interval: 15s
    path: /metrics

Métricas clave de Couchbase para monitorear

  • cb_bucket_ops_per_sec: operaciones totales por segundo por depósito. Base de referencia de su rendimiento normal y alerta sobre anomalías.
  • cb_bucket_mem_used_bytes: uso de memoria del depósito. Alerta al acercarse a la cuota de RAM para evitar desalojos.
  • cb_bucket_cache_miss_ratio: proporción de solicitudes que pierden el caché y requieren recuperación de disco. Debe permanecer por debajo del 2% para un rendimiento óptimo.
  • cb_bucket_disk_queue_items: profundidad de la cola de escritura del disco. Una cola en crecimiento indica que la E/S del disco no puede seguir el ritmo del rendimiento de escritura.
  • cb_xdcr_changes_left: número de mutaciones pendientes de replicación de XDCR. Indica un retraso en la replicación entre regiones.
  • cb_xdcr_docs_writing: documentos replicados por segundo a través de XDCR.
  • cb_node_cpu_utilization_percent: uso de CPU por nodo. Couchbase es intensivo en CPU para compactación e indexación.
  • cb_bucket_vbucket_active_num: número de vBuckets activos por nodo. Debe ser aproximadamente uniforme entre los nodos de datos.
  • cb_index_num_docs_pending— Documentos pendientes de actualización de índice. Indica un retraso en la creación del índice.
  • cb_n1ql_requests_per_sec: rendimiento de consultas N1QL. Combinado con la latencia promedio, identifica problemas de rendimiento de las consultas.

Prometheus Reglas de alerta

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: couchbase-alerts
  namespace: couchbase
spec:
  groups:
  - name: couchbase.rules
    rules:
    - alert: CouchbaseNodeDown
      expr: cb_node_healthy == 0
      for: 1m
      labels:
        severity: critical
      annotations:
        summary: "Couchbase node {{ $labels.node }} is unhealthy"
    - alert: CouchbaseHighCacheMissRate
      expr: cb_bucket_cache_miss_ratio > 0.05
      for: 5m
      labels:
        severity: warning
      annotations:
        summary: "Cache miss rate {{ $value | humanizePercentage }} on bucket {{ $labels.bucket }}"
    - alert: CouchbaseXDCRLag
      expr: cb_xdcr_changes_left > 10000
      for: 10m
      labels:
        severity: warning
      annotations:
        summary: "XDCR replication lag: {{ $value }} pending mutations"
    - alert: CouchbaseDiskQueueGrowing
      expr: rate(cb_bucket_disk_queue_items[5m]) > 100
      for: 10m
      labels:
        severity: warning
      annotations:
        summary: "Disk queue growing on bucket {{ $labels.bucket }}"
    - alert: CouchbaseMemoryPressure
      expr: cb_bucket_mem_used_bytes / cb_bucket_mem_quota_bytes > 0.9
      for: 5m
      labels:
        severity: critical
      annotations:
        summary: "Memory usage at {{ $value | humanizePercentage }} for bucket {{ $labels.bucket }}"
Configuración de cadena de conexión del SDK

para HA

Los SDK

Couchbase tienen en cuenta la topología: mantienen un mapa de clúster interno y enrutan las operaciones directamente al nodo correcto. La configuración adecuada del SDK es fundamental para HA, ya que garantiza una rápida detección de conmutación por error y un reintento automático en caso de errores transitorios.

// Node.js SDK configuration for HA
const couchbase = require('couchbase');

const clusterConnStr = 'couchbases://cb-node1.example.com,cb-node2.example.com,cb-node3.example.com';

const cluster = await couchbase.connect(clusterConnStr, {
  username: process.env.CB_USERNAME,
  password: process.env.CB_PASSWORD,
  timeouts: {
    kvTimeout: 2500,           // Key-value operation timeout (ms)
    kvDurableTimeout: 10000,   // Durable write timeout
    queryTimeout: 75000,       // N1QL query timeout
    searchTimeout: 75000,      // FTS search timeout
    analyticsTimeout: 75000,   // Analytics query timeout
    connectTimeout: 10000,     // Initial connection timeout
    managementTimeout: 75000   // Management API timeout
  },
  security: {
    trustStorePath: '/etc/couchbase/ca.pem'
  },
  transactions: {
    durabilityLevel: couchbase.DurabilityLevel.MajorityAndPersistToActive,
    timeout: 15000
  }
});

const bucket = cluster.bucket('production-data');
const collection = bucket.defaultCollection();

// Durable write with observe-based durability
await collection.upsert('order::2026-001', orderDocument, {
  durabilityLevel: couchbase.DurabilityLevel.MajorityAndPersistToActive,
  timeout: 10000
});

// Read with replica fallback for HA
try {
  const result = await collection.get('user::12345');
} catch (err) {
  if (err instanceof couchbase.errors.TimeoutError) {
    const replicaResult = await collection.getAnyReplica('user::12345');
  }
}
# Java SDK configuration for HA
import com.couchbase.client.java.*;
import com.couchbase.client.java.env.*;
import java.time.Duration;

ClusterEnvironment env = ClusterEnvironment.builder()
    .timeoutConfig(TimeoutConfig.builder()
        .kvTimeout(Duration.ofMillis(2500))
        .kvDurableTimeout(Duration.ofSeconds(10))
        .queryTimeout(Duration.ofSeconds(75))
        .connectTimeout(Duration.ofSeconds(10))
        .build())
    .ioConfig(IoConfig.builder()
        .numKvConnections(4)
        .enableMutationTokens(true)
        .enableDnsSrv(true)
        .build())
    .securityConfig(SecurityConfig.builder()
        .enableTls(true)
        .trustCertificate(Paths.get("/etc/couchbase/ca.pem"))
        .build())
    .build();

Cluster cluster = Cluster.connect(
    "couchbases://cb-node1.example.com,cb-node2.example.com",
    ClusterOptions.clusterOptions("username", "password")
        .environment(env)
);

Kubernetes Servicio DNS para conexión SDK

# When using the Autonomous Operator, connect via the headless service:
# couchbase://cb-production-srv.couchbase.svc.cluster.local
#
# The operator creates these services:
# cb-production-srv      - Headless service for SDK auto-discovery
# cb-production-ui       - Web Console (port 8091/18091)
# cb-production-cloud    - External connectivity (NodePort/LoadBalancer)
#
# For external SDK access (outside Kubernetes), use:
# - NodePort with explicit node addresses
# - LoadBalancer with MetalLB (bare metal)
# - Ingress with TCP passthrough for port 11210 (SDK) and 11207 (SDK TLS)

Couchbase Puerta de enlace móvil y de sincronización para implementaciones perimetrales

Couchbase Mobile extiende el ecosistema Couchbase a dispositivos periféricos y aplicaciones móviles.Couchbase Litese ejecuta integrado en dispositivos iOS, Android e IoT, mientras queSync Gatewayactúa como middleware de sincronización entre Couchbase Lite y Couchbase Server.

// Sync Gateway configuration for production
{
  "interface": ":4984",
  "adminInterface": "127.0.0.1:4985",
  "logging": {
    "console": {
      "log_level": "info",
      "log_keys": ["HTTP", "Sync", "Auth", "Changes"]
    }
  },
  "databases": {
    "mobile-app": {
      "server": "couchbases://cb-production-srv.couchbase.svc.cluster.local",
      "bucket": "production-data",
      "username": "sync-gateway",
      "password": "${SG_PASSWORD}",
      "enable_shared_bucket_access": true,
      "import_docs": true,
      "num_index_replicas": 1,
      "delta_sync": {
        "enabled": true,
        "rev_max_age_seconds": 86400
      },
      "cache": {
        "channel_cache": {
          "max_number": 50000,
          "compact_high_watermark_pct": 80,
          "compact_low_watermark_pct": 60
        },
        "rev_cache": {
          "size": 5000,
          "shard_count": 16
        }
      },
      "users": {
        "GUEST": {"disabled": true}
      },
      "sync": "function(doc, oldDoc) { if (doc.type === 'user-data') { channel(doc.channels); requireAccess(doc.channels); } else { channel('public'); } }"
    }
  }
}

# Deploy Sync Gateway on Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sync-gateway
  namespace: couchbase
spec:
  replicas: 3
  selector:
    matchLabels:
      app: sync-gateway
  template:
    metadata:
      labels:
        app: sync-gateway
    spec:
      containers:
      - name: sync-gateway
        image: couchbase/sync-gateway:3.1.4-enterprise
        args: ["/etc/sync-gateway/config.json"]
        ports:
        - containerPort: 4984
          name: public
        - containerPort: 4985
          name: admin
        resources:
          requests:
            cpu: "2"
            memory: 4Gi
          limits:
            cpu: "4"
            memory: 8Gi
        volumeMounts:
        - name: config
          mountPath: /etc/sync-gateway
      volumes:
      - name: config
        configMap:
          name: sync-gateway-config

Planificación y dimensionamiento de capacidad

La planificación adecuada de la capacidad es esencial para el rendimiento y la optimización de costos de Couchbase. La siguiente tabla proporciona pautas de tamaño según el nivel de carga de trabajo:

Rendimiento deDesarrollocoubicado
Nivel de carga de trabajoNodos de datosÍndice/ConsultaRAM por nodoAlmacenamiento
1 (todos los servicios)4GBSSD de 20 GB<1k operaciones/s
Pequeña producción3 Datos2 Consulta+Índice16GBSSD de 100 GB10k operaciones/s
Producción media5 Datos3 Consulta+Índice32GBSSD de 500 GB50k operaciones/s
Gran producción7-10 Datos4+ Consulta+Índice64GB1TB NVMe200k+ operaciones/s
Empresa / Global10+ Datos (varias regiones)6+ Consulta+Índice128GB2+TB NVMe500k+ operaciones/s

Fórmula de dimensionamiento

# Data Service RAM sizing
# Required RAM per node = (num_documents * (doc_metadata_size + avg_value_size)) / num_data_nodes * (1 + num_replicas)
# doc_metadata_size = 56 bytes (fixed overhead per document)
# Include 25% headroom for fragmentation and growth

# Example: 100M documents, 1KB avg size, 3 data nodes, 1 replica
# RAM = (100,000,000 * (56 + 1024)) / 3 * 2 = ~72 GB per node
# With 25% headroom: ~90 GB per node

# Index Service RAM sizing (memory-optimized)
# RAM = total_index_size * 3 (for build/merge overhead)
# Use system:indexes to check current index sizes

# Disk sizing
# Disk = (num_documents * avg_doc_size * (1 + num_replicas)) * 3 (compaction headroom)
# Use SSD/NVMe with provisioned IOPS for predictable performance

Procedimientos de conmutación por error y recuperación ante desastres

Un plan integral de recuperación ante desastres garantiza la continuidad del negocio cuando las fallas de la infraestructura exceden el alcance de la conmutación por error automática.

Fallo de nodo único (automático)

# Auto-failover handles single node failures automatically.
# Verify failover occurred:
/opt/couchbase/bin/couchbase-cli server-list \
  --cluster localhost:8091 \
  --username Administrator \
  --password password

# After replacing the failed node, add and rebalance:
/opt/couchbase/bin/couchbase-cli server-add \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --server-add new-node.example.com:8091 \
  --server-add-username Administrator \
  --server-add-password password \
  --services data,index

/opt/couchbase/bin/couchbase-cli rebalance \
  --cluster localhost:8091 \
  --username Administrator \
  --password password

Fallo completo del clúster (manual)

# Scenario: Primary region (US-EAST) completely lost

# Step 1: Verify XDCR target cluster (EU-WEST) has latest data
# Check XDCR replication status before failure
curl -s http://eu-west-node:8091/pools/default/remoteClusters \
  -u Administrator:password | jq .

# Step 2: Pause XDCR replications pointing to the failed cluster
/opt/couchbase/bin/couchbase-cli xdcr-replicate \
  --cluster cb-eu-west.example.com:8091 \
  --username Administrator \
  --password password \
  --pause \
  --xdcr-replicator <replication-id>

# Step 3: Update application connection strings to EU-WEST cluster
# (via DNS update, service mesh, or environment variable change)

# Step 4: Scale up EU-WEST cluster if needed to handle full production load
# In Kubernetes, update the CouchbaseCluster CRD:
kubectl patch couchbasecluster cb-eu-west -n couchbase --type merge \
  -p '{"spec":{"servers":[{"name":"data-zone-a","size":4}]}}'

# Step 5: After US-EAST cluster is restored, re-establish XDCR
# and perform a full resync from EU-WEST back to US-EAST

Recuperación y conmutación por error elegante

# Graceful failover (for maintenance, drains data before removal)
/opt/couchbase/bin/couchbase-cli failover \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --server-failover node-to-remove.example.com:8091

# Recovery (re-add the node after maintenance)
/opt/couchbase/bin/couchbase-cli recovery \
  --cluster localhost:8091 \
  --username Administrator \
  --password password \
  --server-recovery node-to-recover.example.com:8091 \
  --recovery-type delta

# Delta recovery re-synchronizes only the changed data,
# which is much faster than full recovery.
# Full recovery rebuilds the node from scratch.

# Rebalance to complete the recovery
/opt/couchbase/bin/couchbase-cli rebalance \
  --cluster localhost:8091 \
  --username Administrator \
  --password password
Valores de

Helm para una implementación de producción completa

A continuación se muestra un archivo completo de valores Helm para implementar Couchbase con el operador autónomo en un entorno de producción:

# helm-values-production.yaml
couchbase-operator:
  operator:
    image:
      repository: couchbase/operator
      tag: 2.7.1
    resources:
      requests:
        cpu: 500m
        memory: 512Mi
      limits:
        cpu: "1"
        memory: 1Gi
  admissionController:
    enabled: true
    resources:
      requests:
        cpu: 100m
        memory: 128Mi

cluster:
  image: couchbase/server:7.6.1-enterprise
  antiAffinity: true
  autoFailoverTimeout: 30s
  autoFailoverMaxCount: 3
  autoFailoverOnDataDiskIssues: true
  autoFailoverServerGroup: true
  security:
    adminSecret: cb-admin-credentials
  networking:
    tls:
      static:
        serverSecret: couchbase-server-tls
        operatorSecret: couchbase-operator-tls
    exposeAdminConsole: true
    adminConsoleServiceType: NodePort
  buckets:
    managed: true
  servers:
    data:
      size: 4
      services:
      - data
      - index
      serverGroups:
      - zone-a
      - zone-b
      resources:
        requests:
          cpu: "4"
          memory: 16Gi
        limits:
          cpu: "8"
          memory: 20Gi
      volumeMounts:
        default: couchbase-data
        data: couchbase-data
        index: couchbase-index
    query:
      size: 2
      services:
      - query
      - search
      resources:
        requests:
          cpu: "4"
          memory: 8Gi
        limits:
          cpu: "8"
          memory: 12Gi
      volumeMounts:
        default: couchbase-default
    analytics:
      size: 2
      services:
      - analytics
      - eventing
      serverGroups:
      - zone-c
      resources:
        requests:
          cpu: "8"
          memory: 32Gi
        limits:
          cpu: "16"
          memory: 40Gi
      volumeMounts:
        default: couchbase-analytics
        analytics:
        - couchbase-analytics
  serverGroups:
  - zone-a
  - zone-b
  - zone-c
  volumeClaimTemplates:
  - metadata:
      name: couchbase-data
    spec:
      storageClassName: ebs-gp3-couchbase
      resources:
        requests:
          storage: 100Gi
  - metadata:
      name: couchbase-index
    spec:
      storageClassName: ebs-gp3-couchbase
      resources:
        requests:
          storage: 50Gi
  - metadata:
      name: couchbase-default
    spec:
      storageClassName: ebs-gp3-couchbase
      resources:
        requests:
          storage: 20Gi
  - metadata:
      name: couchbase-analytics
    spec:
      storageClassName: ebs-gp3-couchbase
      resources:
        requests:
          storage: 200Gi

Conclusión

La arquitectura del servidor

Couchbase, creada en torno a fragmentación basada en vBucket, acceso a datos con prioridad en la memoria y servicios multimodelo integrados, proporciona una base excepcionalmente poderosa para implementaciones de producción de alta disponibilidad. La combinación de replicación dentro del clúster con conmutación por error automática garantiza que las fallas de un solo nodo se manejen de manera transparente, mientras que XDCR extiende esta resiliencia a través de regiones geográficas para aplicaciones globales.

El operador autónomo Couchbase para Kubernetes transforma lo que serían operaciones manuales complejas en implementaciones declarativas y de autorreparación. Los grupos de servidores brindan reconocimiento de rack/zona, el operador administra las operaciones de reequilibrio durante los eventos de escalado y los CRD de respaldo integrados automatizan la preparación de recuperación ante desastres.

Conclusiones clave de esta guía:

  • Aproveche el escalamiento multidimensional: servicios separados de datos, índices, consultas, búsquedas, análisis y eventos en grupos de nodos dedicados para un escalado independiente y aislamiento de recursos.
  • Configure XDCR para resiliencia multirregional: XDCR bidireccional con resolución de conflictos basada en marcas de tiempo permite implementaciones activo-activo en AWS, Azure y GCP. Asegúrese siempre de la sincronización NTP.
  • Utilice grupos de servidores para el reconocimiento de zonas: asigne grupos de servidores a zonas o bastidores de disponibilidad para garantizar que los vBuckets activos y de réplica se encuentren en diferentes dominios de error.
  • Tamaño de la memoria con cuidado: el rendimiento de Couchbase está directamente relacionado con la cantidad del conjunto de trabajo que cabe en la RAM. Utilice las fórmulas de tamaño y supervise los índices de errores de caché.
  • Implemente un monitoreo integral: implemente el exportador Prometheus desde el primer día. El retraso en la replicación XDCR, la tasa de errores de caché, la profundidad de la cola del disco y el estado del nodo son sus señales críticas.
  • Automatice las copias de seguridad con cbbackupmgr: combine copias de seguridad completas e incrementales con instantáneas en la nube. Pruebe los procedimientos de restauración con regularidad.
  • Seguro con TLS y RBAC: habilite el cifrado TLS de nodo a nodo y de cliente a nodo. Utilice funciones RBAC detalladas para cada cuenta de servicio de aplicaciones.
  • Configure SDK para HA: utilice múltiples nodos de arranque, configure tiempos de espera apropiados, implemente lecturas de réplicas como respaldo y aproveche las escrituras duraderas para datos críticos.
  • Plan de recuperación ante desastres: documente y ensaye procedimientos de conmutación por error para escenarios de fallo de un solo nodo, de varios nodos y de clústeres completos. Los clústeres en espera de XDCR deben estar listos para la promoción en todo momento.

Con esta base integral, está equipado para implementar y operar el servidor Couchbase en entornos de producción de alta disponibilidad en cualquier infraestructura, desde Kubernetes administrado en AWS, Azure y GCP hasta clústeres k3s sin sistema operativo administrados por Rancher. La combinación de la arquitectura distribuida nativa de Couchbase con la orquestación Kubernetes ofrece una plataforma de base de datos que satisface las demandas de las aplicaciones modernas distribuidas globalmente.