#neo4j #kubernetes
#neo4j #kubernetes
Вопрос:
При запуске причинного кластера Neo4j с тремя узлами (развернутого в кластере Kubernetes) у нашего лидера, похоже, возникли проблемы с репликацией транзакции среди его подписчиков. Мы видим следующую ошибку / предупреждение, появляющееся в debug.log
:
2019-04-09 16:21:52.008 0000 WARN [o.n.c.c.t.TxPullRequestHandler] Streamed transactions [868842--868908] to /10.0.31.11:38968 Connection reset by peer
java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
at sun.nio.ch.IOUtil.write(IOUtil.java:51)
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471)
at io.netty.channel.socket.nio.NioSocketChannel.doWrite(NioSocketChannel.java:403)
at io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:934)
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.forceFlush(AbstractNioChannel.java:367)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:639)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
at java.lang.Thread.run(Thread.java:748)
at org.neo4j.helpers.NamedThreadFactory$2.run(NamedThreadFactory.java:110)
В нашем приложении мы, похоже, обнаруживаем эту ошибку как:
Database not up to the requested version: 868969. Latest database version is 868967
Ошибки возникают, когда мы применяем нагрузки на запись к кластеру с использованием асинхронного рабочего процесса, который считывает фрагменты данных из очереди и отправляет их в базу данных.
Мы рассмотрели очевидных виновников:
- Ограничения пропускной способности сети не достигнуты
- Нет очевидных пиков в процессоре / памяти
- Никаких других исключений Neo4j (в частности, никаких ООМ)
- Мы отсоединили / восстановили кластер и выполнили проверку достоверности базы данных (с ними все в порядке)
- Мы изменили
causal_clustering.pull_interval
до 30 секунд, что, по-видимому, улучшает производительность, но не устраняет эту проблему - Мы устранили ограничения ресурсов в базе данных, чтобы устранить ошибки, которые могли вызвать регулирование в Kubernetes (без достижения фактических пределов процессора), это также не помогло решить проблему