Apache Ignite теряет данные при сбое узла? - PullRequest
0 голосов
/ 27 апреля 2018

Я использую Apache Ignite 2.4.0, с официальными примерами с небольшими изменениями с моей стороны (код ниже). Я проверил следующий сценарий:

  • запущено 3 экземпляра https://github.com/apache/ignite/blob/master/examples/src/main/java/org/apache/ignite/examples/ExampleNodeStartup.java (на моем локальном ноутбуке)

  • запустил клиент и создал кеш с 1 резервной копией

    public static void main(String[] args) throws IgniteException {
    Ignition.setClientMode(true);
    try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
      CacheConfiguration cfg = new CacheConfiguration();
      cfg.setName(CACHE_NAME)
      .setAtomicityMode(CacheAtomicityMode.ATOMIC)
      .setCacheMode(CacheMode.PARTITIONED)
      .setBackups(1)               
      .setWriteSynchronizationMode(CacheWriteSynchronizationMode.FULL_SYNC)
      .setReadFromBackup(true);
    
      try (IgniteCache<Integer, String> cache = ignite.getOrCreateCache(cfg)) {
                        putGet(cache);
      }
    }
    }
    
  • с клиентом, я использую метод putGet для записи и чтения:

    private static void putGet(IgniteCache<Integer, String> cache) throws IgniteException {
    System.out.println(">>> Cache put-get example started.");
    
    // Store keys in cache.
    for (int i = 0; i < 100; i++)
      cache.put(i, Integer.toString(i));
    
    System.out.println(">>> Stored values in cache.");
    
    int size = 0;
    for (int i = 0; i < 100; i++) {
      if (cache.get(i) != null)
        size++;
    }
    System.out.println("Cache size:" + size);
    }
    

Когда я впервые запускаю метод putGet, конечно, вывод:

>>> Cache put-get example started.
>>> Stored values in cache.
Cache size:100
[01:35:21] Ignite node stopped OK [uptime=00:00:00.744]

Затем я останавливаю один узел и снова выполняю метод putGet (на этот раз только для чтения). Результат:

>>> Cache put-get example started.
>>> Stored values in cache.
Cache size:48
[01:38:25] Ignite node stopped OK [uptime=00:00:00.406]

Разве кластер не должен восстанавливать данные, которые находились на аварийном узле, из резервной копии на двух других узлах? Каково поведение резервной копии более точно? Нужен ли режим постоянства?

...