netstat -anp | grep <port>
复制
什么是端口?
所谓的端口,就好像是门牌号一样,客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正地访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号。
如何避免出现端口冲突,保障集群顺利安装以及稳定运行
- 方法1:
-
基于集群规划进行资源分配,按照业务切等等。因此如果要安装在同一节点上时,可以在安装的【服务配置】步骤中对默认端口号进行更改,避免重复安装服务导致的默认端口冲突的问题。但如果 Quark 安装在不同节点的话,比如 quark1 在 IDC1,quark2 在 IDC2,那两个服务的端口一样也可以。
社区版常用的端口列表:https://community.transwarp.cn/question/751
- 方法2:
-
在使用某个端口或是更改端口号时,建议用户在Linux系统终端使用netstat命令查询端口的使用情况。
-
查看某个具体端口的占用情况:
-
查看全部端口占用情况:
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>
复制
-
如何解决端口冲突
- 【解决方法】
-
对于发生端口冲突导致不可用的服务,确定其冲突的端口参数之后在【服务-配置】界面对端口参数进行修改(一般默认+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!
复制
端口连通性测试
-
SSH测试:SSH最常用的功能之一就是实现远程登录主机,可以用指定端口号登录的方式来测试端口连通性。测试过程中出现“Connection established”关键字表示端口通,出现“Connection refused”关键字则不通。此方法适用于TCP协议
ssh -v -p <port> <ip>
复制 -
Telnet测试:telnet命令可以进行远程登录计算机,也可以来测试端口的连通性。测试过程中出现“Connection refused”关键字则不通。此方法适用于TCP协议
telnet <ip> <port>
复制 -
Wget测试:wget是一个下载文件的工具,支持http,https,ftp协议,可用于测试端口连通性。
wget <ip:port>
复制 -
NC(Netcat)测试:nc是一个功能强大的网络工具,对于端口连通性测试来说支持TCP和UDP协议端口测试,也可以对指定范围内的端口进行批量扫描。
nc -vuz <ip> <port>
复制
一些排错示例
通过TOS启动yarn-nodemanager一个节点启动失败,pod无法启动,状态显示CCrashLoopBackOff
- 【报错信息】
-
运行kubectl命令后获取pod运行在节点上的信息,通过hadoop-yarn-nodemanager的日志发现是端口被kube-apiserv服务占用。
- 【解决方法】
-
参考前述章节<怎么判断是出现了端口冲突>以及<其他获取冲突端口信息的方式>章节获取服务端口信息,按照<如何解决端口冲突>章节内容修改对应端口即可。
初始化HDFS失败,启动NameNode报错
- 【报错信息】
-
- 【核心原因】
-
查看日志后显示端口被占用
- 【解决方法】
-
参考前述章节<怎么判断是出现了端口冲突>以及<其他获取冲突端口信息的方式>章节获取服务端口信息,按照<如何解决端口冲突>章节内容修改对应端口即可。
启动Quark失败,查看/var/log下的server日志,报错显示“Failed to bind SparkUI, java.net.BindException:Address already in use (Bind failed): Service‘SparkUI’failed after 0 retries!”
- 【报错信息】
-
- 【核心原因】
-
可以参考该链接<https://community.transwarp.cn/question/751>文末的端口清单,可以看到是8888端口存在冲突情况,被其他进程占用了。
- 【解决方法】
-
Manager访问服务配置列表,修改端口号之后点击右上角配置服务然后重启服务即可。