2017-02-03 10 views
0

Я ищу использовать функциональность тестирования хаоса, которая поставляется с Service Fabric. Я установил свой код, как описано в документе: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-controlled-chaosЗапуск метода StartChaosAsync, по-видимому, не оказывает заметного влияния на кластер Service Fabric

Проблема, с которой я столкнулся, заключается в том, что я почти всегда не вижу никаких событий сбоя, выставленных моим кластером. Ниже приведен пример вывода на консоль, в котором я запускаю код примера хаоса;

[StartedEvent], Timestamp=03/02/2017 16:32:21 
 
ChaosParameters: maxClusterStabilizationTimeout=00:00:30, waitTimeBetweenFaults=00:00:20, waitTimeBetweenIterations=00:00:30, maxConcurrentFaults=3, timeToRun=01:00:00, enableMoveReplicas=True, Context: 
 
ClusterHealthPolicy=ClusterHealthPolicy: MaxPercentUnhealthyNodes=0, MaxPercentUnhealthyApplications=0, ConsiderWarningAsError=True 
 

 

 
[ExecutingFaultsEvent], Timestamp=03/02/2017 16:32:26 
 
0 Faults: 
 

 
[ExecutingFaultsEvent], Timestamp=03/02/2017 16:33:00 
 
0 Faults: 
 

 
[ExecutingFaultsEvent], Timestamp=03/02/2017 16:33:33 
 
0 Faults: 
 

 
[ExecutingFaultsEvent], Timestamp=03/02/2017 16:34:06 
 
0 Faults: 
 

 
[ExecutingFaultsEvent], Timestamp=03/02/2017 16:34:40 
 
0 Faults: 
 

 
[ExecutingFaultsEvent], Timestamp=03/02/2017 16:35:13

Я пропускаю любую конфигурацию?

Получаю эти результаты как на местном, так и на лазурном кластере. Я также попробовал как примеры C#, так и PowerShell, и оба они имеют одинаковые результаты.

Я видел эту работу только один раз (локально), и каждый [ExecutingFaultsEvent] был перезагружен узлом. Должен ли я видеть здесь более одного типа недостатков?

Заранее спасибо

+0

Можете ли вы добавить текущее состояние объектов в кластере? С помощью «thinkwarningaserror», если есть какие-либо предупреждения, Хаос будет рассматривать вещи нездоровыми и не перемещать их. – masnider

+0

Я пробовал настройку «ObsWarningsAsError» на true и подтвердил, что все мои сущности здоровы, но я все еще вижу ту же проблему каждый раз, когда запускаю этот код. Есть ли какие-либо журналы в любом месте, где я мог бы взглянуть, чтобы помочь диагностировать это? –

+0

Вы когда-нибудь встречались с этим, так как я вижу подобную проблему с моим кластером рабочей среды azure? – Kramer00

ответ

0

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

Вы лучше обслужен использовать другой перегрузить для ChaosParameters конструктора ...

Попробуйте это (замените осущий на образце кода с этим):

  var startTimeUtc = DateTime.UtcNow; 
      var stabilizationTimeout = TimeSpan.FromSeconds(30.0); 
      var timeToRun = TimeSpan.FromMinutes(60.0); 
      var maxConcurrentFaults = 7; 
      var timeBetweenFaults = new TimeSpan(0, 0, 10); 
      var timeBetweenIterations = new TimeSpan(0, 0, 10); 
      Dictionary<string, string> _context = new Dictionary<string, string>(); 
      //Aggressive chaos... 
      var clusterHealthPolicy = new System.Fabric.Health.ClusterHealthPolicy() 
      { 
       MaxPercentUnhealthyApplications = 90, 
       MaxPercentUnhealthyNodes = 100 
      }; 

      var parameters = new ChaosParameters(
       stabilizationTimeout, 
       maxConcurrentFaults, 
       true, /* EnableMoveReplicaFault */ 
       timeToRun, 
       _context, 
       timeBetweenIterations, 
       timeBetweenFaults, 
       clusterHealthPolicy); 

ПРИМЕЧАНИЯ : Я рекомендую вам сделать это в новой статической асинхронной функции возврата задачи ...

Полный рабочий (рабочий) образец:

public static async Task RunChaos() 
    { 
     var clusterConnectionString = "localhost:19000"; 
     using (var client = new FabricClient(clusterConnectionString)) 
     { 
      var startTimeUtc = DateTime.UtcNow; 
      var stabilizationTimeout = TimeSpan.FromSeconds(30.0); 
      var timeToRun = TimeSpan.FromMinutes(60.0); 
      var maxConcurrentFaults = 7; 
      var timeBetweenFaults = new TimeSpan(0, 0, 10); 
      var timeBetweenIterations = new TimeSpan(0, 0, 10); 
      Dictionary<string, string> _context = new Dictionary<string, string>(); 
      //Aggressive chaos... 
      var clusterHealthPolicy = new System.Fabric.Health.ClusterHealthPolicy() 
      { 
       MaxPercentUnhealthyApplications = 90, 
       MaxPercentUnhealthyNodes = 100 
      }; 

      var parameters = new ChaosParameters(
       stabilizationTimeout, 
       maxConcurrentFaults, 
       true, /* EnableMoveReplicaFault */ 
       timeToRun, 
       _context, 
       timeBetweenIterations, 
       timeBetweenFaults, 
       clusterHealthPolicy); 

      var token = new System.Threading.CancellationToken(); 

      try 
      { 
       await client.TestManager.StartChaosAsync(parameters, new TimeSpan(0, 30, 0), token); 
      } 
      catch (FabricChaosAlreadyRunningException) 
      { 
       Console.WriteLine("An instance of Chaos is already running in the cluster."); 
      } 

      var filter = new ChaosReportFilter(startTimeUtc, DateTime.MaxValue); 

      var eventSet = new HashSet<ChaosEvent>(new ChaosEventComparer()); 

      while (true) 
      { 
       var report = await client.TestManager.GetChaosReportAsync(filter); 

       foreach (var chaosEvent in report.History) 
       { 
        if (eventSet.Add(chaosEvent)) 
        { 
         Console.WriteLine(chaosEvent); 
        } 
       } 

       // When Chaos stops, a StoppedEvent is created. 
       // If a StoppedEvent is found, exit the loop. 
       var lastEvent = report.History.LastOrDefault(); 

       if (lastEvent is StoppedEvent) 
       { 
        break; 
       } 

       Task.Delay(TimeSpan.FromSeconds(1.0)).GetAwaiter().GetResult(); 
      } 
     } 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^