我试图在群集群上运行apacheignite / ignite图像。 当我扩展点火服务时,节点不会发现彼此。
这是我的stack.yml:
version: "3.3"
services:
ignite:
image: apacheignite/ignite
dns: 172.26.80.129
environment:
- "CONFIG_URI=http://myserver.mycompany.com/ignite/config.xml"
networks:
- ignite-net
networks:
ignite-net:
driver: overlay
这是我的config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="publicThreadPoolSize" value="1"/>
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="localPort" value="15900"/>
<property name="localPortRange" value="79"/>
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<value>ignite:15900..15979</value>
</list>
</property>
</bean>
</property>
</bean>
</property>
<property name="peerClassLoadingEnabled" value="true"/>
</bean>
</beans>
我做错了什么?
答案 0 :(得分:1)
您应该使用多播发现,以便他们在不列出地址的情况下找到彼此。 org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder
或者,您应列出所有(或至少几个)地址:
<property name="addresses">
<list>
<value>node1.ignite:15900..15979</value>
<value>node2.ignite:15900..15979</value>
...
</list>
</property>
请注意,所有节点都应该可以解析这些主机名。使用IP地址通常更容易。
然后再次,文档中有huge number of ways to do discovery。
最后一个是,使用VM发现,Ignite具有一种模式,其中主机通过环境变量传递。要使用它,您应该完全删除addresses
属性。并使用其他节点(或至少一个公共地址)的地址填充IGNITE_TCP_DISCOVERY_ADDRESSES
env var。逗号分开。
答案 1 :(得分:0)
这是一个有效的解决方案。 我添加了一个使用Ignite集群的客户端服务,使其成为一个更现实的例子。
我不明白我的帖子中的问题是什么,但这是有效的。当缩放点火服务时,客户端会看到所有Ignite节点(包括ignite-master)。
警告:不得用于生产。 ignite-master容器是单点故障。向上或向下扩展此服务会导致整个群集失败。
stack.yml:
version: "3"
services:
tomcat-client:
image: me/myimage.ws
depends_on:
- ignite-master
ports:
- "15280:8080"
networks:
- ignite-test-net
environment:
- CONFIG_URI=http://myserver.mycompany.com/ignite/config.xml
ignite:
image: apacheignite/ignite
depends_on:
- ignite-master
environment:
- "CONFIG_URI=http://myserver.mycompany.com/ignite/config.xml"
networks:
- ignite-test-net
ignite-master:
image: apacheignite/ignite
environment:
- "CONFIG_URI=http://myserver.mycompany.com/ignite/config.xml"
networks:
- ignite-test-net
networks:
ignite-test-net:
driver: overlay
和config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="grid.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
<property name="publicThreadPoolSize" value="1"/>
<property name="discoverySpi">
<bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
<property name="ipFinder">
<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
<property name="addresses">
<list>
<value>ignite-master</value>
</list>
</property>
</bean>
</property>
</bean>
</property>
<property name="peerClassLoadingEnabled" value="true"/>
</bean>
</beans>
答案 2 :(得分:0)
不幸的是,多播发现在Docker群集群中不起作用,但是对于少数点燃节点,您可以使用以下堆栈文件片段:
ignite:
image: apacheignite/ignite
hostname: node-{{ .Task.Slot }}
deploy:
replicas: 8
使用Task.Slot
的模板占位符手动设置主机名。
这样的结果是,在您的堆栈中创建了8个服务任务,它们在群集中可以通过其主机名node-1
,node-2
,...,node-8
进行访问。
您可以将所有或某些这些主机名用于Iginite配置文件。
此解决方案不能替代生产级节点发现(可以通过Zookeeper,Consul等来实现),但是可以在基于Docker的小型Ignite环境中提供一定的灵活性。