---
name: azion-adicione-uma-origem-de-backup-a-um-connector
description: >-
  Mantenha uma origem de reserva fora do tráfego diário e deixe que ela receba requisições só quando todos os endereços primários do connector falham.
---

# Adicione uma origem de backup a um connector

Você adiciona uma origem de reserva a um [connector](/pt-br/documentacao/plataforma/connectors/) como um endereço *Backup* de [Load Balancer](/pt-br/documentacao/plataforma/connectors/#load-balancer), pelo Azion Console, pela API ou pela Azion CLI. Para distribuir o tráfego ao vivo entre várias origens com pesos, consulte [Balanceie o tráfego entre múltiplas origens](/pt-br/documentacao/guias/performance-e-confiabilidade/disponibilidade/configure-multiplas-origens/).

Um endereço *Backup* fica em espera, fora do tráfego diário, e só recebe requisições quando todos os endereços *Primary* falham. Os endereços *Primary* sempre têm preferência, então a origem de reserva não recebe tráfego enquanto a primária responde. Load Balancer não tem health check: nenhuma sonda e nenhum intervalo, então nada testa um endereço entre as requisições.

```mermaid
%%{init: {"layout": "dagre", "themeVariables": {"fontSize": "13px"}, "flowchart": {"nodeSpacing": 12, "rankSpacing": 12, "padding": 6, "wrappingWidth": 70, "minNodeWidth": 40, "useMaxWidth": true}}}%%
flowchart TD
  Rule["Uma regra Set Connector nomeia o connector"] --> Role{"Algum endereço Primary responde?"}
  Role -->|"sim"| Primary["O endereço Primary recebe a requisição"]
  Role -->|"não: todos os endereços Primary falham"| Backup["O endereço Backup recebe a requisição"]
  Primary --> Client["O cliente recebe a resposta"]
  Backup --> Client
```

1. O comportamento *Set Connector* de uma regra envia a requisição ao connector, que tem Load Balancer ativado.
2. Enquanto um endereço *Primary* responde, ele recebe todas as requisições, e o endereço *Backup* não recebe nenhuma.
3. Quando todos os endereços *Primary* falham, o endereço *Backup* recebe a requisição.
4. O cliente recebe a resposta do endereço que a atendeu, sem nenhuma mudança de DNS.

---

## Pré-requisitos

- Um connector do tipo `http` que alcança a sua origem primária e uma regra cujo comportamento *Set Connector* envia requisições a ele. Para criar os dois, consulte [Primeiros passos com Connectors](/pt-br/documentacao/plataforma/connectors/primeiros-passos/).
- Uma origem de reserva que guarda o mesmo conteúdo da primária e está configurada da mesma forma para a aplicação.
- Acesso ao Azion Console, para o procedimento pelo Console. Consulte [Como acessar o Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/).
- Um [personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/) e o ID do connector, para o procedimento pela API.
- A [Azion CLI](/pt-br/documentacao/devtools/cli/) instalada e autorizada, e o ID do connector, para o procedimento pela CLI.

Os exemplos usam `primary.example.com` para a origem primária, `standby.example.com` para a origem de reserva e `www.example.com` para o domínio. Substitua-os pelos seus.

---

## Adicione a origem de reserva como endereço de backup

Um connector guarda um endereço até que Load Balancer seja ativado, e até 15 endereços com ele ativado. O método é *Round Robin* ou *Least Connections*, porque *IP Hash* recusa um endereço *Backup* com `28005`. Todo endereço é *Primary*, a menos que você defina outra função.

**Max Retries** define as novas tentativas quando uma conexão com a origem falha, de 0 a 20. **Connection Timeout** limita a espera por essa conexão, de 1 a 300 segundos, e **Read/Write Timeout** limita a espera por dados em uma conexão aberta, de 1 a 600 segundos. O cliente espera por todas as novas tentativas antes de receber uma resposta. O Console preenche `3`, `30` e `60`. A API e a CLI dão a uma chave que o corpo deixa de fora os valores `0`, `60` e `120`, então um connector sem `max_retries` não tenta de novo uma conexão que falhou. Os exemplos definem os valores do Console em todas as interfaces.

**Console**

Para adicionar o endereço de backup pelo Azion Console:

1. **Abra o connector**

   Acesse [Azion Console](https://console.azion.com/) > **Connectors** e selecione o connector da sua origem primária.

2. **Ative Load Balancer**

   Em **Modules**, ative **Load Balancer**. O formulário preenche **Max Retries**, **Connection Timeout** e **Read/Write Timeout**.

3. **Selecione o método**

   Em **Load Balancer Configuration**, defina **Method** como *Round Robin*.

4. **Defina as novas tentativas e os timeouts**

   Insira `3` em **Max Retries**, `30` em **Connection Timeout** e `60` em **Read/Write Timeout**.

5. **Mantenha a origem primária como primária**

   Em **Address Management**, em `primary.example.com`, defina **Server Role** como *Primary*.

6. **Selecione Add Address**

7. **Insira a origem de reserva**

   No novo **Address**, insira `standby.example.com`, sem protocolo nem porta.

8. **Defina a função de backup**

   Defina **Server Role** como *Backup* e mantenha **Active** ativado.

9. **Selecione Save**

O Console mostra `Connector has been updated`.

**API**

Para adicionar o endereço de backup pela API, envie uma requisição `PATCH` ao connector. `addresses` substitui a lista de endereços, então o corpo carrega os dois:

```bash
curl --request PATCH \
  --url https://api.azion.com/v4/workspace/connectors/<connector-id> \
  --header 'Accept: application/json' \
  --header 'Authorization: Token <personal-token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "attributes": {
    "addresses": [
      {
        "address": "primary.example.com",
        "modules": { "load_balancer": { "server_role": "primary", "weight": 1 } }
      },
      {
        "address": "standby.example.com",
        "modules": { "load_balancer": { "server_role": "backup", "weight": 1 } }
      }
    ],
    "modules": {
      "load_balancer": {
        "enabled": true,
        "config": { "method": "round_robin", "max_retries": 3, "connection_timeout": 30, "read_write_timeout": 60 }
      }
    }
  }
}'
```

A API responde `202` com `"state": "pending"`. Um `PATCH` mantém as opções de conexão que o corpo deixa de fora.

**CLI**

O comando de atualização recebe o connector inteiro de um arquivo, com todos os campos que o connector mantém. Para ler as configurações atuais do connector:

```bash
azion describe connector --connector-id <connector-id> --format json
```

O comando imprime o objeto completo. Em um connector do tipo `http`, `attributes` contém `addresses`, `connection_options` e `modules`.

Salve o connector como `connector.json`, com a origem de reserva adicionada e Load Balancer ativado. Substitua `name` e `connection_options` pelos valores que o comando imprimiu:

```json
{
  "name": "<connector-name>",
  "active": true,
  "type": "http",
  "attributes": {
    "addresses": [
      {
        "address": "primary.example.com",
        "modules": { "load_balancer": { "server_role": "primary", "weight": 1 } }
      },
      {
        "address": "standby.example.com",
        "modules": { "load_balancer": { "server_role": "backup", "weight": 1 } }
      }
    ],
    "connection_options": {
      "dns_resolution": "both",
      "transport_policy": "preserve",
      "host": "${host}"
    },
    "modules": {
      "load_balancer": {
        "enabled": true,
        "config": { "method": "round_robin", "max_retries": 3, "connection_timeout": 30, "read_write_timeout": 60 }
      }
    }
  }
}
```

Atualize o connector a partir do arquivo. O comando precisa de `--type`, mesmo que o arquivo nomeie o tipo:

```bash
azion update connector --connector-id <connector-id> --type http --file connector.json
```

A saída confirma a atualização:

```text
Updated Connector with ID <connector-id>
```

O connector guarda a origem primária e a origem de reserva, e a regra que o nomeia não precisa de alteração. Uma alteração de connector chega à infraestrutura distribuída da Azion em vários minutos, e os data centers a aplicam em momentos diferentes.

Os dois endereços recebem do connector o mesmo header `Host`, o mesmo prefixo de caminho e o mesmo protocolo. Quando a origem de reserva responde com um nome diferente do da primária, defina **Host** como `${host}`, que envia o host que o cliente requisitou. Para as opções de conexão, consulte [Configurações de connector](/pt-br/documentacao/plataforma/connectors/configuracoes/#opcoes-de-conexao).

---

## Confirme que a origem de reserva assume

A verificação tira a origem primária de serviço, então execute-a em uma janela de manutenção. Ela lê **Upstream Addr** na fonte de dados *HTTP Requests* de Real-Time Events, que contém o endereço IP e a porta do servidor ao qual a requisição foi enviada.

Para confirmar o failover:

1. **Pare a origem primária**

   Pare o servidor web em `primary.example.com` ou bloqueie as conexões da Azion no firewall dela.

2. **Envie requisições pelo seu domínio**

   ```bash
   curl -s -o /dev/null -w '%{http_code}\n' https://www.example.com/
   ```

   O comando imprime o código de status de cada resposta. Envie-o várias vezes.

3. **Abra Real-Time Events**

   Acesse [Azion Console](https://console.azion.com/) > **Products menu** > **Observe** > **Real-Time Events** e selecione *HTTP Requests* em **Data Sources**.

4. **Filtre pelo seu domínio**

   Em **Filter by**, insira `host='www.example.com'` e selecione **Refresh**.

5. **Leia o endereço upstream**

   Os registros mais recentes trazem o endereço IP de `standby.example.com` em **Upstream Addr**.

6. **Inicie a origem primária de novo**

A origem de reserva atende as requisições enquanto a primária está fora do ar. Quando a primária volta a responder, ela retoma as requisições, porque os endereços *Primary* sempre têm preferência sobre os endereços *Backup*. Um data center que ainda não recebeu uma alteração pode responder como antes, então repita a busca até que os registros concordem. Para a sintaxe do filtro, consulte [Filtrar eventos](/pt-br/documentacao/guias/plataforma/observabilidade/adicionar-filtros-events/).

---

## Próximos passos

- [Métodos de balanceamento](/pt-br/documentacao/plataforma/connectors/load-balancer/metodos-de-balanceamento.md#funcao-do-servidor): Como a função do servidor, as novas tentativas e os timeouts decidem para onde vai uma requisição.
- [Mostre a sua própria página quando nenhuma origem responde](/pt-br/documentacao/guias/performance-e-confiabilidade/disponibilidade/mostrar-a-sua-propria-pagina-quando-nenhuma-origem-responde.md): Substitua o erro da Azion pela sua página quando nem a primária nem a origem de reserva respondem.
- [Manter uma aplicação no ar quando uma origem falha](/pt-br/documentacao/casos-de-uso/melhorar-performance-e-confiabilidade/manter-uma-aplicacao-no-ar-quando-uma-origem-falha.md): Uma origem primária e uma de reserva em um pool, com uma página de erro quando as duas falham.
- [Rotear usuários para origens regionais](/pt-br/documentacao/casos-de-uso/melhorar-performance-e-confiabilidade/rotear-usuarios-para-origens-regionais.md): Uma região padrão com um backup em outra região, só onde as regras de residência permitem.
