Gerenciar alta disponibilidade

Este guia aborda como habilitar e gerenciar a alta disponibilidade para os pontos de extremidade do Lakebase. Para obter informações sobre como a alta disponibilidade funciona e como as instâncias de computação secundárias diferem das réplicas de leitura autônomas, consulte Alta disponibilidade.

Habilitar alta disponibilidade

Para habilitar a alta disponibilidade, defina o tipo de computação e a configuração de HA na interface do usuário ou configure o endpoint por meio da API EndpointGroupSpec.

Pré-requisitos

  • A escalabilidade para zero deve ser desativada. Na interface, defina Escala como zero como Desativado na gaveta de computação de edição. Por meio da API, defina no_suspension: true na especificação do endpoint (use spec.suspension como máscara de atualização).

interface do usuário

Depois de criar um projeto, clique no link de computação primário do painel do projeto para abrir a gaveta de computação de edição.

Painel do projeto mostrando a ramificação de produção com o link primário de computação

Defina o tipo de computação comoalta disponibilidade e, em seguida, escolha uma configuração em alta disponibilidade:

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

Editar gaveta de computação mostrando o tipo de computação definido como Alta disponibilidade e a lista suspensa Configuração com opções para 2, 3 ou 4 instâncias de computação no total

O Lakebase provisiona instâncias de computação secundárias em diferentes zonas de disponibilidade. Depois que todas as instâncias de computação estiverem ativas, o ponto de extremidade realizará failover automaticamente.

SDK do Python

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,
            no_suspension=True,
            group=EndpointGroupSpec(
                min=2,
                max=2,
                enable_readable_secondaries=True
            )
        )
    ),
    update_mask=FieldMask(field_mask=["spec.group", "spec.suspension"])
).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,spec.suspension" \
  --json '{
    "spec": {
      "no_suspension": true,
      "group": {
        "min": 2,
        "max": 2,
        "enable_readable_secondaries": true
      }
    }
  }'

curl

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

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

Permitir acesso a instâncias de computação somente leitura controla se as instâncias de computação secundárias atendem ao tráfego de leitura por meio da string de conexão -ro.

interface do usuário

  1. Na guia Computação , clique em Editar na computação primária.
  2. Em Alta disponibilidade, marque ou desmarque a opção Permitir acesso a instâncias de computação em modo somente leitura.
  3. Clique em Salvar.

SDK do Python

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
      }
    }
  }'

curl

# 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

Aviso

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

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

interface do usuário

  1. Na guia Computação , clique em Editar na computação primária.
  2. Em Alta disponibilidade, escolha uma nova Configuração de computação na lista suspensa (2, 3 ou 4 instâncias de computação no total).
  3. Clique em Salvar.

Observação

Para desabilitar a alta disponibilidade, defina o tipo de computação de volta como computação única. Isso remove todas as instâncias de computação secundárias e seu ponto de extremidade retorna a uma configuração de computação única.

SDK do Python

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 }
    }
  }'

curl

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

Exibir funções e status de alta disponibilidade

A guia Computação mostra cada instância de computação em sua configuração de alta disponibilidade com sua função, status e nível de acesso atuais.

Aba 'Computações' mostrando uma instância de computação primária com acesso de leitura/gravação e três instâncias secundárias de computação com acesso apenas leitura, todas ATIVAS

Coluna Valores
Função Primário, Secundário
Status Iniciando, Ativo
Access Leitura/gravação (primária), somente leitura (instância de computação secundária com acesso habilitado), Desabilitado (instância de computação secundária sem acesso de leitura)

O cabeçalho de computação primário também mostra a ID do ponto de extremidade, o intervalo de dimensionamento automático e a contagem secundária (por exemplo 8 ↔ 16 CU · 3 secondaries).

Obter cadeias de conexão

interface do usuário

Clique em Conectar no computador principal para abrir a caixa de diálogo de detalhes da conexão. O menu suspenso Computação lista as duas opções de conexão para o ponto de extremidade de alta disponibilidade.

Caixa de diálogo Detalhes da conexão mostrando o menu suspenso Computação aberto com opções RO Primário e Secundário, e a cadeia de conexão somente leitura exibida

Opção de computação string de conexão Use para
Primary (name) ● Active {endpoint-id}.database.{region}.databricks.com Todas as gravações e conexões de leitura/gravação
Secondary (name) ● Active RO {endpoint-id}-ro.database.{region}.databricks.com Redirecionar leitura para instâncias de computação secundárias

A string de conexão -ro só estará disponível quando Permitir acesso a instâncias de computação somente leitura estiver habilitado.

SDK do Python

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}'

curl

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 obter a referência da cadeia de conexão completa, consulte Connection Strings.

Recursos adicionais