jgroups-kubernetes BindException
jgroups-kubernetes BindException
我在springboot项目中使用了infinispan,知道jgroups在infinispan中完成节点通信和发现。我已经可以在码头上进行多实例相互发现。现在问题出在 Kubernetes 上。
我使用的jgroups配置文件default-jgroups-kubernetes.xml
是在infinispan的官方包中找到的。我只修改了 tcp.port
和 KUBE_PING
标签:
<config xmlns="urn:org:jgroups"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/jgroups-4.0.xsd">
<TCP bind_addr="${jgroups.tcp.address:match-interface:eth.*}"
bind_port="${jgroups.tcp.port:30001}"
enable_diagnostics="false"
thread_naming_pattern="pl"
send_buf_size="640k"
sock_conn_timeout="300"
bundler_type="no-bundler"
logical_addr_cache_expiration="360000"
thread_pool.min_threads="${jgroups.thread_pool.min_threads:0}"
thread_pool.max_threads="${jgroups.thread_pool.max_threads:200}"
thread_pool.keep_alive_time="60000"
/>
<kubernetes.KUBE_PING
port_range="3000"
namespace="default"
masterProtocol="https"
masterHost="https://192.1.5.110:32305"
masterPort="32305"
/>
<MERGE3 min_interval="10000"
max_interval="30000"
/>
<FD_SOCK />
<!-- Suspect node `timeout` to `timeout + timeout_check_interval` millis after the last heartbeat -->
<FD_ALL timeout="10000"
interval="2000"
timeout_check_interval="1000"
/>
<VERIFY_SUSPECT timeout="1000"/>
<pbcast.NAKACK2 use_mcast_xmit="false"
xmit_interval="100"
xmit_table_num_rows="50"
xmit_table_msgs_per_row="1024"
xmit_table_max_compaction_time="30000"
resend_last_seqno="true"
/>
<UNICAST3 xmit_interval="100"
xmit_table_num_rows="50"
xmit_table_msgs_per_row="1024"
xmit_table_max_compaction_time="30000"
/>
<pbcast.STABLE stability_delay="500"
desired_avg_gossip="5000"
max_bytes="1M"
/>
<pbcast.GMS print_local_addr="false"
join_timeout="${jgroups.join_timeout:5000}"
/>
<MFC max_credits="2m"
min_threshold="0.40"
/>
<FRAG3/>
</config>
顺便介绍一下jgroups-kubernetes
的依赖
我用了上面的配置,然后出现如下异常:
...
Caused by: java.net.BindException: no port available in range [30001 .. 30051] (bind_addr=xxxxx%eth0)
at org.jgroups.util.Util.createServerSocket(Util.java:3512)
...
其中 xxxxx 表示 IPv6 地址
我不知道如何解决这个异常。我试过把TCP端口改成7800,然后范围不变。结果还是上面的异常,只是信息变成了[7800..7850]
期待您的help.Thanks!
尝试使用 IPv4 或 IPv6,但不要混合使用两者。可以通过将 system 属性 java.net.preferIPv4Stack
设置为 true 来强制使用 IPv4。
3000 的 port_range
没有任何意义,请使用较小的数字,例如 10,具体取决于您在同一 pod 中 运行 的容器数量(1 也可能有效)。
在 masterHost
中,您还设置了端口,这不是必需的,实际上可能会失败。事实上,需要设置 3 个 master*
属性中的 none,因为 Kubernetes 会自行设置这些属性。
我在springboot项目中使用了infinispan,知道jgroups在infinispan中完成节点通信和发现。我已经可以在码头上进行多实例相互发现。现在问题出在 Kubernetes 上。
我使用的jgroups配置文件default-jgroups-kubernetes.xml
是在infinispan的官方包中找到的。我只修改了 tcp.port
和 KUBE_PING
标签:
<config xmlns="urn:org:jgroups"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/jgroups-4.0.xsd">
<TCP bind_addr="${jgroups.tcp.address:match-interface:eth.*}"
bind_port="${jgroups.tcp.port:30001}"
enable_diagnostics="false"
thread_naming_pattern="pl"
send_buf_size="640k"
sock_conn_timeout="300"
bundler_type="no-bundler"
logical_addr_cache_expiration="360000"
thread_pool.min_threads="${jgroups.thread_pool.min_threads:0}"
thread_pool.max_threads="${jgroups.thread_pool.max_threads:200}"
thread_pool.keep_alive_time="60000"
/>
<kubernetes.KUBE_PING
port_range="3000"
namespace="default"
masterProtocol="https"
masterHost="https://192.1.5.110:32305"
masterPort="32305"
/>
<MERGE3 min_interval="10000"
max_interval="30000"
/>
<FD_SOCK />
<!-- Suspect node `timeout` to `timeout + timeout_check_interval` millis after the last heartbeat -->
<FD_ALL timeout="10000"
interval="2000"
timeout_check_interval="1000"
/>
<VERIFY_SUSPECT timeout="1000"/>
<pbcast.NAKACK2 use_mcast_xmit="false"
xmit_interval="100"
xmit_table_num_rows="50"
xmit_table_msgs_per_row="1024"
xmit_table_max_compaction_time="30000"
resend_last_seqno="true"
/>
<UNICAST3 xmit_interval="100"
xmit_table_num_rows="50"
xmit_table_msgs_per_row="1024"
xmit_table_max_compaction_time="30000"
/>
<pbcast.STABLE stability_delay="500"
desired_avg_gossip="5000"
max_bytes="1M"
/>
<pbcast.GMS print_local_addr="false"
join_timeout="${jgroups.join_timeout:5000}"
/>
<MFC max_credits="2m"
min_threshold="0.40"
/>
<FRAG3/>
</config>
顺便介绍一下jgroups-kubernetes
的依赖我用了上面的配置,然后出现如下异常:
...
Caused by: java.net.BindException: no port available in range [30001 .. 30051] (bind_addr=xxxxx%eth0)
at org.jgroups.util.Util.createServerSocket(Util.java:3512)
...
其中 xxxxx 表示 IPv6 地址
我不知道如何解决这个异常。我试过把TCP端口改成7800,然后范围不变。结果还是上面的异常,只是信息变成了[7800..7850]
期待您的help.Thanks!
尝试使用 IPv4 或 IPv6,但不要混合使用两者。可以通过将 system 属性 java.net.preferIPv4Stack
设置为 true 来强制使用 IPv4。
3000 的 port_range
没有任何意义,请使用较小的数字,例如 10,具体取决于您在同一 pod 中 运行 的容器数量(1 也可能有效)。
在 masterHost
中,您还设置了端口,这不是必需的,实际上可能会失败。事实上,需要设置 3 个 master*
属性中的 none,因为 Kubernetes 会自行设置这些属性。