栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

各中间件兼容ipv6环境测试

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

各中间件兼容ipv6环境测试

中间件兼容ipv6环境测试

因为工作需要对使用的中间件做ipv6兼容测试,网上相关资料几乎空白,所以做个笔记浅记一下。
ipv6相关命令:

ping6 [ipv6]

telnet -6 [ipv6]%[ipv6指定网卡] [端口]

ssh [ipv6]%[ipv6网卡]

中间件测试: zookeeper 配置修改

修改zoo.cfg,将ip地址改为[ipv6地址]

# zookeeper cluster,2888为选举端口,3888为心跳端口
server.0=[fe80::f816:3eff:feac:72ca]:2888:3888
server.1=[fe80::f816:3eff:fe2b:ad63]:2888:3888
server.2=[fe80::f816:3eff:fee2:2837]:2888:3888
测试结果

兼容,可同时通过ipv4和ipv6访问

kafka 配置修改

修改server.properties

listeners=PLAINTEXT://[fe80::f816:3eff:feac:72ca]:12900

zookeeper.connect=[fe80::f816:3eff:feac:72ca]:2283,[fe80::f816:3eff:fe2b:ad63]:2283,[fe80::f816:3eff:fee2:2837]:2283/kafka
测试结果

兼容,可同时通过ipv4和ipv6访问

elasticsearch 配置修改

修改elasticsearch.yml文件,将ip地址改为ipv6地址,修改discovery.zen.ping.unicast.hosts配置项,如下所示:

discovery.zen.ping.unicast.hosts: ["[fe80::f816:3eff:feac:72ca]", "[fe80::f816:3eff:fe2b:ad63]", "[fe80::f816:3eff:fee2:2837]"]
测试结果

单节点测试正常启动,无报错
集群测试正常启动,无报错

遗留问题:自己电脑通过ipv6或者ipv4地址未能成功访问es集群,不知是自己电脑访问ipv6配置问题还是es集群有问题。

踩坑:

测试时先测试的单节点再测试的集群,启动单节点的时候,会在data目录生成节点信息数据,启动集群时必须把data目录清除,否则集群节点通信会报错!!!

redis 配置修改

无需特殊修改

测试结果

兼容,可同时通过ipv4和ipv6进行访问

mysql 配置修改

在MySQL启动时绑定地址,在服务启动时使用参数–bind-address=addr配置,其中addr可以是IPv4或者IPv6地址,或者主机名hostname。

或者修改my.cnf配置文件,在[mysqld]选项下增加bind-address = ::配置,把bind-address配置成::可以保证同时支持IPv4和IPv6的TCP/IP的连接。

[mysqld]bind-address=::
测试结果

兼容,可同时通过ipv4和ipv6进行访问

flink 配置修改 修改flink-conf.yaml

配置项jobmanager.rpc.address修改为主机名(实测修改成ipv6地址会报错),并修改/etc/hosts文件,将ipv6地址与主机名做好映射。

修改masters
[fe80::f816:3eff:feac:72ca]:8081
修改slaves(必须带上网卡)
fe80::f816:3eff:feac:72ca%ens3
fe80::f816:3eff:fe2b:ad63%ens3
fe80::f816:3eff:fee2:2837%ens3
测试结果

兼容,可同时通过ipv4和ipv6进行访问

minio

新版本不支持ipv6,RELEASE.2018-08-02T23-11-36Z.tar.gz是支持的,但是RELEASE.2018-08-18T03-49-57Z.zip后已经不再支持了,

信息提示可以配置ipv6地址:

ERROR Unable to validate passed arguments: --address input is invalid
      > Please check --address parameter
      HINT:
        --address binds to a specific ADDRESS:PORT, ADDRESS can be an IPv4/IPv6 address or hostname (default port is ':9000')
        Examples: --address ':443'
                  --address '172.16.34.31:9000'
                  --address '[fe80::da00:a6c8:e3ae:ddd7]:9000'

但是按要求的格式配上后又报错:

ERROR Unable to start the server: listen tcp [fe80::f816:3eff:feac:72ca]:9019: bind: invalid argument
hadoop

不支持ipv6,DataNode使用ipv6地址会报错,官网显示尚未解决。

https://issues.apache.org/jira/browse/HADOOP-17800

hbase

不支持ipv6,尚无解决方案。

java服务端

(摘抄于其他文章)
​ java1.4.2以后已经对ipv6做了兼容,在浏览器中使用IPv6的地址访问web资源,IPv6的地址必须要使用中括号“[]”包起来,如下:
http://[2001:db8:1:0:20c:29ff:fe96:8b55]:6080

​ 由于 Java 的面向对象特性,以及 java.net 包对于 IP 地址的良好封装,从而使得将 Java 应用从 IPv4 环境移植到 IPv4/IPv6 双环境,或者纯 IPv6 环境变得异常简单。通常我们需要做的仅是检查代码并移除明码编写的 IPv4 地址,用主机名来替代则可。

​ 除此以外,对于一些特殊的需求,Java 还提供了 InetAddress 的两个扩展类以供使用:Inet4Address 和 Inet6Address,其中封装了对于 IPv4 和 IPv6 的特殊属性和行为。然而由于 Java 的多态特性,使得程序员一般只需要使用父类 InetAddress,Java 虚拟机可以根据所封装的 IP 地址类型的不同,在运行时选择正确的行为逻辑。所以在多数情况下,程序员并不需要精确控制所使用的类型及其行为,一切交给 Java 虚拟机即可。

另外,在 IPv4/IPv6 双环境中,对于使用 Java 开发的网络应用,比较值得注意的是以下两个 IPv6 相关的 Java 虚拟机系统属性。

`java.net.preferIPv4Stack= java.net.preferIPv6Addresses= `

preferIPv4Stack(默认 false)表示如果存在 IPv4 和 IPv6 双栈,Java 程序是否优先使用 IPv4 套接字。默认值是优先使用 IPv6 套接字,因为 IPv6 套接字可以与对应的 IPv4 或 IPv6 主机进行对话;相反如果优先使用 IPv4,则只不能与 IPv6 主机进行通信。

preferIPv6Addresses(默认 false)表示在查询本地或远端 IP 地址时,如果存在 IPv4 和 IPv6 双地址,Java 程序是否优先返回 IPv6 地址。Java 默认返回 IPv4 地址主要是为了向后兼容,以支持旧有的 IPv4 验证逻辑,以及旧有的仅支持 IPv4 地址的服务。

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1040520.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号