Бэкенд для хранения данных Integrated storage (Raft)
Бэкэнд Integrated Storage используется для хранения данных StarVault. В отличие от других бэкэндов хранения, Integrated Storage не работает с единственным источником данных. Вместо этого все узлы в кластере StarVault имеют реплицированную копию данных StarVault. Данные реплицируются на всех узлах с помощью алгоритма консенсуса Raft.
-
Высокая доступность - бэкэнд файловой системы поддерживает высокую доступность.
storage "raft" {
path = "/path/to/raft/data"
node_id = "raft_node_1"
}
cluster_addr = "http://127.0.0.1:8201"
|
При использовании бэкенда Integrated Storage необходимо указать |
|
При использовании бэкенда Integrated Storage отдельный бэкенд |
|
При использовании бэкэнда Integrated Storage настоятельно рекомендуется установить значение |
1. Параметры raft
-
path(string: "") — путь в файловой системе, где хранятся все данные StarVault. Это значение можно переопределить, установив переменную окруженияSTARVAULT_RAFT_PATH. -
node_id(string: "") — идентификатор узла в кластере Raft. Это значение можно переопределить, установив переменную окруженияSTARVAULT_RAFT_NODE_ID. -
performance_multiplier(integer: 0) — целочисленный множитель, используемый серверами для масштабирования ключевых временных параметров Raft. Настройка этого параметра влияет на время, необходимое StarVault для обнаружения сбоев в работе ведущего узла и проведения выборов ведущего узла, за счет того, что для повышения производительности требуется больше ресурсов сети и процессора. Если опустить это значение или установить его равным 0, будет использоваться время по умолчанию, описанное ниже. Меньшие значения используются для ужесточения синхронизации и повышения чувствительности, в то время как большие значения ослабляют синхронизацию и снижают чувствительность.По умолчанию StarVault будет использовать менее производительный тайминг, подходящий для минимальных серверов StarVault, что в настоящее время эквивалентно установке значения 5 (это значение может быть изменено в будущих версиях StarVault, в зависимости от изменения целевого профиля минимального сервера). Если установить значение 1, Raft перейдет в режим максимальной производительности и будет рекомендован для производственных серверов StarVault. Максимально допустимое значение - 10.
-
trailing_logs(integer: 10000) — количество записей логов останется в хранилище логов на диске после создания снимка. Этот параметр следует настраивать только в тех случаях, когда ведомые узлы не могут догнать ведущие из-за очень большого размера снимка и высокой пропускной способности записи, что приводит к усечению журнала до полной установки снимка. Если нужно использовать этот параметр для восстановления кластера, подумайте о снижении пропускной способности записи или объема данных, хранящихся на StarVault. По умолчанию установлено значение 10000, которое подходит для всех нормальных рабочих нагрузок. Метрикаtrailing_logs— не то же самое, чтоmax_trailing_logs. -
snapshot_threshold(integer: 8192) — минимальное количество записей фиксации Raft между снимками, которые сохраняются на диск. Это низкоуровневый параметр, который редко нуждается в изменении. Очень загруженные кластеры, испытывающие избыточный ввод-вывод на диск, могут увеличить это значение, чтобы уменьшить ввод-вывод на диск и минимизировать вероятность того, что все серверы будут делать снимки одновременно. При увеличении этого значения происходит обмен дискового ввода-вывода на дисковое пространство, поскольку журнал логов будет значительно увеличиваться, а место в файлеraft.dbне может быть восстановлено до следующего моментального снимка. При значительном увеличении этого параметра серверы могут дольше восстанавливаться после сбоев или аварийного переключения, поскольку потребуется воспроизвести больше логов. -
snapshot_interval(integer: 120 seconds) — интервал между снимками. Raft контролирует, требуется ли операция моментального снимка. Raft случайным образом распределяет снимки между настроенным интервалом и удвоенным интервалом, чтобы не допустить одновременного выполнения снимка всем кластером. По умолчанию интервал между снимками составляет 120 секунд. -
retry_join(list: []) — набор данных о соединении с другим узлом в кластере, который используется для того, чтобы помочь узлам найти ведущий узел для присоединения к кластеру. Может быть один или несколько блоковretry_join.Если детали подключения всех узлов кластера известны заранее, то можете включить эти блоки, чтобы узлы могли автоматически присоединиться к кластеру Raft. Как только один из узлов будет инициализирован как ведущий, остальные узлы будут использовать свою конфигурацию
retry_join, чтобы найти ведущий узел и присоединиться к кластеру. Обратите внимание, что при использовании Shamir seal присоединившиеся узлы все равно придется разблокировать вручную. Подробнее о параметрах секцииretry_joinсм. в разделе Параметры секции retry_join. -
max_entry_size(integer: 1048576) — максимальное количество байт для записи Raft. Это относится как к операциям Put, так и к транзакциям. Любая операция put или транзакция, превышающая это конфигурационное значение, приведет к неудаче соответствующей операции. Raft рекомендует максимальный размер данных в записи журнала Raft. Это основано на текущей архитектуре, времени по умолчанию и т. д. Integrated Storage также использует размер части, который является порогом, используемым для разбиения большого значения на части. По умолчанию размер части равен максимальному размеру записи журнала Raft. Значение по умолчанию для этой конфигурации равно 1048576 - двукратному размеру части. -
autopilot_reconcile_interval(string: "10s") — интервал, после которого автопилот будет фиксировать любые изменения состояния. Изменение состояния может означать множество вещей: недавно присоединившийся узел-избиратель, первоначально добавленный автопилотом в кластер Raft как не-избиратель, успешно прошел период стабилизации, тем самым получив право стать избирателем; узел, который стал неработоспособным и должен представить в API своё состояние; узел был помечен как неработоспособным, требующий выселения из конфигурации Raft, и т.д. -
autopilot_update_interval(string: "2s") — интервал, через который автопилот будет опрашивать StarVault на предмет обновления интересующей его информации. Сюда входят данные: конфигурация автопилота, текущее состояние автопилота, конфигурация raft, известные серверы, последний индекс raft и статистика для всех известных серверов. Полученная автопилотом информация будет использована для расчета его следующего состояния.
2. Параметры секции retry_join
-
leader_api_addr(string: "") — адрес возможного ведущего узла. -
auto_join(`string: "") ` — конфигурация облачного автосоединения с использованием синтаксиса go-discover. -
auto_join_scheme(string: "") — схема протокола URI для адресов, обнаруженных через автосоединение. Доступные значения:httpилиhttps. Опциональный параметр. -
auto_join_port(uint: "") — порт, используемый для адресов, обнаруженных с помощью автосоединения. Опциональный параметр. -
leader_tls_servername(string: "") — имя сервера TLS при подключении по HTTPS. Должно совпадать с одним из имен в DNS SAN сертификата удаленного сервера. См. также Интегрированное хранилище и TLS. -
leader_ca_cert_file(string: "") — путь к файлу с сертификатом CA возможного ведущего узла. -
leader_client_cert_file(string: "") — путь к файлу с сертификатом клиента для ведомого узла, чтобы установить аутентификацию клиента с возможным ведущем узлом. -
leader_client_key_file(string: "") — путь к файлу с ключом клиента для ведомого узла для установления аутентификации клиента с возможным ведущем узлом. -
leader_ca_cert(string: "") — сертификат CA возможного ведущего узла. -
leader_client_cert(string: "") — сертификат клиента для ведомого узла для установления аутентификации клиента с возможным ведущем узлом. -
leader_client_key(string: "") — клиентский ключ для ведомого узла для установления аутентификации клиента с возможным ведущем узлом.
Каждый блок retry_join может предоставлять сертификаты TLS через пути к файлам или в виде однострочного значения строки сертификата с новыми строками, разграниченными знаком \n, но не комбинацию того и другого. Каждая блок конфигурации retry_join может содержать либо значение leader_api_addr, либо значение конфигурации облака auto_join, но не оба. Если указано значение auto_join, StarVault будет автоматически пытаться обнаружить и разрешить потенциальные адреса ведущегой узела Raft с помощью go-discover.
По умолчанию StarVault будет пытаться связаться с обнаруженными пирами, используя HTTPS и порт 8200. Операторы могут переопределить эти параметры с помощью полей auto_join_scheme и auto_join_port соответственно.
Пример конфигурации:
storage "raft" {
path = "/Users/foo/raft/"
node_id = "node1"
retry_join {
leader_api_addr = "http://127.0.0.2:8200"
leader_ca_cert_file = "/path/to/ca1"
leader_client_cert_file = "/path/to/client/cert1"
leader_client_key_file = "/path/to/client/key1"
}
retry_join {
leader_api_addr = "http://127.0.0.3:8200"
leader_ca_cert_file = "/path/to/ca2"
leader_client_cert_file = "/path/to/client/cert2"
leader_client_key_file = "/path/to/client/key2"
}
retry_join {
leader_api_addr = "http://127.0.0.4:8200"
leader_ca_cert_file = "/path/to/ca3"
leader_client_cert_file = "/path/to/client/cert3"
leader_client_key_file = "/path/to/client/key3"
}
retry_join {
auto_join = "provider=aws region=eu-west-1 tag_key=StarVault tag_value=... access_key_id=... secret_access_key=..."
}
}