Как да направя Касандра непоследователна между възлите?

Трябва да проведа някои отрицателни тестове с приложението, свързващо се с Cassandra. Това, което искам да тествам, е как се държи приложението, когато данните не са последователни в множество възли на Cassandra. По-долу са няколко неща, които опитах. Имайте предвид, че използвам коефициент на репликация като 2 и броят на възлите на Cassandra в клъстера е 3. Освен това последователността при четене и запис се запазва като 1.

  • Свалете услугите на Cassandra на няколко възела
  • изключете мрежовия кабел за един от възлите cassandra, вмъкнете данни
    в друг възел Cassandra и поставете обратно мрежовия кабел.
  • Силно натоварване на възлите на Cassandra, докато се извършва тестът.

Във всички сценарии репликацията беше достатъчно бърза. Веднага след като възелът, който не работи, се активира или мрежовият кабел е включен, се случва повторение и данните са налични на друг възел.

Всяко предложение за опит за възпроизвеждане на несъответствие в данните ще бъде полезно. Моля, имайте предвид, че използвах Embedded Cassandra и се подиграх с няколко теста, но бих искал да репликирам действителното несъответствие, така че поведението на приложението да може да бъде тествано задълбочено.

Благодаря


person user1401472    schedule 29.05.2017    source източник
comment
Изглежда, че искате да докажете нещо? Несъответствие в Cassandra може да се случи, ако не сме конфигурирали правилно. Какво е всичко за вашето приложение и какво ще постигнете, след като донесете несъответствие на Cassandra?   -  person Shoban Sundar    schedule 29.05.2017
comment
Искам да добавя предпазни мерки срещу несъответствие в данните и не искам приложението да се държи по различен начин, когато данните, съхранени на един възел, не се извличат от друг.   -  person user1401472    schedule 29.05.2017
comment
Така че първо трябва да разберете как се четат данните в клъстер Cassandra.   -  person Shoban Sundar    schedule 29.05.2017


Отговори (2)


Трябва да разберете как Касандра чете или записва данни.

В клъстер Касандра кажете за напр. имате 4 възела и коефициент на репликация като 3. След това на всеки възел ще бъде присвоен Token Range въз основа на устройството за разделяне. Според нашите напр. в клъстер от 4 възела кажете, че възел 1 има токен A, възел 2 има токен B, възел 3 има токен C, възел 4 има токен D.

Вмъкването може да се задейства от всеки възел, така че този възел ще бъде координиращ възел. Когато се вмъкнат данни, Cassandra изчислява токена въз основа на разпределителя и проверява в кой диапазон на токени ще се поберат данните. Ако вашите данни са изчислени и идентифицират токена като C, тогава той ще бъде вмъкнат от възел 3 до броя на репликите (3) по кръгов начин. И така, вмъкнати във възел 3, възел 4, възел 1.

По същия начин, когато четете данните, вашият координиращ възел изчислява токена. Кажете например, ако прочетете данните, вмъкнати по-горе, напр. от възел 2 (координаторен възел). Тогава възел 2 ще поиска данни от възел 3, 4, 1 въз основа на вашето ниво на съгласуваност, ще изчака и ще върне резултата. Да предположим, че вашето ниво на съгласуваност е 1, тогава ще изчака, докато един възел отговори и ще се върне. Ако координаторният възел не намери достатъчен брой реплики, за да предостави резултата, тогава той ще хвърли TokenRangeOfflineException. Ако идентифицира несъответствие на този запис във възлите, тогава Cassandra ще извърши поправка на четене за този запис, което ще направи данните последователни.

Също така Cassandra предоставя механизъм за поправка, когато непрочетени данни или често изтривани данни или не се репликират правилно. Следователно всичко това прави Касандра последователна.

За да постигнем несъответствие, не можем да кажем конкретни методи, чрез които данните стават несъвместими, но методът по-долу може да ви помогне да направите несъответствие, с което се сблъсках:

  • Премахвайте възлите на Cassandra често един по един, когато постоянно вмъквате данни
  • Също така не правете редовен ремонт

Но това ще отнеме повече време, за да стане непоследователно. Не можем да гарантираме нито един метод, който да направи Касандра непоследователна.

person Shoban Sundar    schedule 29.05.2017

Cassandra има три механизма, които осигуряват съгласуваност на данните в репликите:

  1. Подсказано предаване:

Ако даден възел не може да получи конкретен запис, координиращият възел на записа запазва данните за запис като набор от подсказки. Когато възелът се върне онлайн, координаторът въздейства на поправката, като предава подсказки, така че възелът да може да навакса с необходимите записи.

  1. Прочетете поправката:

При поправка на четене базата данни изпраща заявка за обобщение до всяка реплика, която не участва пряко в четенето. Базата данни сравнява всички реплики и записва най-новата версия във всеки възел на реплика, който я няма.

Базата данни може също така да извърши поправка на четене произволно на таблица. Свойството read_repair_chance, зададено за таблица, конфигурира честотата на тази операция.

  1. Антиентропийна поправка:

nodetool repair tool сравнява данните във всички реплики и след това актуализира данните до най-новата версия

Както виждам, за да постигнете непоследователни данни в реплики, трябва да избягвате извикването на тези механизми, напр.

  1. Настройте клъстер с 2 възела
  2. Деактивирайте подсказаното предаване в cassandra.yaml
  3. Задайте read_repair_chance на 0 за таблицата
  4. Задайте replication_factorна 2
  5. Изключете един възел
  6. Изпълнявайте заявки за запис за таблицата с consistency level = ONE
  7. Включете възела от стъпка 5
  8. НЕ изпълнявайте nodetool repair
  9. Данните от стъпка 6 трябва да са непоследователни в репликите: възелът от стъпка 5 не трябва да съдържа реплики на данни от стъпка 6
person Mikhail Baksheev    schedule 30.05.2017
comment
Това е полезна информация. Благодаря. Опитах да изпълня стъпките в реда. Но по някакъв начин все още виждането на Касандра възпроизвежда данните добре - person user1401472; 12.06.2017