- name: use_antietcd
  type: bool
  default: false
  info: |
    Enable experimental built-in etcd replacement (clustered key-value database):
    [antietcd](https://git.yourcmc.ru/vitalif/antietcd/).

    When set to true, monitor runs internal antietcd automatically if it finds
    a network interface with an IP address matching one of addresses in the
    `etcd_address` configuration option (in `/etc/vitastor/vitastor.conf` or in
    the monitor command line). If there are multiple matching addresses, it also
    checks `antietcd_port` and antietcd is started for address with matching port.
    By default, antietcd accepts connection on the selected IP address, but it
    can also be overridden manually in the `antietcd_ip` option.

    When antietcd is started, monitor stores cluster metadata itself and exposes
    a etcd-compatible REST API. On disk, these metadata are stored in
    `/var/lib/vitastor/mon_2379.json.gz` (can be overridden in antietcd_data_file
    or antietcd_data_dir options). All other antietcd parameters
    (see [here](https://git.yourcmc.ru/vitalif/antietcd/)) except node_id,
    cluster, cluster_key, persist_filter, stale_read can also be set in
    Vitastor configuration with `antietcd_` prefix.

    You can dump/load data to or from antietcd using Antietcd `anticli` tool:

    ```
    npm exec anticli -e http://etcd:2379/v3 get --prefix '' --no-temp > dump.json
    npm exec anticli -e http://antietcd:2379/v3 load < dump.json
    ```
  info_ru: |
    Включить экспериментальный встроенный заменитель etcd (кластерную БД ключ-значение):
    [antietcd](https://git.yourcmc.ru/vitalif/antietcd/).

    Если параметр установлен в true, монитор запускает antietcd автоматически,
    если обнаруживает сетевой интерфейс с одним из адресов, указанных в опции
    конфигурации `etcd_address` (в `/etc/vitastor/vitastor.conf` или в опциях
    командной строки монитора). Если таких адресов несколько, также проверяется
    опция `antietcd_port` и antietcd запускается для адреса с соответствующим
    портом. По умолчанию antietcd принимает подключения по выбранному совпадающему
    IP, но его также можно определить вручную опцией `antietcd_ip`.

    При запуске antietcd монитор сам хранит центральные метаданные кластера и
    выставляет etcd-совместимое REST API. На диске эти метаданные хранятся в файле
    `/var/lib/vitastor/mon_2379.json.gz` (можно переопределить параметрами
    antietcd_data_file или antietcd_data_dir). Все остальные параметры antietcd
    (смотрите [по ссылке](https://git.yourcmc.ru/vitalif/antietcd/)), за исключением
    node_id, cluster, cluster_key, persist_filter, stale_read также можно задавать
    в конфигурации Vitastor с префиксом `antietcd_`.

    Вы можете выгружать/загружать данные в или из antietcd с помощью его инструмента
    `anticli`:

    ```
    npm exec anticli -e http://etcd:2379/v3 get --prefix '' --no-temp > dump.json
    npm exec anticli -e http://antietcd:2379/v3 load < dump.json
    ```
- name: enable_prometheus
  type: bool
  default: true
  info: |
    Enable built-in Prometheus metrics exporter at mon_http_port (8060 by default).

    Note that only the active (master) monitor exposes metrics, others return
    HTTP 503. So you should add all monitor URLs to your Prometheus job configuration.

    Grafana dashboard suitable for this exporter is here: [Vitastor-Grafana-6+.json](../../mon/scripts/Vitastor-Grafana-6+.json).
  info_ru: |
    Включить встроенный Prometheus-экспортер метрик на порту mon_http_port (по умолчанию 8060).

    Обратите внимание, что метрики выставляет только активный (главный) монитор, остальные
    возвращают статус HTTP 503, поэтому вам следует добавлять адреса всех мониторов
    в задание по сбору метрик Prometheus.

    Дашборд для Grafana, подходящий для этого экспортера: [Vitastor-Grafana-6+.json](../../mon/scripts/Vitastor-Grafana-6+.json).
- name: mon_http_port
  type: int
  default: 8060
  info: HTTP port for monitors to listen to (including metrics exporter)
  info_ru: Порт, на котором мониторы принимают HTTP-соединения (в том числе для отдачи метрик)
- name: mon_http_ip
  type: string
  info: IP address for monitors to listen to (all addresses by default)
  info_ru: IP-адрес, на котором мониторы принимают HTTP-соединения (по умолчанию все адреса)
- name: mon_https_cert
  type: string
  info: Path to PEM SSL certificate file for monitor to listen using HTTPS
  info_ru: Путь к PEM-файлу SSL-сертификата для монитора, чтобы принимать соединения через HTTPS
- name: mon_https_key
  type: string
  info: Path to PEM SSL private key file for monitor to listen using HTTPS
  info_ru: Путь к PEM-файлу секретного SSL-ключа для монитора, чтобы принимать соединения через HTTPS
- name: mon_https_client_auth
  type: bool
  default: false
  info: Enable HTTPS client certificate-based authorization for monitor connections
  info_ru: Включить в HTTPS-сервере монитора авторизацию по клиентским сертификатам
- name: mon_https_ca
  type: string
  info: Path to CA certificate for client HTTPS authorization
  info_ru: Путь к удостоверяющему сертификату для авторизации клиентских HTTPS соединений
- name: etcd_mon_ttl
  type: sec
  min: 5
  default: 1
  info: Monitor etcd lease refresh interval in seconds
  info_ru: Интервал обновления etcd резервации (lease) монитором
- name: etcd_mon_timeout
  type: ms
  default: 1000
  info: etcd request timeout used by monitor
  info_ru: Таймаут выполнения запросов к etcd от монитора
- name: etcd_mon_retries
  type: int
  default: 5
  info: Maximum number of attempts for one monitor etcd request
  info_ru: Максимальное число попыток выполнения запросов к etcd монитором
- name: mon_change_timeout
  type: ms
  min: 100
  default: 1000
  info: Optimistic retry interval for monitor etcd modification requests
  info_ru: Время повтора при коллизиях при запросах модификации в etcd, производимых монитором
- name: mon_stats_timeout
  type: ms
  min: 100
  default: 1000
  info: |
    Interval for monitor to wait before updating aggregated statistics in
    etcd after receiving OSD statistics updates
  info_ru: |
    Интервал, который монитор ожидает при изменении статистики по отдельным
    OSD перед обновлением агрегированной статистики в etcd
- name: osd_out_time
  type: sec
  default: 600
  info: |
    Time after which a failed OSD is removed from the data distribution.
    I.e. time which the monitor waits before attempting to restore data
    redundancy using other OSDs.
  info_ru: |
    Время, через которое отключенный OSD исключается из распределения данных.
    То есть, время, которое монитор ожидает перед попыткой переместить данные
    на другие OSD и таким образом восстановить избыточность хранения.
- name: placement_levels
  type: json
  default: '`{"host":100,"osd":101}`'
  info: |
    Levels for the placement tree. You can define arbitrary tree levels by
    defining them in this parameter. The configuration parameter value should
    contain a JSON object with level names as keys and integer priorities as
    values.  Smaller priority means higher level in tree. For example,
    "datacenter" should have smaller priority than "osd". "host" and "osd"
    levels are always predefined and can't be removed. If one of them is not
    present in the configuration, then it is defined with the default priority
    (100 for "host", 101 for "osd").
  info_ru: |
    Определения уровней для дерева размещения OSD. Вы можете определять
    произвольные уровни, помещая их в данный параметр конфигурации. Значение
    параметра должно содержать JSON-объект, ключи которого будут являться
    названиями уровней, а значения - целочисленными приоритетами. Меньшие
    приоритеты соответствуют верхним уровням дерева. Например, уровень
    "датацентр" должен иметь меньший приоритет, чем "OSD". Уровни с названиями
    "host" и "osd" являются предопределёнными и не могут быть удалены. Если
    один из них отсутствует в конфигурации, он доопределяется с приоритетом по
    умолчанию (100 для уровня "host", 101 для "osd").
- name: use_old_pg_combinator
  type: bool
  default: false
  info: |
    Use the old PG combination generator which doesn't support [level_placement](pool.en.md#level_placement)
    and [raw_placement](pool.en.md#raw_placement) for pools which don't use this features.
  info_ru: |
    Использовать старый генератор комбинаций PG, не поддерживающий [level_placement](pool.ru.md#level_placement)
    и [raw_placement](pool.ru.md#raw_placement) для пулов, которые не используют данные функции.
- name: osd_backfillfull_ratio
  type: float
  default: 0.99
  info: |
    Monitors try to prevent OSDs becoming 100% full during rebalance or recovery by
    calculating how much space will be occupied on every OSD after all rebalance
    and recovery operations finish, and pausing rebalance and recovery if that
    amount of space exceeds OSD capacity multiplied by the value of this
    configuration parameter.

    Future used space is calculated by summing space used by all user data blocks
    (objects) in all PGs placed on a specific OSD, even if some of these objects
    currently reside on a different set of OSDs.
  info_ru: |
    Мониторы стараются предотвратить 100% заполнение OSD в процессе ребаланса
    или восстановления, рассчитывая, сколько места будет занято на каждом OSD после
    завершения всех операций ребаланса и восстановления, и приостанавливая
    ребаланс и восстановление, если рассчитанный объём превышает ёмкость OSD,
    умноженную на значение данного параметра.

    Будущее занятое место рассчитывается сложением места, занятого всеми
    пользовательскими блоками данных (объектами) во всех PG, расположенных
    на конкретном OSD, даже если часть этих объектов в данный момент находится
    на другом наборе OSD.
