Настройки для нескольких разделов, нескольких узлов для службы без учета состояния службы - PullRequest
0 голосов
/ 27 декабря 2018

В нынешней ситуации использования сервисов без сохранения состояния, чтобы предотвратить потерю соединения, необходим дизайн, использующий первичный экземпляр, работающий на каждом узле (в настоящее время настроен на использование 5 узлов), и, надеюсь, каждый первичный работающий на каждом узле помогает конечной точке избежать ошибок из-запотеря связи.(В данном случае SignalR)

Таким образом, проект будет таким: одиночная первичная и 4 реплики в каждом разделе, всего 5 разделов, работающих на 5 узлах.

Это должен был быть простой параметр конфигурации,но получается сложно выполнить из-за отсутствия подробных руководств с примером кода.

Пока что я обнаружил:

Настройка DefaultValue = "- 1" для счетчика экземпляров службыдостигает службы для запуска на каждом узле, но вам все равно нужно, чтобы она была в сочетании с одним из следующих:

SingletonPartition или UniformInt64Partition или NamedPartition

SingletonPartition является значением по умолчанию в службе без сохранения состояния и сочетаниемDefaultValue «-1» с SingletonPartition заставляет службу работать только на одном узле, что превосходит цель использования нескольких узлов.

Итак, я попробовал что-то вроде: StatelessService InstanceCount = "5" (Должно ли это быть 25, включая реплики?) UniformInt64Partition PartitionCount = "5" lowKey = "0" highkey = "5" (должен ли высокий ключ быть 24, чтобы включить все реплики?)

В одной ссылке сказано, что низкий ключ и высокий ключ должны соответствовать количеству разделов, а другая ссылка, по-видимому, включает все экземпляры, включая реплики.

Мне все еще не удается получить 5 разделов, 5 узлов и каждый раздел, на котором выполняется первичная служба.

Ответы [ 3 ]

0 голосов
/ 08 января 2019

Если я правильно понял проблему, вам нужно убедиться, что на каждом узле работает отдельная первичная реплика.

Есть только одно решение, о котором я могу подумать (я не думаю, что это когда-либо возможно снеобработанное разделение) - вы можете создать несколько экземпляров службы и использовать ограничения размещения , чтобы ограничить каждую службу одним узлом с помощью ограничения NodeType или политики размещения путем установки недействительных или обязательных доменов.

0 голосов
/ 11 января 2019
  • Для сервисов без сохранения состояния с одноэлементными разделами установка числа экземпляров на -1 означает «запускать один на каждом узле».
  • Для служб без сохранения состояния вы не используете Реплики, но Экземпляры .Реплики предназначены для репликации состояния.

Итак, используйте одноэлементный раздел и установите количество экземпляров равным -1.

0 голосов
/ 31 декабря 2018

Я верю в ваши параметры ApplicationManifest, которые вы хотите:

<Parameter Name="YourService_PartitionCount" DefaultValue="5" />
<Parameter Name="YourService_MinReplicaSetSize" DefaultValue="4" />
<Parameter Name="YourService_TargetReplicaSetSize" DefaultValue="4" />

, а затем в требуемый раздел DefaultServices

<Service Name="YourService" ServicePackageActivationMode="ExclusiveProcess">
    <StatefulService ServiceTypeName="YourService" TargetReplicaSetSize="[YourService_TargetReplicaSetSize]" MinReplicaSetSize="[YourService_MinReplicaSetSize]">
        <UniformInt64Partition PartitionCount="[YourService_PartitionCount]" LowKey="0" HighKey="4" />
    </StatefulService>
</Service>

Убедитесь, что у вас нет значений в параметрах приложенияпапка, которая может переопределять эти значения.

Причина, стоящая за LowKey="0" HighKey="4", заключается в том, чтобы облегчить их нацеливание, если вы используете удаленное обслуживание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...