Size: a a a

2021 January 22

AT

Alexander Turenko in Tarantool
Harry Truman
Мы используем следующий код
await conn.sql(f"insert into info(id, title, body) "
                               f"values ( {row['id']}, '{row['title']}', '{row['body']}' )" )
Это пайтоновские formatted strings? Тогда тут та же проблема.
источник

AT

Alexander Turenko in Tarantool
Harry Truman
Да нет, с этим всё нормально. От клиента запросы фильтруем. Просто при  переносе  данных из Postgres есть строки которые  содержат одинарные кавычки и эти кавычки нужно сохранить. Как лучше это сделать?  Используем Python коннектор.
Лучше через параметры. Там не нужно ничего эскейпить (потому что протокол бинарный).
источник

HT

Harry Truman in Tarantool
Всем спасибо за помощь!!!! понял свой косяк.
источник

A

Andrey in Tarantool
Andrey
сейчас вообще реплика отваливается по таймауту
2021-01-22 16:04:47.650 [802522] main/110/applier/user@51. I> will retry every 60.00 second
2021-01-22 16:05:47.736 [802522] main/110/applier/user@51. I> authenticated
2021-01-22 16:05:47.758 [802522] main/110/applier/user@51. I> subscribed
2021-01-22 16:05:47.758 [802522] main/110/applier/user@51. I> remote vclock {1: 160336292617, 2: 66085717162} local vclock {1: 160335568147, 2: 66085717162}
2021-01-22 16:05:53.556 [802522] main/123/applierw/user@51 C> leaving orphan mode
2021-01-22 16:05:57.578 [802522] main/110/applier/user@51. I> can't read row
2021-01-22 16:05:57.578 [802522] main/110/applier/user@51. xrow.c:1079 E> ER_SYSTEM: timed out


а на мастере
coio.cc:340 !> SystemError timed out: Operation timed out
relay/repl:6358/101/main C> exiting the relay loop


ну и память

PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
802522 taranto+  20   0   23.3g  14.3g  15988 S   0.0  22.8   6:20.25 tarantool
вот еще раз попробовал, реплика синкается нормально, а потом по таймауту отваливается
2021-01-22 19:19:05.649 [689211] snapshot/101/main C> 23.1M rows written
2021-01-22 19:19:05.704 [689211] snapshot/101/main I> done
2021-01-22 19:19:05.705 [689211] main/102/app I> ready to accept requests
2021-01-22 19:19:05.705 [689211] main/102/app I> synchronizing with 1 replicas
2021-01-22 19:19:05.723 [689211] main/110/applier/user@51. I> subscribed
2021-01-22 19:19:05.723 [689211] main/110/applier/user@51. I> remote vclock {1: 160478605221, 2: 66085717162} local vclock {1: 160476416837, 2: 66085717162}
2021-01-22 19:19:22.038 [689211] main/111/applierw/user@51 C> leaving orphan mode
2021-01-22 19:19:22.038 [689211] main/102/app I> replica set sync complete
2021-01-22 19:19:22.038 [689211] main/102/app C> leaving orphan mode
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'checkpoint_interval' configuration option to 0
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'replication_timeout' configuration option to 60
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'memtx_memory' configuration option to 10000000000
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'net_msg_max' configuration option to 4000
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'listen' configuration option to "3311"
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'replication_connect_quorum' configuration option to 1
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'read_only' configuration option to true
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'readahead' configuration option to 32640
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'replication' configuration option to ["user@ip_master:port"]
2021-01-22 19:19:22.038 [689211] main C> entering the event loop
2021-01-22 19:19:26.057 [689211] main/110/applier/user@51. I> can't read row
2021-01-22 19:19:26.057 [689211] main/110/applier/user@51. xrow.c:1079 E> ER_SYSTEM: timed out
источник

A

Andrey in Tarantool
из-за версий может быть проблема?
на мастере
tarantool --version
Tarantool 2.2.2-4-g4f8ac5999


на новом сервере
tarantool --version
Tarantool 2.2.3-0-gb9c4c7c04
источник

MA

Mons Anderson in Tarantool
Andrey
вот еще раз попробовал, реплика синкается нормально, а потом по таймауту отваливается
2021-01-22 19:19:05.649 [689211] snapshot/101/main C> 23.1M rows written
2021-01-22 19:19:05.704 [689211] snapshot/101/main I> done
2021-01-22 19:19:05.705 [689211] main/102/app I> ready to accept requests
2021-01-22 19:19:05.705 [689211] main/102/app I> synchronizing with 1 replicas
2021-01-22 19:19:05.723 [689211] main/110/applier/user@51. I> subscribed
2021-01-22 19:19:05.723 [689211] main/110/applier/user@51. I> remote vclock {1: 160478605221, 2: 66085717162} local vclock {1: 160476416837, 2: 66085717162}
2021-01-22 19:19:22.038 [689211] main/111/applierw/user@51 C> leaving orphan mode
2021-01-22 19:19:22.038 [689211] main/102/app I> replica set sync complete
2021-01-22 19:19:22.038 [689211] main/102/app C> leaving orphan mode
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'checkpoint_interval' configuration option to 0
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'replication_timeout' configuration option to 60
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'memtx_memory' configuration option to 10000000000
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'net_msg_max' configuration option to 4000
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'listen' configuration option to "3311"
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'replication_connect_quorum' configuration option to 1
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'read_only' configuration option to true
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'readahead' configuration option to 32640
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'replication' configuration option to ["user@ip_master:port"]
2021-01-22 19:19:22.038 [689211] main C> entering the event loop
2021-01-22 19:19:26.057 [689211] main/110/applier/user@51. I> can't read row
2021-01-22 19:19:26.057 [689211] main/110/applier/user@51. xrow.c:1079 E> ER_SYSTEM: timed out
@sergepetrenko
remote vclock {1: 160478605221, 2: 66085717162} local vclock {1: 160476416837, 2: 66085717162} — дельта 2M транзакций.
спустя 17 секунд мы видим replica set sync complete (т.е. реплика догналась со вполне нормальной скоростью 128krps)
и спустя 4 секунды applier отстрелило по таймауту.
это не очень похоже на проблему oom при асинхронном апплаере.
источник

MA

Mons Anderson in Tarantool
Andrey
вот еще раз попробовал, реплика синкается нормально, а потом по таймауту отваливается
2021-01-22 19:19:05.649 [689211] snapshot/101/main C> 23.1M rows written
2021-01-22 19:19:05.704 [689211] snapshot/101/main I> done
2021-01-22 19:19:05.705 [689211] main/102/app I> ready to accept requests
2021-01-22 19:19:05.705 [689211] main/102/app I> synchronizing with 1 replicas
2021-01-22 19:19:05.723 [689211] main/110/applier/user@51. I> subscribed
2021-01-22 19:19:05.723 [689211] main/110/applier/user@51. I> remote vclock {1: 160478605221, 2: 66085717162} local vclock {1: 160476416837, 2: 66085717162}
2021-01-22 19:19:22.038 [689211] main/111/applierw/user@51 C> leaving orphan mode
2021-01-22 19:19:22.038 [689211] main/102/app I> replica set sync complete
2021-01-22 19:19:22.038 [689211] main/102/app C> leaving orphan mode
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'checkpoint_interval' configuration option to 0
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'replication_timeout' configuration option to 60
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'memtx_memory' configuration option to 10000000000
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'net_msg_max' configuration option to 4000
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'listen' configuration option to "3311"
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'replication_connect_quorum' configuration option to 1
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'read_only' configuration option to true
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'readahead' configuration option to 32640
2021-01-22 19:19:22.038 [689211] main/102/app I> set 'replication' configuration option to ["user@ip_master:port"]
2021-01-22 19:19:22.038 [689211] main C> entering the event loop
2021-01-22 19:19:26.057 [689211] main/110/applier/user@51. I> can't read row
2021-01-22 19:19:26.057 [689211] main/110/applier/user@51. xrow.c:1079 E> ER_SYSTEM: timed out
Если вам не сложно, давайте попробуем немного подкрутить таймауты.
попробуйте тот-же синк реплики, но с увеличенным replication_connect_timeout

например поставить replication_connect_timeout = 60 (вместо дефолтных 30)
и replication_timeout = 3 вместо дефолтного 1
источник

A

Andrey in Tarantool
Mons Anderson
Если вам не сложно, давайте попробуем немного подкрутить таймауты.
попробуйте тот-же синк реплики, но с увеличенным replication_connect_timeout

например поставить replication_connect_timeout = 60 (вместо дефолтных 30)
и replication_timeout = 3 вместо дефолтного 1
у меня сейчас
replication_timeout = 60;


попробую с такими
replication_connect_timeout = 60;
replication_timeout = 60;
источник

A

Andrey in Tarantool
Mons Anderson
Если вам не сложно, давайте попробуем немного подкрутить таймауты.
попробуйте тот-же синк реплики, но с увеличенным replication_connect_timeout

например поставить replication_connect_timeout = 60 (вместо дефолтных 30)
и replication_timeout = 3 вместо дефолтного 1
все равно отваливается
2021-01-22 19:48:35.456 [2140313] main/102/app I> ready to accept requests
2021-01-22 19:48:35.456 [2140313] main/102/app I> synchronizing with 1 replicas
2021-01-22 19:48:35.475 [2140313] main/110/applier/user@51. I> subscribed
2021-01-22 19:48:35.475 [2140313] main/110/applier/user@51. I> remote vclock {1: 160500452415, 2: 66085717162} local vclock {1: 160499135976, 2: 66085717162}
2021-01-22 19:48:45.265 [2140313] main/111/applierw/user@51 C> leaving orphan mode
2021-01-22 19:48:45.265 [2140313] main/102/app I> replica set sync complete
2021-01-22 19:48:45.265 [2140313] main/102/app C> leaving orphan mode
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'checkpoint_interval' configuration option to 0
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'replication_connect_timeout' configuration option to 60
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'replication_timeout' configuration option to 60
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'memtx_memory' configuration option to 10000000000
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'net_msg_max' configuration option to 4000
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'listen' configuration option to "3311"
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'replication_connect_quorum' configuration option to 1
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'read_only' configuration option to true
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'readahead' configuration option to 32640
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'replication' configuration option to ["user@ip_master:port"]
2021-01-22 19:48:45.265 [2140313] main C> entering the event loop
2021-01-22 19:48:49.285 [2140313] main/110/applier/user@51. I> can't read row
2021-01-22 19:48:49.285 [2140313] main/110/applier/user@51. xrow.c:1079 E> ER_SYSTEM: timed out
2021-01-22 19:48:49.285 [2140313] main/110/applier/user@51. I> will retry every 60.00 second
источник

MA

Mons Anderson in Tarantool
Andrey
у меня сейчас
replication_timeout = 60;


попробую с такими
replication_connect_timeout = 60;
replication_timeout = 60;
хм... у меня была надежда на низкий replication_timeout...
источник

MA

Mons Anderson in Tarantool
Andrey
все равно отваливается
2021-01-22 19:48:35.456 [2140313] main/102/app I> ready to accept requests
2021-01-22 19:48:35.456 [2140313] main/102/app I> synchronizing with 1 replicas
2021-01-22 19:48:35.475 [2140313] main/110/applier/user@51. I> subscribed
2021-01-22 19:48:35.475 [2140313] main/110/applier/user@51. I> remote vclock {1: 160500452415, 2: 66085717162} local vclock {1: 160499135976, 2: 66085717162}
2021-01-22 19:48:45.265 [2140313] main/111/applierw/user@51 C> leaving orphan mode
2021-01-22 19:48:45.265 [2140313] main/102/app I> replica set sync complete
2021-01-22 19:48:45.265 [2140313] main/102/app C> leaving orphan mode
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'checkpoint_interval' configuration option to 0
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'replication_connect_timeout' configuration option to 60
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'replication_timeout' configuration option to 60
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'memtx_memory' configuration option to 10000000000
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'net_msg_max' configuration option to 4000
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'listen' configuration option to "3311"
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'replication_connect_quorum' configuration option to 1
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'read_only' configuration option to true
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'readahead' configuration option to 32640
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'replication' configuration option to ["user@ip_master:port"]
2021-01-22 19:48:45.265 [2140313] main C> entering the event loop
2021-01-22 19:48:49.285 [2140313] main/110/applier/user@51. I> can't read row
2021-01-22 19:48:49.285 [2140313] main/110/applier/user@51. xrow.c:1079 E> ER_SYSTEM: timed out
2021-01-22 19:48:49.285 [2140313] main/110/applier/user@51. I> will retry every 60.00 second
а можете дать момент старта подключения реплики? хочу понять, с чем может биться момент
2021-01-22 19:48:49.285 [2140313] main/110/applier/user@51. xrow.c:1079 E> ER_SYSTEM: timed out

от чего то же он отсчитывается
источник

MA

Mons Anderson in Tarantool
Давайте попробуем посмотреть на все таймауты
local r = {} for k,v in pairs(box.cfg) do if k:match"timeout" then r[k]=v end end return r

выведет что-то такое:
---
- replication_connect_timeout: 30
 vinyl_timeout: 60
 election_timeout: 5
 replication_sync_timeout: 300
 replication_synchro_timeout: 5
 replication_timeout: 1
...
источник

A

Andrey in Tarantool
Mons Anderson
а можете дать момент старта подключения реплики? хочу понять, с чем может биться момент
2021-01-22 19:48:49.285 [2140313] main/110/applier/user@51. xrow.c:1079 E> ER_SYSTEM: timed out

от чего то же он отсчитывается
немного не понял, что надо показать?
источник

KN

Konstantin Nazarov in Tarantool
Andrey
все равно отваливается
2021-01-22 19:48:35.456 [2140313] main/102/app I> ready to accept requests
2021-01-22 19:48:35.456 [2140313] main/102/app I> synchronizing with 1 replicas
2021-01-22 19:48:35.475 [2140313] main/110/applier/user@51. I> subscribed
2021-01-22 19:48:35.475 [2140313] main/110/applier/user@51. I> remote vclock {1: 160500452415, 2: 66085717162} local vclock {1: 160499135976, 2: 66085717162}
2021-01-22 19:48:45.265 [2140313] main/111/applierw/user@51 C> leaving orphan mode
2021-01-22 19:48:45.265 [2140313] main/102/app I> replica set sync complete
2021-01-22 19:48:45.265 [2140313] main/102/app C> leaving orphan mode
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'checkpoint_interval' configuration option to 0
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'replication_connect_timeout' configuration option to 60
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'replication_timeout' configuration option to 60
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'memtx_memory' configuration option to 10000000000
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'net_msg_max' configuration option to 4000
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'listen' configuration option to "3311"
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'replication_connect_quorum' configuration option to 1
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'read_only' configuration option to true
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'readahead' configuration option to 32640
2021-01-22 19:48:45.265 [2140313] main/102/app I> set 'replication' configuration option to ["user@ip_master:port"]
2021-01-22 19:48:45.265 [2140313] main C> entering the event loop
2021-01-22 19:48:49.285 [2140313] main/110/applier/user@51. I> can't read row
2021-01-22 19:48:49.285 [2140313] main/110/applier/user@51. xrow.c:1079 E> ER_SYSTEM: timed out
2021-01-22 19:48:49.285 [2140313] main/110/applier/user@51. I> will retry every 60.00 second
если это на разных серверах - посмотрите чтобы часы были синхронизированы
источник

A

Andrey in Tarantool
Mons Anderson
Давайте попробуем посмотреть на все таймауты
local r = {} for k,v in pairs(box.cfg) do if k:match"timeout" then r[k]=v end end return r

выведет что-то такое:
---
- replication_connect_timeout: 30
 vinyl_timeout: 60
 election_timeout: 5
 replication_sync_timeout: 300
 replication_synchro_timeout: 5
 replication_timeout: 1
...
localhost:3311> local r = {} for k,v in pairs(box.cfg) do if k:match"timeout" then r[k]=v end end return r
---
- replication_sync_timeout: 300
 replication_connect_timeout: 60
 vinyl_timeout: 60
 replication_timeout: 60
...
источник

A

Andrey in Tarantool
Konstantin Nazarov
если это на разных серверах - посмотрите чтобы часы были синхронизированы
поставил такую же таймзону как и на мастере, но не помогло
источник

MA

Mons Anderson in Tarantool
Посмотрел по исходникам, сопоставил с видимой ошибкой

Судя по
https://github.com/tarantool/tarantool/blob/b9c4c7c04ae99c5d00124f6c578b7f19a0b98174/src/box/applier.cc#L91
и предшествующим логам и отсутствию в них final data received (https://github.com/tarantool/tarantool/blob/b9c4c7c04ae99c5d00124f6c578b7f19a0b98174/src/box/applier.cc#L915) мы в статусе APPLIER_FINAL_JOIN

читает он, судя по всему, вот этим https://github.com/tarantool/tarantool/blob/b9c4c7c04ae99c5d00124f6c578b7f19a0b98174/src/box/applier.cc#L531

тут есть replication_disconnect_timeout, который равен 4м replication_timeout (https://github.com/tarantool/tarantool/blob/b9c4c7c04ae99c5d00124f6c578b7f19a0b98174/src/box/replication.h#L157)

отстрел происходит ровно через 4 секунды после entering the event loop, что очень похоже на replication_timeout=1

Есть гипотеза, что к моменту запуска этого чтения это значение ещё не было установлено в переменную из конфига, т.е. в реальности при final join replication_timeout равен 1 железно.

В причине проблемы нужно разбираться дальше. Как минимум попробовать воспроизвести такое поведение (пока не удалось)

Могу предложить попробовать хак таймаута (но не факт, что это поможет).

Перед вызовом box.cfg добавить такое (для выставления таймаута в 5):

do
   local ffi = require 'ffi'
   ffi.cdef[[ extern double replication_timeout; ]]
   ffi.C.replication_timeout = 5
end
источник

MA

Mons Anderson in Tarantool
Andrey
поставил такую же таймзону как и на мастере, но не помогло
Костя говорил не про таймзону, а про синхронизацию времени (ntp)
но судя по всему тут дело точно не в этом
источник

Е

Евгений in Tarantool
вопрос,  я хочу поставить на прод tnt версию 2.х какая норм работает? 2.4? 2.5? 2.6? 2.7?
@inthrax
источник

Е

Евгений in Tarantool
Вы сами в mail.ru в какую версию больше верите?
источник