Skip to content

Replication is not correct (online/offline), master-master #64

Open
@vukitoso

Description

@vukitoso

Hi.
tarantool 2.4.3.0.g5180d98f1-1
tarantool-memcached from git https://github.com/tarantool/memcached

В низу сообщения текст на русском.

Replication is not correct with memcached.
I have two virtual machines: s1, s2.
master-master

1)
STATE:
s1 - online
s2 - online

ACTION:
s2 -> offline

2)
STATE:
s1 - online
s2 - offline

ACTION:
s1:

telnet 0 11211
set q1 0 0 2
11
set q2 0 0 2
22

s1 -> offline
s2 -> online

3)
STATE:
s1 - offline
s2 - online

ACTION:
s2:

telnet 0 11211
set q1 0 0 5
12345

s1 -> online

4)
STATE:
s1 - online
s2 - online

ACTION:
s1:

telnet 0 11211
get q1 q2
VALUE q1 0 5
12345             <- GOOD
VALUE q2 0 2
22

s2:

telnet 0 11211
get q1 q2
VALUE q1 0 2
11                <- BAD
VALUE q2 0 2
22

'q1' on 's2' FAIL?
On the 's2' server, the q1 variable should be 12345, because this is the most recent value entered and all replicas and masters should be 12345.

master.lua on s1:

-- файл экземпляра для мастера

box.cfg {
  listen = 3301;
--  replication = {'replicator:[email protected]:3301',  -- URI мастера
--                 'replicator:[email protected]:3301'}; -- URI реплики
  replication = {'replicator:[email protected]:3301'}; -- URI мастера
  read_only = false;
  
  instance_uuid='111fec43-18a9-4e12-a684-a42b716fc001';
  replicaset_uuid='00003d13-508b-4b8e-82e6-806f088e0000';
  
  replication_timeout = 1; -- По умолчанию: 1
  
  replication_connect_timeout = 5; -- по умолчанию 30
 
  replication_sync_timeout = 10; -- По умолчанию: 300
  
  replication_sync_lag = nil; -- По умолчанию: 10
  
  replication_connect_quorum = 0;
}

box.once("schema", function()
  box.schema.user.create('replicator', {password = 'password'})
  box.schema.user.grant('replicator', 'replication') -- настроить роль для репликации
  box.schema.space.create("test")
  box.space.test:create_index("primary")
  print('box.once executed on master #1')
end)

local memcached = require('memcached')
local instance = memcached.create('my_instance', '0.0.0.0:11211')

master.lua on s2:

-- файл экземпляра для мастера

box.cfg {
  listen = 3301;
--  replication = {'replicator:[email protected]:3301',  -- URI мастера
--                 'replicator:[email protected]:3301'}; -- URI реплики
  replication = {'replicator:[email protected]:3301'}; -- URI мастера
  read_only = false;
  
  instance_uuid='222fec43-18a9-4e12-a684-a42b716fc002';
  replicaset_uuid='00003d13-508b-4b8e-82e6-806f088e0000';
  
  replication_timeout = 1; -- По умолчанию: 1
  
  replication_connect_timeout = 5; -- по умолчанию 30
  
  replication_sync_timeout = 10; -- По умолчанию: 300
  
  replication_sync_lag = nil; -- По умолчанию: 10
  
  replication_connect_quorum = 0;
}

box.once("schema", function()
  box.schema.user.create('replicator', {password = 'password'})
  box.schema.user.grant('replicator', 'replication') -- настроить роль для репликации
  box.schema.space.create("test")
  box.space.test:create_index("primary")
  print('box.once executed on master #2')
end)

local memcached = require('memcached')
local instance = memcached.create('my_instance', '0.0.0.0:11211')

НА РУССКОМ:

Здравствуйте.
Заметил, что не правильно реплицируются данные, добавленные в memcached при работе тарантула как master-master.
По логике самым приоритетным значением, которое должно иметь вес должно быть то, которое добавлено самое последнее по времени.
Пример:
имеем два сервера s1 и s2.
Оба сервера ОНЛАЙН.
Отключаем интернет на s2.
На s1 добавляем две переменные:
q1 = 11
q2 = 22
Отключаем интернет на s1.
Включаем интернет на s2.
На s2 добавляем переменную q1 = 12345
Включаем интернет на s1.
Сервера реплицируются.
Считываем переменные с обоих серверов
На s1:
q1 = 12345 (правильно)
q2 = 22
На s2:
q1 = 11 (НЕ правильно)
q2 = 22

Т.к. последним была добавлена переменная q1=12345 на s2, то это значение и должно реплицироваться на все сервера.
s1 сервер считал q1 значение с s2, но s2 счёл за приоритет значение из s1 сервера, а оно уже УСТАРЕВШЕЕ! Что не правильно по логике.
Я прав и логика репликации не верная или всё таки я не правильно рассуждаю?

Если можно, то лучше вести переписку на русском. Спасибо.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions