Etcd

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 17:18, 24 декабря 2016.
Etcd
Etcd2-0.png
Разработчики: CoreOS, Inc
Выпущена: 2015
Постоянный выпуск: 3.0.13
Написана на: Go
Операционная система: CoreOS
Лицензия: Apache License
Веб-сайт https://coreos.com/etcd/

Etcd - высоконадёжное распределённое хранилище параметров конфигурации, задаваемых в форме ключ/значение. Код etcd написан на языке Go и распространяется под лицензией Apache. Etcd является свободным программным обеспечением и его код доступен для загрузки на репозитарии Github

Etcd позволяет организовать единое хранилище конфигурации для группы серверов, которое реплицируются на все узлы и поддерживается в синхронизированном состоянии с использованием протокола Raft.

Etcd 3

В etcd 3.0 представлена третья версия API etcd, в котором отражены пожелания пользователей и опыт крупных промышленных внедрений etcd. В частности, в новой версии API решены многие проблемы с масштабированием, благодаря новому движку хранения и полной поддержке механизма управления одновременным доступом с помощью многоверсионности (MVCC, Multi-Version Concurrency Control). Для обращения к APIv3 теперь может применяться gRPC и HTTP/2 (ранее предлагаемый JSON/HTTP транслируется через gRPC). Применение протокола gRPC, использующего protobuf, позволило в два раза увеличить скорость обработки запросов, по сравнению с применением JSON в etcd2, а HTTP/2 дал возможность мультиплексирования соединений и создания постоянных двунаправленных каналов без необходимости установки отдельного соединения на каждый запрос и без применения поллинга для проверки состояния.

Новшества Etcd 3

  • Плоское пространство бинарных ключей, в котором вместо иерархии и каталогов применяется выборка по префиксу и интервалу.
  • Средства для работы c многоверсионным хранилищем, позволяющие обращаться к прошлым версиям ключей;
  • Несколько запросов теперь могут группироваться и выполняться рамках одной операции;
  • Поддержка определения времени жизни (TTL), единого для заданного набора ключей (теперь записи могут привязываться к TTL, без сохранения TTL как атрибута записи, что позволяет обновлять лишь одно поле с TTL без необходимости обновления каждой записи);
  • Возможность определения квот для ограничения используемого в etcd размера хранилища;
  • Экспериментальная поддержка v3 Auth API.

Начало работы с etcd

Чтение и запись в etcd

Для доступа к конфигурации предоставляется простой интерфейс, основанный на использовании HTTP и JSON. Для доступа к базе можно использовать утилиту etcdctl или любой http-клиент, такой как сurl или wget (например, для запроса ключа можно использовать команду curl -L ).


Запись

$ etcdctl set /message Hello
Hello
$ curl -L -X PUT http://127.0.0.1:2379/v2/keys/message -d value="Hello"
{"action":"set","node":{"key":"/message","value":"Hello","modifiedIndex":4,"createdIndex":4}}

Чтение

 $ etcdctl get /message
Hello
$ curl -L http://127.0.0.1:2379/v2/keys/message
{"action":"get","node":{"key":"/message","value":"Hello","modifiedIndex":4,"createdIndex":4}}

Удалить по ключу

$ etcdctl rm /message
$ curl -L -X DELETE http://127.0.0.1:2379/v2/keys/message
{"action":"delete","node":{"key":"/message","modifiedIndex":19,"createdIndex":4}}

Безопасность

Передача Client-to-server по HTTPS

$ etcd --name infra0 --data-dir infra0 \
  --cert-file=/path/to/server.crt --key-file=/path/to/server.key \
  --advertise-client-urls=https://127.0.0.1:2379 --listen-client-urls=https://127.0.0.1:237
  curl --cacert /path/to/ca.crt https://127.0.0.1:2379/v2/keys/foo -XPUT -d value=bar -v

Аутентификация Client-to-server с HTTPS сертификатами

$ etcd --name infra0 --data-dir infra0 \
  --client-cert-auth --trusted-ca-file=/path/to/ca.crt --cert-file=/path/to/server.crt --key-file=/path/to/server.key \
  --advertise-client-urls https://127.0.0.1:2379 --listen-client-urls https://127.0.0.1:2379

Безопасная передача и клиентские сертификаты в кластере

DISCOVERY_URL=... # from https://discovery.etcd.io/new
# member1
$ etcd --name infra1 --data-dir infra1 \
  --peer-client-cert-auth --peer-trusted-ca-file=/path/to/ca.crt --peer-cert-file=/path/to/member1.crt --peer-key-file=/path/to/member1.key \
  --initial-advertise-peer-urls=https://10.0.1.10:2380 --listen-peer-urls=https://10.0.1.10:2380 \
  --discovery ${DISCOVERY_URL}
# member2
$ etcd --name infra2 --data-dir infra2 \
  --peer-client-cert-auth --peer-trusted-ca-file=/path/to/ca.crt --peer-cert-file=/path/to/member2.crt --peer-key-file=/path/to/member2.key \
  --initial-advertise-peer-urls=https://10.0.1.11:2380 --listen-peer-urls=https://10.0.1.11:2380 \
  --discovery ${DISCOVERY_URL}

Источники

  • Гитхаб [Электронный ресурс]: CoreOs / Дата обращения: 24.12.2016. — Режим доступа:https://github.com/coreos/etcd/