Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Существует два набора параметров конфигурации для надежных служб. Один набор является глобальным для всех надежных служб в кластере, а другой набор относится к определенной надежной службе.
Глобальная конфигурация
Конфигурация глобальной надежной службы указана в манифесте кластера для кластера в разделе KtlLogger. Он позволяет настроить общее расположение журнала и размер, а также глобальные ограничения памяти, используемые средством ведения журнала. Манифест кластера — это один XML-файл, содержащий параметры и конфигурации, которые применяются ко всем узлам и службам в кластере. Файл обычно называется ClusterManifest.xml. Манифест вашего кластера можно просмотреть с помощью команды Get-ServiceFabricClusterManifest в PowerShell.
Имена файлов конфигурации
Имя | Единица | Значение по умолчанию | Замечания |
---|---|---|---|
Минимальный размер WriteBuffer в KB в пуле памяти | Килобайт | 8388608 | Минимальное количество КБ, выделяемых в режиме ядра для пула памяти буфера записи журнала. Этот пул памяти используется для кэширования сведений о состоянии перед записью на диск. |
Максимум пула памяти для записываемого буфера в КБ | Килобайт | Без ограничений | Максимальный размер, до которого может увеличиваться пул памяти буфера записи журнального регистратора. |
SharedLogId | ГУИД | "" | Указывает уникальный GUID, используемый для идентификации общего файла журнала по умолчанию, используемого всеми надежными службами на всех узлах в кластере, которые не указывают SharedLogId в конкретной конфигурации службы. Если задан SharedLogId, необходимо также указать SharedLogPath. |
SharedLogPath | Полное имя пути | "" | Указывает полный путь к общему файлу журнала, используемому всеми надежными службами на всех узлах кластера, которые не указывают "SharedLogPath" в своей специфической конфигурации. Однако если задан SharedLogPath, необходимо также указать SharedLogId. |
SharedLogSizeInMB | Мегабайт | 8192 | Указывает количество МБИТ дискового пространства для статического выделения для общего журнала. Значение должно быть 2048 или больше. |
В azure ARM или локальном шаблоне JSON в приведенном ниже примере показано, как изменить общий журнал транзакций, созданный для поддержки любых надежных коллекций для служб с отслеживанием состояния.
"fabricSettings": [{
"name": "KtlLogger",
"parameters": [{
"name": "SharedLogSizeInMB",
"value": "4096"
}]
}]
Пример раздела манифеста локального кластера разработчиков
Если вы хотите изменить это в локальной среде разработки, необходимо изменить локальный файл clustermanifest.xml.
<Section Name="KtlLogger">
<Parameter Name="SharedLogSizeInMB" Value="4096"/>
<Parameter Name="WriteBufferMemoryPoolMinimumInKB" Value="8192" />
<Parameter Name="WriteBufferMemoryPoolMaximumInKB" Value="8192" />
<Parameter Name="SharedLogId" Value="{7668BB54-FE9C-48ed-81AC-FF89E60ED2EF}"/>
<Parameter Name="SharedLogPath" Value="f:\SharedLog.Log"/>
</Section>
Замечания
Средство ведения журнала имеет глобальный пул памяти, выделенный из нестраничной памяти ядра, которая доступна всем надежным службам на узле для кэширования данных состояния перед записью в выделенный журнал, связанный с надежной репликой службы. Размер пула управляется параметрами WriteBufferMemoryPoolMinimumInKB и WriteBufferMemoryPoolMaximumInKB. WriteBufferMemoryPoolMinimumInKB указывает как начальный размер этого пула памяти, так и наименьший размер, к которому может уменьшиться пул памяти. WriteBufferMemoryPoolMaximumInKB является самым высоким размером, к которому может расти пул памяти. Каждая открытая надежная реплика службы может увеличить размер пула памяти на величину, определяемую системой, до WriteBufferMemoryPoolMaximumInKB. Если спрос на память из пула памяти больше, чем доступно, запросы на память будут отложены до тех пор, пока память не станет доступной. Таким образом, если пул памяти буфера записи слишком мал для определенной конфигурации, производительность может пострадать.
Параметры SharedLogId и SharedLogPath всегда используются вместе для определения GUID и расположения общего журнала по умолчанию для всех узлов в кластере. Общий журнал по умолчанию используется для всех надежных служб, которые не указывают параметры в settings.xml для конкретной службы. Для наилучшей производительности общие файлы журналов должны размещаться на дисках, которые используются исключительно для этих файлов, чтобы уменьшить конкуренцию за ресурсы.
SharedLogSizeInMB указывает объем дискового пространства для предварительного размещения общего журнала по умолчанию на всех узлах. Чтобы указать SharedLogSizeInMB, не требуется указывать SharedLogId и SharedLogPath.
Конфигурация конкретной службы
Конфигурации по умолчанию надежных служб с отслеживанием состояния можно изменить с помощью пакета конфигурации (Config) или реализации службы (кода).
- Конфигурация с помощью пакета конфигурации выполняется путем изменения файла Settings.xml, созданного в корневом каталоге пакета Microsoft Visual Studio в папке конфигурации для каждой службы в приложении.
- Код . Конфигурация с помощью кода выполняется путем создания ReliableStateManager с помощью объекта ReliableStateManagerConfiguration с соответствующим набором параметров.
По умолчанию среда выполнения Azure Service Fabric ищет предопределенные имена разделов в файле Settings.xml и использует значения конфигурации при создании базовых компонентов среды выполнения.
Примечание.
Не удаляйте имена разделов следующих конфигураций в файле Settings.xml, созданном в решении Visual Studio, если вы не планируете настроить службу с помощью кода. Переименование имен пакета конфигурации или имен разделов потребует изменения кода при настройке ReliableStateManager.
Конфигурация безопасности репликатора
Конфигурации безопасности репликатора используются для защиты канала связи, используемого во время репликации. Это означает, что службы не смогут видеть трафик репликации друг друга, что гарантирует не только высокую доступность данных, но и их защиту. По умолчанию пустой раздел конфигурации безопасности предотвращает безопасность репликации.
Это важно
На узлах Linux сертификаты должны быть отформатированы в формате PEM. Дополнительные сведения о поиске и настройке сертификатов для Linux см. в статье "Настройка сертификатов в Linux".
Имя раздела по умолчанию
ReplicatorSecurityConfig
Примечание.
Чтобы изменить имя этого раздела, переопределите параметр replicatorSecuritySectionName конструктору ReliableStateManagerConfiguration при создании ReliableStateManager для этой службы.
Конфигурация репликатора
Конфигурации репликатора настраивают репликатор, который отвечает за обеспечение высокой надежности состояния службы с отслеживанием состояния, реплицируя и сохраняя это состояние локально. Конфигурация по умолчанию создается шаблоном Visual Studio и должна быть достаточной. В этом разделе рассказывается о дополнительных конфигурациях, доступных для настройки репликатора.
Имя раздела по умолчанию
ReplicatorConfig
Примечание.
Чтобы изменить имя этого раздела, переопределите параметр replicatorSettingsSectionName в конструктор ReliableStateManagerConfiguration во время создания ReliableStateManager для этой службы.
Имена файлов конфигурации
Имя | Единица | Значение по умолчанию | Замечания |
---|---|---|---|
ИнтервалПодтвержденияПакета | Секунды | 0.015 | Временной период, в течение которого репликатор на вторичном сервере ожидает после получения операции перед отправкой подтверждения на основной сервер. Любые другие подтверждения, отправляемые для операций, обрабатываемых в течение этого интервала, отправляются в виде одного ответа. |
ReplicatorEndpoint | Не применимо | Параметр по умолчанию не требуется | IP-адрес и порт, которые основной или вторичный репликатор будет использовать для взаимодействия с другими репликаторами в наборе реплик. Это должно ссылаться на конечную точку ресурса TCP в манифесте службы. Дополнительные сведения об определении ресурсов конечных точек в манифесте службы см. в ресурсах манифеста службы. |
Максимальный размер очереди основной репликации | Количество операций | 8192 | Максимальное количество операций в первичной очереди. Операция освобождается после того, как основной репликатор получает подтверждение от всех вторичных репликаторов. Это значение должно быть больше 64 и 2. |
MaxSecondaryReplicationQueueSize | Количество операций | 16384 | Максимальное количество операций в вторичной очереди. Операция освобождается после того, как ее статус становится высокодоступным благодаря постоянству. Это значение должно быть больше 64 и 2. |
Контрольная точка в мегабайтах | МБ | 50 | Объем пространства в журнале, после которого фиксируется состояние контрольной точкой. |
MaxRecordSizeInKB | КБ | 1024 | Самый большой размер записи, который репликатор может записывать в журнал. Это значение должно быть кратным 4 и больше 16. |
MinLogSizeInMB | МБ | 0 (определяется системой) | Минимальный размер журнала транзакций. Журналу не разрешено усечение до размера ниже этого параметра. 0 указывает, что минимальный размер журнала будет определяться репликатором. Увеличение этого значения повышает вероятность частичного копирования и добавочного резервного копирования, так как вероятность усечения соответствующих записей журнала снижается. |
ФакторПорогаУсечения | Фактор | 2 | Определяет размер журнала, при достижении которого будет инициировано усечение. Порог усечения определяется MinLogSizeInMB, умноженным на TruncationThresholdFactor. Фактор порога усечения должен быть больше 1. MinLogSizeInMB * TruncationThresholdFactor должно быть меньше MaxStreamSizeInMB. |
Коэффициент ограничения порога | Фактор | 4 | Определяет, при каком размере журнала реплика начнет замедляться. Порог ограничения (в МБ) определяется как Макс((MinLogSizeInMB * ThrottlingThresholdFactor),(CheckpointThresholdInMB * ThrottlingThresholdFactor)). Пороговое значение регулирования (в МБ) должно быть больше порога усечения (в МБ). Порог усечения (в МБ) должен быть меньше, чем MaxStreamSizeInMB. |
МаксимальныйОбъемЖурналаРезервныхКопийВМБ | МБ | 800 | Максимальный накопленный размер (в МБ) журналов резервного копирования в заданной цепочке журналов резервного копирования. Запросы на инкрементное резервное копирование завершатся ошибкой, если результатом инкрементного резервного копирования станет журнал резервного копирования, который привёл бы к тому, что суммарный объём журналов резервного копирования с момента соответствующей полной резервной копии превышает заданный размер. В таких случаях пользователю требуется выполнить полную резервную копию. |
SharedLogId | ГУИД | "" | Указывает уникальный GUID, используемый для идентификации общего файла журнала, используемого с этой репликой. Как правило, службы не должны использовать этот параметр. Однако если задан SharedLogId, необходимо также указать SharedLogPath. |
SharedLogPath | Полное квалифицированное имя пути | "" | Указывает полный путь, по которому будет создан общий файл журнала для этой реплики. Как правило, службы не должны использовать этот параметр. Однако если задан SharedLogPath, необходимо также указать SharedLogId. |
ДлительностьЗамедленногоМониторингаAPI | Секунды | 300 | Задает интервал мониторинга для управляемых вызовов API. Пример: пользователь предоставил функцию обратного вызова для резервного копирования. После прохождения интервала предупреждающий отчет о состоянии здоровья будет отправлен Менеджеру по здоровью. |
LogTruncationIntervalSeconds (Интервал усечения журнала в секундах) | Секунды | 0 | Настраиваемый интервал, для которого усечение лога будет инициировано на каждой реплике. Он используется, чтобы обеспечивать усечение журнала не только по размеру, но и по времени. Этот параметр также приводит к очистке удаленных записей в надежном словаре. Поэтому его можно использовать для своевременного очистки удаленных элементов. |
EnableStableReads | булевый | Неправда | Включение стабильного чтения ограничивает вторичные реплики возвращением значений, которые были подтверждены кворумом. |
Пример конфигурации с помощью кода
class Program
{
/// <summary>
/// This is the entry point of the service host process.
/// </summary>
static void Main()
{
ServiceRuntime.RegisterServiceAsync("HelloWorldStatefulType",
context => new HelloWorldStateful(context,
new ReliableStateManager(context,
new ReliableStateManagerConfiguration(
new ReliableStateManagerReplicatorSettings()
{
RetryInterval = TimeSpan.FromSeconds(3)
}
)))).GetAwaiter().GetResult();
}
}
class MyStatefulService : StatefulService
{
public MyStatefulService(StatefulServiceContext context, IReliableStateManagerReplica stateManager)
: base(context, stateManager)
{ }
...
}
Образец файла конфигурации
<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
<Section Name="ReplicatorConfig">
<Parameter Name="ReplicatorEndpoint" Value="ReplicatorEndpoint" />
<Parameter Name="BatchAcknowledgementInterval" Value="0.05"/>
<Parameter Name="CheckpointThresholdInMB" Value="512" />
</Section>
<Section Name="ReplicatorSecurityConfig">
<Parameter Name="CredentialType" Value="X509" />
<Parameter Name="FindType" Value="FindByThumbprint" />
<Parameter Name="FindValue" Value="9d c9 06 b1 69 dc 4f af fd 16 97 ac 78 1e 80 67 90 74 9d 2f" />
<Parameter Name="StoreLocation" Value="LocalMachine" />
<Parameter Name="StoreName" Value="My" />
<Parameter Name="ProtectionLevel" Value="EncryptAndSign" />
<Parameter Name="AllowedCommonNames" Value="My-Test-SAN1-Alice,My-Test-SAN1-Bob" />
</Section>
</Settings>
Замечания
BatchAcknowledgementInterval управляет задержкой репликации. Значение "0" приводит к наименьшей возможной задержке за счёт пропускной способности (так как сообщения подтверждения должны быть отправлены и обработаны, каждое из которых содержит меньше подтверждений). Чем больше значение для BatchAcknowledgementInterval, тем выше общая пропускная способность репликации при стоимости более высокой задержки операции. Это напрямую преобразуется в задержку фиксаций транзакций.
Значение для CheckpointThresholdInMB определяет объем дискового пространства, которое репликатор может использовать для хранения сведений о состоянии в выделенном файле журнала реплики. Увеличение этого значения до более высокого значения, чем значение по умолчанию, может привести к более быстрой перенастройке при добавлении новой реплики в набор. Это связано с частичной передачей состояния, которая происходит из-за наличия более обширной истории операций в журнале. Это может увеличить время восстановления реплики после сбоя.
Параметр MaxRecordSizeInKB определяет максимальный размер записи, которую можно записать репликатором в файл журнала. В большинстве случаев размер записи 1024 КБ по умолчанию является оптимальным. Однако если служба приводит к тому, что большие элементы данных являются частью сведений о состоянии, это значение может потребоваться увеличить. Преимущества от уменьшения MaxRecordSizeInKB до значения меньше 1024 невелики, поскольку меньшие записи используют только пространство, необходимое для этих записей. Мы ожидаем, что это значение необходимо изменить только в редких случаях.
Параметры SharedLogId и SharedLogPath всегда используются вместе, чтобы служба использовала отдельный общий журнал из общего журнала по умолчанию для узла. Чтобы повысить эффективность, как можно больше служб должны указывать один и тот же общий журнал. Общие файлы журналов должны размещаться на дисках, которые используются исключительно для общего файла журнала, чтобы уменьшить количество перемещений головы. Мы ожидаем, что это значение необходимо изменить только в редких случаях.