本文主要介绍了在社区版产品中出现端口冲突的原因、影响,以及判断、避免和解决端口冲突的方法。同时本文还整理了端口连通性测试的常用方法以及社区版Inceptor的常用端口,方便使用者对其进行查看使用。
所谓的端口,就好像是门牌号一样,客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号。按协议类型划分,可以分为TCP、UDP、IP和ICMP(Internet控制消息协议)等端口。
在社区版中,我们运行用户在同一集群中同时安装多个相关的服务。当集群中已存在正常运行的服务并占据了对应的端口,此时,若在该服务器上重复安装相同的服务时并按照默认端口运行,新安装的服务由于默认端口已经被占据,所以就会产生端口冲突导致服务无法正常安装。
1. 对于出现端口冲突的服务,该服务无法正常安装并运行。
2. 另外,同安装进程中其他等待安装的服务,由于端口冲突服务的安装失败,导致后续安装的服务无法正常运行安装。
社区版允许添加多个服务,比如Quark是可以按需配置多个,不仅可以用于高可用的场景,也可以基于集群规划进行资源分配,按照业务切等等。因此如果要安装在同一节点上时,可以在安装的【服务配置】步骤中对默认端口号进行更改,避免重复安装服务导致的默认端口冲突的问题。但如果 Quark 安装在不同节点的话,比如 quark1 在 IDC1,quark2 在 IDC2,那两个服务的端口一样也可以。
端口更改可参考文末的常用端口合集。
在使用某个端口或是更改端口号是,建议用户在Linux系统终端使用netstat命令查询端口的使用情况。
a. 查看某个具体端口的占用情况:
netstat -anp | grep <port>
b. 查看全部端口占用情况:
netstat -anp
//或
netstat -tln
通常报错如下
Failed to bind to: /0.0.0.0:51888 Caused by: java.net.BindException: Address already in use a
报错中一般会直接报出冲突的端口号,比如该报错中冲突的端口号为 51888。
解决方法
① Manager 对应服务配置中查看该端口号对应信息。
② 运行命令查出端口冲突的进程 ID:
netstat -anp | grep <step1 中的端口号>
③ 查出具体哪些服务端口冲突:
ps -ef | grep <step2 中的进程 ID>
④ 根据情况前往manager对应服务的配置项修改对应的port即可(通常默认+10)。
对于发生端口冲突导致不可用的服务,确定其冲突的端口参数之后在【服务-配置】界面对端口参数进行修改,修改后点击右上角的配置服务,然后重启该服务即可。如下所示:
当服务安装失败时,可以进入集群中的任意节点,运行kubectl获取pod运行在节点上的信息:
kubectl get po -owide |grep <name>
kubectl logs -f <有问题的podid>
输出结果示例如下,下方示例可以看出该服务的端口METASTORE_PORT]的默认端口号9093发生了冲突:
mysql: [Warning] Using a password on the command line interface can be insecure.
+ return 0
++ grep 'data-dictionary\b' /tmp/tmp.hRA8UHvmzd
++ wc -l
+ '[' 1 == 0 ']'
+ return 0
+ set -e
+ checkPort METASTORE_PORT 9093
+ set +x
ERROR: port [9093] for [METASTORE_PORT] has been bound!
1)SSH测试:SSH最常用的功能之一就是实现远程登录主机,可以用指定端口号登录的方式来测试端口连通性。测试过程中出现“Connection established”关键字表示端口通,出现“Connection refused”关键字则不通。此方法适用于TCP协议
ssh -v -p <port> <ip>
2)Telnet测试:telnet命令可以进行远程登录计算机,也可以来测试端口的连通性。测试过程中出现“Connection refused”关键字则不通。此方法适用于TCP协议
telnet <ip> <port>
3)Wget测试:wget是一个下载文件的工具,支持http,https,ftp协议,可用于测试端口连通性。
wget <ip:port>
4)NC(Netcat)测试:nc是一个功能强大的网络工具,对于端口连通性测试来说支持TCP和UDP协议端口测试,也可以对指定范围内的端口进行批量扫描。
nc -vuz <ip> <port>
【核心原因】
运行kubectl命令后获取pod运行在节点上的信息,通过hadoop-yarn-nodemanager的日志发现是端口被kube-apiserv服务占用。
【解决方法】
参考前述内容<怎么判断是出现了端口冲突>以及<其他获取冲突端口信息的方式>章节获取服务端口信息,按照<如何解决端口冲突>章节内容修改对应端口即可。
【核心原因】
查看日志后显示端口被占用
【解决方法】
参考前述章节<怎么判断是出现了端口冲突>以及<其他获取冲突端口信息的方式>章节获取服务端口信息,按照<如何解决端口冲突>章节内容修改对应端口即可。
【核心原因】
可以参考前文的端口清单,可以看到是8888端口存在冲突情况,被其他进程占用了。
【解决方法】
Manager访问服务配置列表,修改端口号之后点击右上角配置服务然后重启服务即可。
以上就是有关端口冲突的相关问题及应对方法,希望对您有所帮助,如果您遇到了相同的问题,欢迎您多多留言🤝