问题描述:
controller服务器不能连接到另外两台kafka服务器,但是telnet却可以通。
WARN [RequestSendThread controllerId=137] Controller 137's connection to broker 192.168.154.138:9092 (id: 138 rack: null) was unsuccessful (kafka.controller.RequestSendThread)
java.net.SocketTimeoutException: Failed to connect within 30000 ms
at kafka.controller.RequestSendThread.brokerReady(ControllerChannelManager.scala:272)
at kafka.controller.RequestSendThread.doWork(ControllerChannelManager.scala:225)
at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:82)
[2019-09-02 17:30:45,535] WARN [RequestSendThread controllerId=137] Controller 137's connection to broker 192.168.154.139:9092 (id: 139 rack: null) was unsuccessful (kafka.controller.RequestSendThread)
java.net.SocketTimeoutException: Failed to connect within 30000 ms
at kafka.controller.RequestSendThread.brokerReady(ControllerChannelManager.scala:272)
at kafka.controller.RequestSendThread.doWork(ControllerChannelManager.scala:225)
at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:82)
详细问题描述:
服务器环境:
服务器一:192.168.154.137
服务器二:192.168.154.138
服务器三:192.168.154.139
服务器一无法连接服务器二,三,服务器二三无法互联,但可以连接服务器一。
服务器之间可以ping通,但是telnet无法与服务器二三通信。
问题发现:
服务器二三的防火墙没有设置白名单,而服务器一的防火墙已关闭。
解决措施:
一:将二三的防火墙关闭,一劳永逸。
service iptable stop
简单粗暴的同时,安全性略有降低。
二:为二三的防火墙设置白名单,将我们的端口放行。
在设置之前我们需要先了解一下防火墙的配置文件所代表的含义
1、工作机制
iptables在linux内核中涉及的五个位置:
- 内核空间中:从一个网络接口进来,到另一个网络接口去的
- 数据包从内核流入用户空间的
- 数据包从用户空间流出的
- 进入/离开本机的外网接口
- 进入/离开本机的内网接口
这五个位置也被称为五个钩子函数(hook functions),也叫五个规则链。
- PREROUTING (路由前)
- INPUT (数据包流入口)
- FORWARD (转发管卡)
- OUTPUT(数据包出口)
- POSTROUTING(路由后)
这是NetFilter规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链。
2、iptables规则写法
iptables定义规则的方式比较复杂:
格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION
- -t table :3个filter nat mangle
- COMMAND:定义如何对规则进行管理
- chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的
- CRETIRIA:指定匹配标准
- -j ACTION :指定如何进行处理
eg:
比如:不允许202.110.0.0/24的进行访问。
iptables -t filter -A INPUT -s 202.110.0.0/16 -p udp --dport 53 -j DROP
当然你如果想拒绝的更彻底:
iptables -t filter -R INPUT 1 -s 202.110.0.0/16 -p udp --dport 53 -j REJECT
3、iptables配置文件
iptables配置文件在系统的/etc/sysconfig/目录下,主要记录系统中iptables的规则,下面是定义某些ip为系统可访问白名单的配置,主要是在INPUT (数据包流入口)这个规则下拦截白名单以外的ip进行具体端口的访问:
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2888 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3888 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9092 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
我们在后面为我们的服务追加一个白名单记录,这样子,防火墙就不会阻拦我们了。
最后我们需要对防火墙重启并保存
service iptables restart
service iptables save
最后问题完美解决