etcd#

Описание#

etcd — распределенное, согласованное и отказоустойчивое хранилище для пар «ключ-значение» (key-value). Используется для совместной настройки и координации планировщика распределенных систем и серверов, например, в продукте Platform V Pangolin SE.

Для управления хранилищем etcd используется утилита etcdctl.

Установка#

  1. Запустите установку etcd:

    dnf install etcd
    
  2. После окончания установки выведите в терминал текущую версию etcd:

    etcd --version
    

    Если будет выведена версия etcd, то установка завершена успешно.

Сценарии администрирования#

Важно

Команды, приведенные ниже, выполняются пользователем с административными полномочиями.

Конфигурирование#

  1. Установите etcd (подробнее — в разделе «Установка»).

  2. Создайте каталог данных для etcd:

    mkdir -p /var/lib/etcd/
    

    Затем:

    mkdir /etc/etcd
    
  3. Создайте системную группу и пользователя etcd:

    groupadd --system etcd
    useradd -s /sbin/nologin --system -g etcd etcd
    
  4. Установите пользователя etcd владельцем каталога /var/lib/etcd/:

    chown -R etcd:etcd /var/lib/etcd/
    
  5. Создайте новый файл службы systemd для etcd:

    vim /etc/systemd/system/etcd.service
    
  6. В открывшийся файл вставьте текст:

    [Unit]
    Description=etcd key-value store # Описание службы
    Documentation=<documentation> # Ссылка на документацию (замените <documentation> на фактический URL)
    After=network.target  # Указывает, что служба etcd должна запускаться после активации сети
    
    [Service]
    User=etcd # Учетная запись пользователя, от имени которого будет запущена служба etcd
    Type=notify # Тип службы: система будет уведомлена о завершении запуска службы
    Environment=ETCD_DATA_DIR=/var/lib/etcd # Переменная окружения: путь к каталогу данных etcd
    Environment=ETCD_NAME=%m # Переменная окружения: имя хоста etcd (заменяется на имя машины)
    ExecStart=/usr/local/bin/etcd # Команда для запуска etcd
    Restart=always # Политика перезапуска: служба будет перезапускаться всегда при завершении
    RestartSec=10s # Время ожидания перед перезапуском службы (10 секунд)
    LimitNOFILE=40000 # Ограничение на количество открытых файловых дескрипторов для процесса etcd
    
    [Install]
    WantedBy=multi-user.target # Указание, что служба должна быть запущена в многопользовательском режиме
    
  7. Закройте файл с сохранением изменений командой :wq.

  8. Перезагрузите сервис systemd:

    systemctl daemon-reload
    
  9. Запустите etcd:

    systemctl start etcd.service
    

    Внимание

    Если SELinux работает в принудительном режиме, выполните приведенные ниже шаги.

    Чтобы проверить режим SELinux, выполните команду sestatus и проверьте значение Current mode. Если указано значение enforcing, то режим принудительный.

    1. Сгенерируйте модуль локальной политики, чтобы разрешить доступ к каталогам данных:

      ausearch -c '(etcd)' --raw | audit2allow -M my-etcd
      
    2. Чтобы сделать этот пакет политики активным, выполните команду:

      semodule -X 300 -i my-etcd.pp
      

      Затем:

      restorecon -Rv /usr/local/bin/etcd
      
    3. Перезапустите службу etcd:

      systemctl restart etcd
      

    Правильность команд зависит от конкретной системы и ее настроек. Рекомендуется проверить работу модуля политики после его создания и активации.

  10. Проверьте статус службы и убедитесь, что она работает:

    systemctl status etcd
    

    Пример вывода:

    etcd.service - etcd key-value store
    Loaded: loaded (/etc/systemd/system/etcd.service; disabled; vendor preset: disabled)
    Active: active (running) since Thu 2019-03-21 21:05:02 EAT; 25s ago
        Docs: <documentation>
        Main PID: 1928 (etcd)
            Tasks: 9 (limit: 11510)
        Memory: 3.5M
        CGroup: /system.slice/etcd.service
                └─1928 /usr/local/bin/etcd
        Mar 22 22:38:05 host.local etcd[1928]: enabled capabilities for version 3.3
        Mar 22 22:38:07 host.local etcd[1928]: <hash> is starting a new election at term 2
        Mar 22 22:38:07 host.local etcd[1928]: <hash> became candidate at term 3
        Mar 22 22:38:07 host.local etcd[1928]: <hash> received MsgVoteResp from <hash> at term 3
        Mar 22 22:38:07 host.local etcd[1928]: <hash> became leader at term 3
        Mar 22 22:38:07 host.local etcd[1928]: raft.node: <hash> elected leader <hash> at term 3
        Mar 22 22:38:07 host.local etcd[1928]: published {Name:<hash> ClientURLs:[http://localhost:2379]} to cluster <hash>>
        Mar 22 22:38:07 host.local etcd[1928]: ready to serve client requests
        Mar 22 22:38:07 host.local systemd[1]: Started etcd key-value store.
    

    В выводе указано, что служба запущена на локальном хосте, порт 2379.

  11. В списке сетевых подключений найдите подключение по порту 2379:

    ss -tunelp | grep 2379
    

    Пример вывода:

    tcp   LISTEN 0 128 <ip-address>:<2379> 0.0.0.0:*  uid:998 ino:71982 sk:45c <->
    
  12. Выведите информацию об элементах кластера etcd:

    etcdctl member list
    

    Пример вывода:

    <hash1>: name=<hash2> peerURLs=http://localhost:2380 clientURLs=http://localhost:2379 isLeader=true
    

Проверка работоспособности#

  1. Для проверки работы etcd запишите пару «ключ-значение»:

    etcdctl --endpoints=<ip-address> put key123 "Hello World!"
    

    Где:

    • key123 — ключ;

    • "Hello World!" — значение.

    Вывод:

    Hello World!
    
  2. Прочитайте значение ключа key123:

    etcdctl --endpoints=<ip-address> get key123
    

    Вывод:

    key123
    Hello World!
    
  3. Создайте ключ /myservice/container1 со значением localhost:8080 в пространстве ключей etcd:

    etcdctl put /myservice/container1 localhost:8080
    
  4. Выведите список всех ключей с префиксом /myservice/:

    etcdctl get /myservice/ --prefix --keys-only
    

    Вывод:

    /myservice/container1
    

Дополнительная информация#

Дополнительную информацию можно получить, выполнив команду:

etcd --help