Я использую docker-compose
для запуска нескольких контейнеров с веб-приложением Java с встроенным Ignite 2.6.
Я настроил Ignite, чтобы он использовал SSL.
Если я запускаю узел 1 и жду его полного запуска, а затем запускаю узел 2, они без проблем присоединятся к кластеру.
Но если я запускаю их одновременно (именно так это работает по умолчанию с docker-compose), они оба завершатся с ошибкой и никогда не будут повторяться или возвращаться.
class org.apache.ignite.IgniteException: Unable to establish secure connection. Was remote cluster configured with SSL? [rmtAddr=/10.9.9.1:47501, errMsg="Remote host closed connection during handshake"]
at org.apache.ignite.spi.discovery.tcp.ServerImpl.sendMessageDirectly(ServerImpl.java:1293)
at org.apache.ignite.spi.discovery.tcp.ServerImpl.sendJoinRequestMessage(ServerImpl.java:1046)
at org.apache.ignite.spi.discovery.tcp.ServerImpl.joinTopology(ServerImpl.java:890)
at org.apache.ignite.spi.discovery.tcp.ServerImpl.spiStart(ServerImpl.java:373)
at org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.spiStart(TcpDiscoverySpi.java:1948)
at org.apache.ignite.internal.managers.GridManagerAdapter.startSpi(GridManagerAdapter.java:297)
at org.apache.ignite.internal.managers.discovery.GridDiscoveryManager.start(GridDiscoveryManager.java:915)
at org.apache.ignite.internal.IgniteKernal.startManager(IgniteKernal.java:1721)
at org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:1028)
at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:2014)
at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1723)
at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1151)
at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:649)
at org.apache.ignite.IgniteSpring.start(IgniteSpring.java:66)
at org.apache.ignite.IgniteSpringBean.afterSingletonsInstantiated(IgniteSpringBean.java:172)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:777)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:409)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:291)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4853)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:753)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:729)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:976)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1853)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1002)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385)
at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:757)
at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123)
at java.io.OutputStream.write(OutputStream.java:75)
at org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.writeToSocket(TcpDiscoverySpi.java:1501)
at org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.openSocket(TcpDiscoverySpi.java:1452)
at org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi.openSocket(TcpDiscoverySpi.java:1413)
at org.apache.ignite.spi.discovery.tcp.ServerImpl.sendMessageDirectly(ServerImpl.java:1199)
... 33 more
Caused by: java.io.EOFException: SSL peer shut down incorrectly
at sun.security.ssl.InputRecord.read(InputRecord.java:505)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:983)
... 41 more
2018-11-22 14:47:06.727 INFO localhost-startStop-1 Log4JLogger Command protocol successfully stopped: TCP binary
2018-11-22 14:47:11.733 INFO localhost-startStop-1 Log4JLogger No verification for local node leave has been received from coordinator (will stop node anyway).
У меня естьреализовал пользовательский IpFinder, поэтому он НЕ будет возвращать IP-адреса других узлов, пока Ignite не будет полностью подключен.Это помогло избавиться от этого исключения.И как только они оба полностью инициализируются, они пытаются общаться друг с другом, но ничего не происходит - они все равно не присоединятся к одному кластеру.
2018-11-22 14:45:25.974 INFO tcp-disco-srvr-#3 Log4JLogger TCP discovery accepted incoming connection [rmtAddr=/192.168.160.1, rmtPort=43392]
2018-11-22 14:45:25.983 INFO tcp-disco-srvr-#3 Log4JLogger TCP discovery spawning a new thread for connection [rmtAddr=/192.168.160.1, rmtPort=43392]
2018-11-22 14:45:25.985 INFO tcp-disco-sock-reader-#12 Log4JLogger Started serving remote node connection [rmtAddr=/192.168.160.1:43392, rmtPort=43392]
2018-11-22 14:45:25.993 INFO tcp-disco-sock-reader-#12 Log4JLogger Received ping request from the remote node [rmtNodeId=b940dd90-0b94-42ba-b09a-5e0c7c8599e4, rmtAddr=/192.168.160.1:43392, rmtPort=43392]
2018-11-22 14:45:25.993 INFO tcp-disco-sock-reader-#12 Log4JLogger Finished writing ping response [rmtNodeId=b940dd90-0b94-42ba-b09a-5e0c7c8599e4, rmtAddr=/192.168.160.1:43392, rmtPort=43392]
2018-11-22 14:45:25.994 INFO tcp-disco-sock-reader-#12 Log4JLogger Finished serving remote node connection [rmtAddr=/192.168.160.1:43392, rmtPort=43392
UPD: простой проект , помогающий воспроизвести проблему