# Настройка локального кластера

> Настройка локальных кластеров для тестирования и разработки

---

Индекс LLMS: [llms.txt](/ru/llms.txt)

---

Для тестирования и разработки быстрее и проще всего настроить локальный кластер. Промышленное развёртывание описано в разделе [кластеризации][clustering].

## Локальный автономный кластер {#local-standalone-cluster}

### Запуск кластера {#starting-a-cluster}

Чтобы развернуть автономный кластер etcd, выполните:

```
$ ./etcd
...
```

Если бинарный файл `etcd` отсутствует в текущем рабочем каталоге, он может находиться в `$GOPATH/bin/etcd` или `/usr/local/bin/etcd`. Укажите правильный путь при запуске.

Работающий участник etcd принимает клиентские запросы на `localhost:2379`.

### Взаимодействие с кластером {#interacting-with-the-cluster}

Используйте `etcdctl` для взаимодействия с работающим кластером:

1. Сохраните в кластере пример пары «ключ — значение»:

    ```
      $ ./etcdctl put foo bar
      OK
    ```

    Вывод OK означает, что пара успешно сохранена.

2. Получите значение ключа `foo`:

    ```
    $ ./etcdctl get foo
    bar
    ```

    Если возвращено `bar`, взаимодействие с кластером etcd работает ожидаемым образом.

## Локальный кластер из нескольких участников {#local-multi-member-cluster}

### Запуск кластера {#starting-a-cluster-1}

В корне git-репозитория etcd находится `Procfile`, упрощающий настройку локального кластера из нескольких участников. Перейдите в корень дерева исходного кода etcd и выполните следующие действия:

1. Установите `goreman` для управления приложениями на основе Procfile:

    ```
    $ go install github.com/mattn/goreman@latest
    ```

2. Запустите кластер через `goreman`, используя штатный Procfile etcd:

    ```
    $ goreman -f Procfile start
    ```

    Участники запускаются и принимают клиентские запросы соответственно на `localhost:2379`, `localhost:22379` и `localhost:32379`.

### Взаимодействие с кластером {#interacting-with-the-cluster-1}

Используйте `etcdctl` для взаимодействия с работающим кластером:

1. Выведите список участников:

    ```
    $ etcdctl --write-out=table --endpoints=localhost:2379 member list
    ```
    Список участников etcd выглядит следующим образом:

    ```
    +------------------+---------+--------+------------------------+------------------------+
    |        ID        | STATUS  |  NAME  |       PEER ADDRS       |      CLIENT ADDRS      |
    +------------------+---------+--------+------------------------+------------------------+
    | 8211f1d0f64f3269 | started | infra1 | http://127.0.0.1:2380  | http://127.0.0.1:2379  |
    | 91bc3c398fb3c146 | started | infra2 | http://127.0.0.1:22380 | http://127.0.0.1:22379 |
    | fd422379fda50e48 | started | infra3 | http://127.0.0.1:32380 | http://127.0.0.1:32379 |
    +------------------+---------+--------+------------------------+------------------------+
    ```

2. Сохраните в кластере пример пары «ключ — значение»:

    ```
    $ etcdctl put foo bar
    OK
    ```

    Вывод OK означает, что пара успешно сохранена.

### Проверка отказоустойчивости {#testing-fault-tolerance}

Чтобы проверить отказоустойчивость etcd, остановите одного участника и попытайтесь получить ключ.

1. Определите имя процесса участника, которого нужно остановить.

    Свойства кластера из нескольких участников перечислены в `Procfile`. Для примера возьмём участника с именем процесса `etcd2`.

2. Остановите участника:

    ```
    # kill etcd2
    $ goreman run stop etcd2
    ```

3. Сохраните ключ:

    ```
    $ etcdctl put key hello
    OK
    ```

4.  Получите ключ, сохранённый на предыдущем шаге:

    ```
    $ etcdctl get key
    hello
    ```

5. Получите ключ у остановленного участника:

    ```
    $ etcdctl --endpoints=localhost:22379 get key
    ```

    Команда должна вывести ошибку из-за отсутствия соединения:

    ```
    2017/06/18 23:07:35 grpc: Conn.resetTransport failed to create client transport: connection error: desc = "transport: dial tcp 127.0.0.1:22379: getsockopt: connection refused"; Reconnecting to "localhost:22379"
    Error:  grpc: timed out trying to connect
    ```
6. Перезапустите остановленного участника:

    ```
    $ goreman run restart etcd2
    ```

7. Получите ключ у перезапущенного участника:

    ```
    $ etcdctl --endpoints=localhost:22379 get key
    hello
    ```

    После перезапуска участника соединение восстанавливается, и `etcdctl` снова может успешно получить ключ. Дополнительные сведения приведены в разделе [взаимодействия с etcd][interacting].

[clustering]: /ru/docs/etcd/op-guide/clustering/
[interacting]: /ru/docs/etcd/dev-guide/interacting_v3/

---

Обратные ссылки:

- [Как получить ключи по префиксу](/ru/docs/etcd/tasks/developer/how-to-get-key-by-prefix/)
- [Как сохранить базу данных](/ru/docs/etcd/tasks/operator/how-to-save-database/)
