Hi!

We are trying to deploy an ignite cluster(s) into kubernetes and found some
issues.

Sample deployed topology into kubernetes (we need each ignite server cluster
has different discovery port)

Ignite Server(s) cluster to store main data (discoPort 49500)    
\
  Client App with 2 ignite clients (discoPort 49500, discoPort 48500) to
talk with both clusters
/
Ignite Server(s) cluster to store cached data (discoPort 48500)

Apparently, client nodes are unable to discover server nodes using
kubernetes IpFinder whether non default discovery port, for example 49500,
is used on server side ignite configuration.

TcpDiscoverySpi local port configuration is ignored on client mode, so port
47500 is always used to connect to ignite servers (we don't want to use
forceServerMode=true as it is a deprecated feature and may have negative
performance impact)

In general seems that any IpFinder implementation that has this behaviour
(not provides server port when registered addresses were returned) will have
same issue.

Fix suggestion, modify org.apache.ignite.spi.discovery.tcp.ClientImpl
spiStart, apparently this change has no collateral effects:

Original 
   @Override public void spiStart(@Nullable String igniteInstanceName)
throws IgniteSpiException {
        spi.initLocalNode(
            0,
            true);

Fix
   @Override public void spiStart(@Nullable String igniteInstanceName)
throws IgniteSpiException {
        // FIX ignored TcpDiscoverySpi local port configuration on client
mode, takes configured one
        spi.initLocalNode(
            spi.locPort,
            true);
 

How to reproduce issue:

1. Deploy a server node with tcp discovery kubernetes IpFinder and non
default discovery port 49500 into kubernetes

2. Deploy client nodes with tcp discovery kubernetes IpFinder and non
default discovery port 49500 into kubernetes

3. You will see on client nodes logs that will try to connect to servers on
port 47500, instead of configured 49500.

Ignite configuration for both server and client node(s)
[...]
    <property name="discoverySpi">
      <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
        <property name="localPort" value="49500" />
        <property name="localPortRange" value="1" />
        <property name="ipFinder">
          
          <bean
class="org.apache.ignite.spi.discovery.tcp.ipfinder.kubernetes.TcpDiscoveryKubernetesIpFinder">
            <property name="shared" value="true" />
            <property name="namespace" value="myNamespace"/>
            <property name="serviceName" value="server-node"/>
            <property name="masterUrl"
value="https://kubernetes.default.svc.cluster.local:443"/>
            <property name="accountToken"
value="/var/run/secrets/kubernetes.io/serviceaccount/token"/>
          </bean>
        </property>
      </bean>
    </property>
[...]

Regards!

Manu.






--
Sent from: http://apache-ignite-developers.2346864.n4.nabble.com/

Reply via email to