Workstation Logo
Produtos
Labs de IAAgentes OpenAIAgentes ClaudeGrok BotWorkstation CRM (WSL CRM)MarketingTodos os Produtos
Soluções IA
Estações de Trabalho IAAI SME PackagesIA PrivadaClusters GPUIA EdgeLaboratório IA EmpresarialIA por Indústria
Serviços
Modernização de plataformaEngenharia digitalFundações de dados e IAOperações autónomasConsultoria de IAAutomação DevOpsCibersegurançaDesenvolvimento de softwareConstrução de agentesConfiguração MLOps
Sobre Nós
ParceirosHistórias de Clientes
Artigos
Documentação
WSL ProxyRing PromoterWSL VaultJobshoutSysOps 24/7
Blog
Contacte-nosLogin
Workstation

Estações de trabalho de IA, software multiagente de IA, infraestrutura de GPU e soluções de agentes inteligentes para empresas modernas.

Contacte-nos

Soluções de IA

Estações de Trabalho IAAI SME PackagesIA PrivadaClusters GPUIA EdgeLaboratório IA EmpresarialIA por Indústria

Produtos

Todos os ProdutosWSL CRM e ERPMarketingAgentes OpenAIWSL ProxyRing PromoterWSL VaultJobshoutSysOps 24/7

Empresa

Sobre NósPor que WorkstationParceirosHistórias de ClientesPreçosContato

Recursos

ArtigosDocumentaçãoBlogPesquisarMapa do Site
Escritório Reino Unido
77-79 Marlowes, Hemel Hempstead HP1 1LFComo chegar: pegue a saída 20 da M25, Outer LondonN.º da empresa: 11641870Seg - Sex: 9:00 - 18:00 GMT
+44 7515 356 146
Escritório Bélgica
Workstation SRL, Rue Vanderkindere 34, 1180 Uccle, BrusselsBE 0751.518.683Seg - Sex: 9:00 - 18:00 CET
+32 492 45 67 46
Escritório Índia
#159 Sector 9, Pocket 1, DDA Flats, 110077 Dwarka, New Delhi
+91 98881 98841

© 2026 Workstation AI. Todos os direitos reservados.

PrivacidadeCookiesTermos de ServiçoMapa do site

Loading blog...

Home / Blog
DatabaseKubernetesDevOpsBackend

Alta disponibilidade Couchbase em produção: XDCR, operador Kubernetes e implantação multirregional

Enterprise Couchbase HA com XDCR, operador autônomo e implantação em várias nuvens

Balinder Walia12 de abril de 202637 min read
Introdução ao

: Por que o Couchbase para cargas de trabalho de produção de alta disponibilidade

O

Couchbase Server é um banco de dados NoSQL distribuído e multimodelo projetado para aplicações interativas que exigem desempenho consistente de baixa latência em qualquer escala. Ao contrário dos bancos de dados que incorporam recursos distribuídos posteriormente, o Couchbase foi arquitetado desde o início em torno de uma topologia ponto a ponto sem compartilhamento, onde cada nó é igual e os dados são automaticamente fragmentados no cluster usando um mecanismo de hash determinístico chamadovBuckets. Essa escolha arquitetônica elimina pontos únicos de falha na camada de dados e permite o dimensionamento horizontal sem alterações no aplicativo.

O que diferencia o Couchbase no cenário de alta disponibilidade é seuCross Data Center Replication (XDCR)— um mecanismo de replicação assíncrono integrado que transmite continuamente mutações entre clusters distribuídos geograficamente. Combinado com failover automático, reconhecimento de rack/zona e um rico conjunto de serviços integrados (dados, índice, consulta, pesquisa, análise e eventos), o Couchbase fornece uma plataforma unificada que pode servir tanto como banco de dados operacional quanto como mecanismo analítico para aplicações modernas.

Neste guia abrangente, exploraremos todos os aspectos da execução do Couchbase Server em ambientes de produção de alta disponibilidade: a arquitetura interna que torna o HA possível, configuração XDCR para implantações multirregionais, o operador autônomo Couchbase para Kubernetes, padrões de implantação específicos de nuvem para AWS EKS, Azure AKS e GCP GKE, implantações bare metal k3s com Rancher e Longhorn, estratégias de backup e restauração, consulta N1QL ajuste, reforço de segurança, monitoramento e Couchbase Mobile com Sync Gateway para implantações de borda. Ao final, você terá conhecimento prático para implantar e operar clusters Couchbase de nível de produção em qualquer infraestrutura.

Arquitetura do servidor

Couchbase: serviços, vBuckets e fragmentação automática

Compreender a arquitetura interna do Couchbase é fundamental antes da implantação para alta disponibilidade. O Couchbase usa uma arquiteturaMulti-Dimensional Scaling (MDS)onde diferentes serviços podem ser implantados de forma independente e dimensionados em nós de cluster. Isso dá aos operadores um controle refinado sobre a alocação de recursos e o isolamento de desempenho.

Os seis serviços principais

O servidor

Couchbase fornece seis serviços integrados, cada um lidando com um tipo de carga de trabalho distinto:

  • Data Service (KV)— O principal mecanismo de valor-chave construído em uma arquitetura que prioriza a memória. Ele lida com operações CRUD, gerencia a distribuição do vBucket e serve como camada de persistência. Os dados são armazenados na memória (cache gerenciado) e persistidos de forma assíncrona no disco. Este serviço deve ser executado em pelo menos um nó em cada cluster.
  • Index Service (GSI)— Mantém índices secundários globais que suportam consultas N1QL. Os índices são armazenados separadamente dos dados, permitindo escalonamento independente. Suporta modos de armazenamento de índice padrão e com otimização de memória.
  • Query Service (N1QL)— Executa consultas N1QL (SQL++ para JSON) no cluster. Sem estado por design, facilitando o dimensionamento horizontal. Coordena-se com os serviços de Dados e Índice para planejar e executar consultas.
  • Search Service (FTS)— Fornece recursos de pesquisa de texto completo alimentados pelo mecanismo de pesquisa Bleve. Suporta correspondência difusa, consultas geoespaciais, pesquisa facetada e analisadores personalizados. Os índices são particionados e replicados nos nós de Pesquisa.
  • Analytics Service (CBAS)— Executa consultas analíticas complexas usando um mecanismo de processamento paralelo baseado em Apache Asterix. Opera em sua própria cópia dos dados, garantindo que as cargas de trabalho analíticas nunca afetem a latência operacional.
  • Eventing Service— Executa funções JavaScript do lado do servidor em resposta a mutações de dados. Permite enriquecimento de dados em tempo real, transformações, exclusões em cascata e gatilhos de integração sem infraestrutura externa.
Arquitetura e arquitetura de clusterCouchbase Distribuição de serviçosClusterCouchbase (failover automático habilitado, detecção de 3 segundos)Nó 1 (10.0.1.10)Serviço de dados(KV)vBuckets 0-341 | 256 MB de cacheServiço de índice(GSI)Serviço de consulta(N1QL)Mapa vBucket(ativo)0-341 ativo | 342-682 réplicaPersistência automática em disco (assíncrono)Nó 2 (10.0.1.11)Serviço de dados(KV)vBuckets 342-682 | 256 MB de cacheServiço de pesquisa(FTS)Serviço analítico(CBAS)Mapa vBucket(ativo)342-682 ativo | 683-1023 réplicaFluxo DCPpara AnalyticsNó 3 (10.0.1.12)Serviço de dados(KV)vBuckets 683-1023 | 256 MB de cacheServiço de eventosServiço de consulta(N1QL)Mapa vBucket(ativo)683-1023 ativo | 0-341 réplicaConsumidor DCP de eventosGerenciador de failover automáticoMonitoramento de batimentos cardíacos| Detecção 3s | Promoção vBucket | Máximo de 3 failovers sequenciaisDados(KV)Índice/ConsultaPesquisa/Análise/EventosReplicação intra-clusterBatimento cardíacoDistribuição vBucket

e fragmentação automática

Couchbase distribui dados em todo o cluster usando1024 vBuckets(buckets virtuais). Cada documento é mapeado para um vBucket usando um hash CRC32 do módulo de chave do documento 1024. O mapa de cluster – mantido por cada nó e armazenado em cache por cada cliente SDK – mapeia cada vBucket para um nó específico. Esse mapeamento determinístico significa que os clientes sempre sabem exatamente qual nó contém qualquer documento, permitindo leituras e gravações de salto único com latência inferior a um milissegundo.

Quando nós são adicionados ou removidos, o Couchbase redistribui vBuckets automaticamente por meio de um processo chamadorebalance. Durante o rebalanceamento, o cluster move vBuckets entre nós enquanto permanece totalmente operacional. O rebalanceamento é cuidadosamente orquestrado para manter sempre o número configurado de réplicas, e os clientes são redirecionados perfeitamente para os novos locais do vBucket por meio de atualizações de mapas de cluster.

Replicação intra-cluster e failover automático

Cada vBucket possui uma cópiaativae até três cópiasréplicadistribuídas em diferentes nós. Quando um cliente grava um documento, a gravação vai para o vBucket ativo no nó responsável. O Data Service então replica a mutação para replicar vBuckets em outros nós por meio do fluxo internoDCP (Database Change Protocol). Por padrão, o Couchbase configura uma réplica, mas para implantações de alta disponibilidade de produção, são recomendadas duas 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

Failover automáticoé o mecanismo do Couchbase para detecção e recuperação automática de falhas de nós. Quando um nó deixa de responder, o orquestrador de cluster aguarda um tempo limite configurável (mínimo de 5 segundos, recomendado 30 segundos para produção) e, em seguida, promove os vBuckets de réplica nos nós sobreviventes para o status ativo. Isso acontece sem qualquer intervenção do lado do aplicativo – os clientes SDK recebem um mapa de cluster atualizado e roteiam imediatamente as solicitações para os novos vBuckets ativos.

# 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 principais de failover automático

:

  • tempo limite de failover automático— Segundos de espera antes de acionar o failover. Valores mais baixos reduzem o tempo de inatividade, mas aumentam o risco de falsos positivos. 30 segundos é a configuração de produção recomendada.
  • max-failovers— Número máximo de failovers automáticos sequenciais antes de exigir intervenção manual. Defina como 3 para um cluster de 5 nós (para manter o quorum).
  • habilitar failover de grupos de servidores— Permite failover de um grupo inteiro de servidores (rack/zona), fundamental para implantações com reconhecimento de zona.
  • problemas de failover em disco de dados— Aciona failover quando o Data Service detecta erros de E/S de disco persistente.

XDCR: replicação entre data centers

XDCR é a principal tecnologia de replicação multirregional da Couchbase. Ao contrário da replicação em nível de banco de dados encontrada em sistemas RDBMS tradicionais, o XDCR opera no nível do buckete transmite mutações de documentos individuais entre clusters Couchbase independentes. Cada cluster permanece totalmente autônomo – ele pode aceitar leituras e gravações de forma independente, tornando o XDCR ideal para implantações multirregionais ativas-ativas, onde os usuários precisam de acesso de baixa latência em qualquer região geográfica.

Unidirecional vs Bidirecional XDCR

XDCR unidirecionalreplica mutações de um cluster de origem para um cluster de destino em uma direção. Isso é adequado para cenários de recuperação de desastres, leitura de réplicas em regiões remotas ou alimentação de dados de um cluster operacional para um cluster analítico.

XDCR bidirecionalcria links de replicação em ambas as direções entre dois clusters, permitindo implantações ativas-ativas onde ambos os clusters aceitam gravações. Esta é a configuração mais poderosa, mas requer um planejamento cuidadoso da resolução de conflitos.

Replicação bidirecional multirregionalXDCREUA-LESTE (AWS EKS)Cluster: cb-us-east5 nós | Dados+Índice+ConsultaBalde: aplicativoBalde: usuáriosResolução de conflitos: LWW (carimbo de data e hora)XDCR: Compressão LIGADA | TLS 1.3Gravações: ~15 mil operações/segEU-OESTE (Azure AKS)Cluster: cb-eu-west5 nós | Dados+Índice+ConsultaBalde: aplicativoBalde: usuáriosResolução de conflitos: LWW (carimbo de data e hora)XDCR: Compressão LIGADA | TLS 1.3Gravações: ~12 mil operações/segAP-SUL (GCP GKE)Cluster: cb-ap-sul3 nós | Dados+Índice+ConsultaBalde: aplicativoBalde: usuáriosResolução de conflitos: LWW (carimbo de data e hora)XDCR: Compressão LIGADA | TLS 1.3Gravações: ~8k operações/segXDCRXDCRXDCR (bidirecional)Estratégias de resolução de conflitosLWW (última gravação vence por carimbo de data e hora) | Número de sequência | Resolução de conflitos personalizada por meio de funções de mesclagem (empresa)XDCR AvançadoXDCR reversoLink entre regiõesAWSAzureGCP

Configurando a replicação XDCR

A configuração do XDCR envolve a criação de uma referência de cluster remoto e a definição de links de replicação no nível do bucket. Abaixo estão os comandos CLI e chamadas REST API para uma configuração bidirecional 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
Estratégias de resolução de conflitos

No XDCR bidirecional, o mesmo documento pode ser modificado simultaneamente em clusters diferentes, criando conflitos. Couchbase oferece múltiplas estratégias de resolução de conflitos:

  • Baseado em carimbo de data/hora (LWW — Última gravação vence)— A mutação com o carimbo de data/hora mais recente vence. Este é o padrão e funciona bem para a maioria dos casos de uso. Requer sincronização NTP em todos os clusters (inclinação de 5 segundos). Definido no momento da criação do bucket e não pode ser alterado posteriormente.
  • baseado em número de sequência— Usa o número de sequência interno (ID de revisão) para determinar o vencedor. A mutação com maior contagem de revisões vence. Útil quando a sincronização do carimbo de data/hora não é confiável.
  • Resolução personalizada de conflitos (empresa)— Couchbase Enterprise Edition oferece suporte a funções de mesclagem personalizadas que executam o JavaScript no lado do servidor para resolver conflitos com lógica específica do aplicativo. Isso permite cenários como mesclar itens do carrinho de compras de diferentes regiões ou aplicar regras de resolução de conflitos específicas de domínio.
# 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
Filtragem XDCR

O

XDCR suporta filtragem para que você possa replicar apenas um subconjunto de documentos. Os filtros usam expressões regulares em chaves de documentos e também podem filtrar com base na expiração ou exclusão do 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'"
Operador autônomo

Couchbase para Kubernetes

O Operador Autônomo Couchbase(CAO)é um operador Kubernetes de nível empresarial que automatiza a implantação, o gerenciamento, o dimensionamento e a recuperação de clusters de servidores Couchbase. Ao contrário das implantações simples de StatefulSet, o Operador Autônomo entende a topologia interna do Couchbase – ele gerencia operações de rebalanceamento, coordena atualizações contínuas, lida com reconhecimento de grupo de servidores e integra-se com primitivos de agendamento Kubernetes para garantir o posicionamento ideal de pods Couchbase.

Operador autônomoCouchbase em KubernetesOperador AutônomoCouchbaseRelógios CouchbaseCluster CRD | ReconciliaCouchbaseCluster CRDDeclaração de estado desejadoTLS SegredosRotação automática via cert-managerGrupo de servidores: zona-a (rack-1)StatefulSet: cb-prod-data-zacb-prod-0000Dados+ Índice4 CPU | 16GiPVC: 100Gi gp3cb-prod-0001Consulta + Pesquisa4 CPU | 8GiPVC: 50Gi gp3PVC (EBS gp3)ClusterIP SvcAntiafinidade: apenas nós da zona AGrupo de servidores: zona-b (rack-2)StatefulSet: cb-prod-data-zbcb-prod-0002Dados+ Índice4 CPU | 16GiPVC: 100Gi gp3cb-prod-0003Consulta + Pesquisa4 CPU | 8GiPVC: 50Gi gp3PVC (EBS gp3)ClusterIP SvcAntiafinidade: apenas nós da zona bGrupo de servidores: zona-c (rack-3)StatefulSet: cb-prod-data-zccb-prod-0004Dados + Análise8 CPU | 32GiPVC: 200Gi gp3cb-prod-0005Evento2 CPU | 8GiPVC: 50Gi gp3PVC (EBS gp3)ClusterIP SvcAntiafinidade: apenas nós da zona cServiços expostosNodePort 8091 | SDK11210 | N1QL8093Controlador de admissãovalida CRD | Webhook TLSControlador de backupcbbackupmgr | S3/GCS/AzureOperadorDados/Índice/ConsultaAnálise/EventosArmazenamentoPVCAgendamento de podSegurança/Validação

CouchbaseCluster CRD Especificação

O CouchbaseCluster CRD é a configuração central que declara o estado desejado de sua implantação Couchbase. O Operador Autônomo reconcilia isso em recursos StatefulSets, Serviços, PVCs, Secrets e RBAC. Abaixo está uma CRD pronta para produção:

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
Instalação do operador

via 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

e reconhecimento de rack/zona

Os grupos de servidores

são o mecanismo do Couchbase para garantir que os vBuckets ativos e suas réplicas sejam colocados em diferentes domínios de falha (zonas de disponibilidade, racks ou data centers). Quando grupos de servidores são configurados, o Couchbase garante que nenhum par ativo e de réplica para o mesmo vBucket resida no mesmo grupo de servidores. Isto significa que uma falha completa da zona não resultará em perda de dados.

O Operador Autônomo mapeia grupos de servidores para rótulos de topologia de nó Kubernetes, agendando pods automaticamente nas zonas corretas. Combinado com regras de antiafinidade de pod, isso garante que os pods Couchbase sejam distribuídos pela infraestrutura física para máxima resiliência.

AWS Implantação EKS

Amazon EKS requer configuração específica para desempenho ideal do Couchbase. As principais considerações são armazenamento (EBS gp3 para taxa de transferência), tipos de instância (r6i/r7i com otimização de memória para nós de dados) e rede (VPC CNI para rede em nível 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 Implantação AKS

O

Azure AKS usa Premium SSD v2 ou Ultra Disk para as demandas de E/S do Couchbase e Azure Private Link para conectividade XDCR segura entre regiões.

# 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)
Implantação

GCP GKE

Google Kubernetes Engine usa discos permanentes SSD e identidade de carga de trabalho para acesso seguro ao Google Cloud Storage para backups.

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

Bare Metal k3s/Rancher com Longhorn

Para organizações que precisam de controle total da infraestrutura sem dependência de fornecedor de nuvem, o k3s bare metal com gerenciamento Rancher e armazenamento distribuído Longhorn fornece uma base excelente para Couchbase HA. Essa arquitetura é popular em setores regulamentados, cenários de computação de ponta e ambientes sensíveis a custos.

k3s / Rancher Bare Metal Couchbase ImplantaçãoConsole de gerenciamento de fazendeiroNó 1: Servidor k3s (rack-1)Couchbase Dados + Índicecb-prod-0000 | 8CPU, 64GBvBuckets 0-341 ativos | Porta SDK 11210ConsultaCouchbase (N1QL)cb-prod-0001 | Porta 8093MetalLB VIPPrometheusVolume Longhorn/dev/sdb NVMe | 3 réplicas entre nósAntiafinidade: sem pods Couchbase colocadosNó 2: Servidor k3s (rack-2)Couchbase Dados + Índicecb-prod-0002 | 8CPU, 64GBvBuckets 342-682 ativos | Porta SDK 11210PesquisaCouchbase (FTS)cb-prod-0003 | Porta 8094MetalLB VIPGrafanaVolume Longhorn/dev/sdb NVMe | 3 réplicas entre nósAntiafinidade: sem pods Couchbase colocadosNó 3 do: agente k3s (rack-3)Couchbase Dados + Análisecb-prod-0004 | 16CPU, 128GBvBuckets 683-1023 ativos | CBASCouchbase Eventoscb-prod-0005 | Consumidor DCPMetalLB VIPOperadorCAOVolume Longhorn/dev/sdb NVMe | 3 réplicas entre nósAntiafinidade: sem pods Couchbase colocadosBalanceador de carga MetalLBVIP: 192.168.1.200-210 | SDK + Console Web + XDCRBackup: cbbackupmgr → MinIO S3Diário completo + incremental por hora | MinIO em NVMededicadoDados/ÍndiceConsulta/PesquisaAnálise/Eventos/MetalLBChifre LongoReplicação DCPGerenciamento de rancheiro
# 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 - <
Backup e restauração

com cbbackupmgr

Couchbase fornececbbackupmgr, uma ferramenta de backup empresarial que oferece suporte a backups completos, incrementais e diferenciais com compactação e criptografia opcionais. Para implantações de alta disponibilidade de produção, uma estratégia de backup robusta combina backups de nível Couchbase com recursos de snapshot na nuvem.

Configuração de backup

# 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 backup 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 (gerenciado pelo operador)

O Operador Autônomo fornece CRDs para gerenciamento automatizado de backup:

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 de desempenho de consulta

N1QL

N1QL (SQL++ para JSON) é a linguagem de consulta do Couchbase. Ajustar o desempenho do N1QL requer a compreensão do planejador de consultas, do design do índice e das otimizações do lado do servidor.

Estratégias de índice

: GSI e 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;
Dicas de otimização de consulta

-- 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};
Gerenciamento de memória e configuração de bucket

A arquitetura de memória inicial do

Couchbase significa que a alocação de RAM impacta diretamente o desempenho. Cada serviço tem sua própria cota de memória e os buckets compartilham a cota do Data Service. O dimensionamento adequado evita remoções de cache que degradam a latência.

# 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
Criptografia

TLS e RBAC

A proteção da Couchbase na produção requer criptografia de dados em trânsito (TLS), controle de acesso refinado baseado em função (RBAC) e registro de auditoria.

# 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 com gerenciador 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
Monitoramento

com Exportador Prometheus

Couchbase expõe métricas ricas por meio de seu REST API. Ocouchbase-exporteros traduz no formato Prometheus para monitoramento abrangente.

# 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
Principais métricas Couchbase do

para monitorar o

  • cb_bucket_ops_per_sec— Total de operações por segundo por bucket. Defina como base o seu rendimento normal e alerte sobre anomalias.
  • cb_bucket_mem_used_bytes— Uso de memória do bucket. Alerta ao se aproximar da cota de RAM para evitar despejos.
  • cb_bucket_cache_miss_ratio— Proporção de solicitações que perdem o cache e requerem busca de disco. Deve ficar abaixo de 2% para desempenho ideal.
  • cb_bucket_disk_queue_items— Profundidade da fila de gravação em disco. Uma fila crescente indica que a E/S do disco não consegue acompanhar a taxa de transferência de gravação.
  • cb_xdcr_changes_left— Número de mutações pendentes de replicação XDCR. Indica atraso de replicação entre regiões.
  • cb_xdcr_docs_write— Documentos replicados por segundo através de XDCR.
  • cb_node_cpu_utilization_percent— Uso de CPU por nó. Couchbase usa CPU para compactação e indexação.
  • cb_bucket_vbucket_active_num— Número de vBuckets ativos por nó. Deve ser aproximadamente uniforme entre nós de dados.
  • cb_index_num_docs_pending— Documentos com atualização de índice pendente. Indica atraso na construção do índice.
  • cb_n1ql_requests_per_sec— Taxa de transferência de consulta N1QL. Combinado com a latência média, identifica problemas de desempenho de consulta.
Regras de alerta

Prometheus

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 }}"
Configuração de cadeia de conexão do SDK

para HA

Os SDKs

Couchbase reconhecem a topologia – eles mantêm um mapa de cluster interno e roteiam operações diretamente para o nó correto. A configuração adequada do SDK é crítica para HA, garantindo detecção rápida de failover e novas tentativas automáticas em erros transitórios.

// 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 Serviço DNS para conexão 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 Gateway móvel e de sincronização para implantações de borda

Couchbase Mobile estende o ecossistema Couchbase para dispositivos de ponta e aplicativos móveis.Couchbase Liteé executado integrado em dispositivos iOS, Android e IoT, enquantoSync Gatewayatua como middleware de sincronização entre o Couchbase Lite e o 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
Planejamento e dimensionamento de capacidade

O planejamento adequado da capacidade é essencial para o desempenho e otimização de custos da Couchbase. A tabela a seguir fornece diretrizes de dimensionamento com base no nível de carga de trabalho:

Nível de carga de trabalhoNós de dadosÍndice/ConsultaRAMArmazenamentoTaxa de transferênciaDesenvolvimentoco-localizadoSSDSSD
por nó
1 (todos os serviços)4GB20 GB<1k operações/s
Pequena Produção3 Dados2 Consulta + Índice16GBSSD de 100GB10 mil operações/s
Média Produção5 Dados3 Consulta + Índice32GB500 GB50 mil operações/s
Grande Produção7-10 Dados4+ Consulta + Índice64GB1TB NVMe200k+ operações/s
Empresarial / Global10+ Dados (multirregião)6+ Consulta + Índice128GB2+TB NVMe500k+ operações/s
Fórmula de dimensionamento

# 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
Procedimentos de recuperação de desastres e failover

Um plano abrangente de recuperação de desastres garante a continuidade dos negócios quando as falhas de infraestrutura excedem o escopo do failover automático.

Falha de nó único

(automática)

# 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
Falha completa do cluster

(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

Failover e Recuperação Graciosos

# 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

Helm para implantação completa de produção

Abaixo está um arquivo de valores Helm abrangente para implantação do Couchbase com o Operador Autônomo em um ambiente de produção:

# 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
Conclusão

A arquitetura do servidor

Couchbase — construída em torno de fragmentação baseada em vBucket, acesso a dados com prioridade à memória e serviços integrados de vários modelos — fornece uma base poderosa e exclusiva para implantações de produção de alta disponibilidade. A combinação de replicação intracluster com failover automático garante que as falhas de nó único sejam tratadas de forma transparente, enquanto o XDCR estende essa resiliência através de regiões geográficas para aplicações globais.

O Operador Autônomo Couchbase para Kubernetes transforma o que seriam operações manuais complexas em implantações declarativas e de autocorreção. Os grupos de servidores fornecem reconhecimento de rack/zona, o operador gerencia operações de rebalanceamento durante eventos de escalonamento e os CRDs de backup integrados automatizam a preparação para recuperação de desastres.

Principais conclusões deste guia:

  • Aproveite o escalonamento multidimensional— Serviços separados de dados, índices, consultas, pesquisas, análises e eventos em pools de nós dedicados para escalonamento independente e isolamento de recursos.
  • Configure o XDCR para resiliência multirregional— O XDCR bidirecional com resolução de conflitos baseada em carimbo de data/hora permite implantações ativas-ativas em AWS, Azure e GCP. Sempre garanta a sincronização NTP.
  • Use grupos de servidores para reconhecimento de zona— Mapeie grupos de servidores para zonas de disponibilidade ou racks para garantir que vBuckets ativos e de réplica estejam em domínios de falha diferentes.
  • Dimensione a memória com cuidado— O desempenho do Couchbase está diretamente ligado à quantidade do conjunto de trabalho que cabe na RAM. Use as fórmulas de dimensionamento e monitore as taxas de perda de cache.
  • Implemente monitoramento abrangente— Implante o exportador Prometheus desde o primeiro dia. Atraso na replicação XDCR, taxa de perda de cache, profundidade da fila de disco e integridade do nó são seus sinais críticos.
  • Automatize backups com cbbackupmgr— Combine backups completos e incrementais com snapshots de nuvem. Teste os procedimentos de restauração regularmente.
  • Seguro com TLS e RBAC— Habilite a criptografia TLS nó a nó e cliente a nó. Use funções RBAC refinadas para cada conta de serviço de aplicativo.
  • Configure SDKs para HA— Use vários nós de inicialização, configure tempos limite apropriados, implemente leituras de réplica como substituto e aproveite gravações duráveis para dados críticos.
  • Planeje recuperação de desastres— Documente e ensaie procedimentos de failover para cenários de falha de cluster completo, de nó único e de vários nós. Os clusters em espera do XDCR devem estar sempre prontos para promoção.

Com essa base abrangente, você está equipado para implantar e operar o servidor Couchbase em ambientes de produção de alta disponibilidade em qualquer infraestrutura, desde Kubernetes gerenciado em AWS, Azure e GCP até clusters bare metal k3s gerenciados pelo Rancher. A combinação da arquitetura distribuída nativa do Couchbase com a orquestração Kubernetes oferece uma plataforma de banco de dados que atende às demandas de aplicativos modernos distribuídos globalmente.