Partilhar via


Gerir alta disponibilidade

Importante

O Autoscaling do Lakebase é a versão mais recente do Lakebase, com computação autoescalável, escala até zero, ramificação e restauração instantânea. Para regiões suportadas, consulte Disponibilidade de Regiões. Se é utilizador do Lakebase Provisioned, consulte Lakebase Provisioned.

Este guia abrange a habilitação e gestão da alta disponibilidade dos seus endpoints Lakebase. Para contexto sobre como funciona a alta disponibilidade e como as instâncias de computação secundárias diferem das réplicas de leitura autónomas, veja Alta disponibilidade.

Permitir alta disponibilidade

Para permitir alta disponibilidade, defina o tipo de computação e a configuração do HA na interface ou configure o endpoint EndpointGroupSpec através da API.

Pré-requisitos

  • O escalonamento para zero deve ser desativado. Na interface, ajuste Escala para zero para Desligado na gaveta de edição de computação. Através da API, definir no_suspension: true na especificação do endpoint (usar spec.suspension como máscara de atualização).

IU

Depois de criar um projeto, clique no link principal de computação do painel do projeto para abrir a caixa de edição de computação.

Painel do projeto mostrando o ramo de produção com o seu link de computação principal

Defina o tipo de computação para Alta disponibilidade, depois escolha uma Configuração em Alta disponibilidade:

  • 2 (1 primária, 1 secundária),
  • 3 (1 primária, 2 secundárias),
  • ou 4 instâncias de computação no total (1 primária, 3 secundárias).

Editar gaveta de compute mostrando o alternador de tipo de compute definido para Alta Disponibilidade e o menu suspenso de Configuração com opções para 2, 3 ou 4 instâncias de computação totais

O Lakebase fornece instâncias de computação secundárias em diferentes zonas de disponibilidade. Uma vez que todas as instâncias de computação estejam ativas, o endpoint tem failover automático.

Python SDK

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.postgres import (
    Endpoint, EndpointSpec, EndpointType, EndpointGroupSpec, FieldMask
)

w = WorkspaceClient()

endpoint_name = "projects/my-project/branches/production/endpoints/my-endpoint"

result = w.postgres.update_endpoint(
    name=endpoint_name,
    endpoint=Endpoint(
        name=endpoint_name,
        spec=EndpointSpec(
            endpoint_type=EndpointType.ENDPOINT_TYPE_READ_WRITE,
            group=EndpointGroupSpec(
                min=2,
                max=2,
                enable_readable_secondaries=True
            )
        )
    ),
    update_mask=FieldMask(field_mask=["spec.group"])
).wait()

print(f"Group size: {result.status.group.max}")
print(f"Host: {result.status.hosts.host}")
print(f"Read-only host: {result.status.hosts.read_only_host}")

CLI

databricks postgres update-endpoint \
  projects/my-project/branches/production/endpoints/my-endpoint \
  "spec.group" \
  --json '{
    "spec": {
      "group": {
        "min": 2,
        "max": 2,
        "enable_readable_secondaries": true
      }
    }
  }'

encaracolar

curl -X PATCH "$DATABRICKS_HOST/api/2.0/postgres/projects/my-project/branches/production/endpoints/my-endpoint?update_mask=spec.group" \
  -H "Authorization: Bearer $DATABRICKS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "projects/my-project/branches/production/endpoints/my-endpoint",
    "spec": {
      "group": {
        "min": 2,
        "max": 2,
        "enable_readable_secondaries": true
      }
    }
  }' | jq

Configurar acesso apenas de leitura a instâncias secundárias de computação

Permitir o acesso a instâncias de computação apenas de leitura controla se as instâncias secundárias de computação fornecem tráfego de leitura via o -ro cadeia de ligação.

IU

  1. No separador Computes, clique em Editar o compute principal.
  2. Em Alta disponibilidade, assinale ou desmarque Permitir acesso a instâncias de computação read-only.
  3. Clique em Salvar.

Python SDK

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.postgres import (
    Endpoint, EndpointSpec, EndpointType, EndpointGroupSpec, FieldMask
)

w = WorkspaceClient()

endpoint_name = "projects/my-project/branches/production/endpoints/my-endpoint"

# Get current group size first
current = w.postgres.get_endpoint(name=endpoint_name)
current_size = current.status.group.max

w.postgres.update_endpoint(
    name=endpoint_name,
    endpoint=Endpoint(
        name=endpoint_name,
        spec=EndpointSpec(
            endpoint_type=EndpointType.ENDPOINT_TYPE_READ_WRITE,
            group=EndpointGroupSpec(
                min=current_size,
                max=current_size,
                enable_readable_secondaries=True  # set False to disable
            )
        )
    ),
    update_mask=FieldMask(field_mask=["spec.group.enable_readable_secondaries"])
).wait()

CLI

# Replace 2 with your current group size
databricks postgres update-endpoint \
  projects/my-project/branches/production/endpoints/my-endpoint \
  "spec.group.enable_readable_secondaries" \
  --json '{
    "spec": {
      "group": {
        "min": 2,
        "max": 2,
        "enable_readable_secondaries": true
      }
    }
  }'

encaracolar

# Replace 2 with your current group size
curl -X PATCH "$DATABRICKS_HOST/api/2.0/postgres/projects/my-project/branches/production/endpoints/my-endpoint?update_mask=spec.group.enable_readable_secondaries" \
  -H "Authorization: Bearer $DATABRICKS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "projects/my-project/branches/production/endpoints/my-endpoint",
    "spec": {
      "group": {
        "min": 2,
        "max": 2,
        "enable_readable_secondaries": true
      }
    }
  }' | jq

Advertência

Com apenas uma instância de cálculo secundária e acesso à leitura ativados, todo o tráfego de leitura na -ro cadeia de conexão é interrompido durante um failover até que seja adicionado um substituto. Para acesso de leitura resiliente, configure duas ou mais instâncias secundárias de computação com acesso de leitura ativado.

Alterar o número de instâncias secundárias de computação

IU

  1. No separador Computes, clique em Editar o compute principal.
  2. Em Alta Disponibilidade, escolha uma nova configuração de computação a partir do menu suspenso (2, 3 ou 4 instâncias de computação no total).
  3. Clique em Salvar.

Observação

Para desativar a alta disponibilidade, defina o tipo de computação novamente para computação única. Isto remove todas as instâncias secundárias de computação e o seu endpoint regressa a uma configuração de computação única.

Python SDK

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.postgres import (
    Endpoint, EndpointSpec, EndpointType, EndpointGroupSpec, FieldMask
)

w = WorkspaceClient()

endpoint_name = "projects/my-project/branches/production/endpoints/my-endpoint"

# Scale to 3 compute instances (1 primary + 2 secondaries)
w.postgres.update_endpoint(
    name=endpoint_name,
    endpoint=Endpoint(
        name=endpoint_name,
        spec=EndpointSpec(
            endpoint_type=EndpointType.ENDPOINT_TYPE_READ_WRITE,
            group=EndpointGroupSpec(min=3, max=3)
        )
    ),
    update_mask=FieldMask(field_mask=["spec.group.min", "spec.group.max"])
).wait()

CLI

# Scale to 3 compute instances (1 primary + 2 secondaries)
databricks postgres update-endpoint \
  projects/my-project/branches/production/endpoints/my-endpoint \
  "spec.group.min,spec.group.max" \
  --json '{
    "spec": {
      "group": { "min": 3, "max": 3 }
    }
  }'

encaracolar

curl -X PATCH "$DATABRICKS_HOST/api/2.0/postgres/projects/my-project/branches/production/endpoints/my-endpoint?update_mask=spec.group.min,spec.group.max" \
  -H "Authorization: Bearer $DATABRICKS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "projects/my-project/branches/production/endpoints/my-endpoint",
    "spec": {
      "group": { "min": 3, "max": 3 }
    }
  }' | jq

Ver estado de alta disponibilidade e funções

A aba Computes mostra todas as instâncias de computação na sua configuração de alta disponibilidade, juntamente com seus papéis atuais, estado e nível de acesso.

Separador de computação que mostra uma instância de computação primária com acesso de Leitura/Escrita e três instâncias secundárias de computação com acesso apenas de leitura, todas ATIVAS

Column Valores
Função Primário, Secundário
Situação Iniciar, Ativo
Access Leitura/Escrita (primária), Só leitura (instância secundária de computação com acesso ativado), Desabilitada (instância secundária sem acesso de leitura)

O cabeçalho primário de computação também exibe o ID do ponto final, o intervalo de dimensionamento automático e o número de instâncias secundárias (por exemplo, 8 ↔ 16 CU · 3 secondaries).

Obter cadeias de ligação

IU

Clique em Ligar no computador principal para abrir o diálogo de detalhes da ligação. O menu suspenso Compute lista ambas as opções de ligação para o seu high availability endpoint.

Dialogo de detalhes de ligação mostrando o menu suspenso Compute aberto com opções de Modo de Leitura Primária e Secundária, e a string de ligação de apenas leitura exibida

Opção de cálculo Cadeia de ligação Uso para
Primary (name) ● Active {endpoint-id}.database.{region}.databricks.com Todas as escritas e conexões de leitura/escrita
Secondary (name) ● Active RO {endpoint-id}-ro.database.{region}.databricks.com Transferência de leitura para instâncias secundárias de computação

O -ro cadeia de ligação só está disponível quando A permissão de acesso às instâncias de computação em modo apenas de leitura está ativada.

Python SDK

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

endpoint = w.postgres.get_endpoint(
    name="projects/my-project/branches/production/endpoints/my-endpoint"
)

print(f"Read/write host: {endpoint.status.hosts.host}")
print(f"Read-only host:  {endpoint.status.hosts.read_only_host}")

CLI

databricks postgres get-endpoint \
  projects/my-project/branches/production/endpoints/my-endpoint \
  -o json | jq '{rw_host: .status.hosts.host, ro_host: .status.hosts.read_only_host}'

encaracolar

curl -X GET "$DATABRICKS_HOST/api/2.0/postgres/projects/my-project/branches/production/endpoints/my-endpoint" \
  -H "Authorization: Bearer $DATABRICKS_TOKEN" \
  | jq '{rw_host: .status.hosts.host, ro_host: .status.hosts.read_only_host}'

Para a referência completa da cadeia de ligação, veja Connection strings.

Passos seguintes