1. 防火墙配置

1.1 检查防火墙状态(所有节点)

# Ubuntu/Debian
sudo ufw status

# CentOS/RHEL
sudo firewall-cmd --state

1.2 配置防火墙规则(CentOS/RHEL)

# 添加 Hadoop 所需端口
sudo firewall-cmd --permanent --add-port=8020/tcp   # NameNode
sudo firewall-cmd --permanent --add-port=9000/tcp   # NameNode
sudo firewall-cmd --permanent --add-port=50070/tcp  # NameNode Web UI
sudo firewall-cmd --permanent --add-port=50470/tcp  # NameNode HTTPS
sudo firewall-cmd --permanent --add-port=50090/tcp  # Secondary NameNode
sudo firewall-cmd --permanent --add-port=50075/tcp  # DataNode
sudo firewall-cmd --permanent --add-port=50475/tcp  # DataNode HTTPS
sudo firewall-cmd --permanent --add-port=50010/tcp  # DataNode
sudo firewall-cmd --permanent --add-port=50020/tcp  # DataNode
sudo firewall-cmd --permanent --add-port=8088/tcp   # ResourceManager
sudo firewall-cmd --permanent --add-port=8030-8033/tcp # ResourceManager
sudo firewall-cmd --permanent --add-port=8040-8042/tcp # NodeManager
sudo firewall-cmd --permanent --add-port=10020/tcp  # JobHistoryServer
sudo firewall-cmd --permanent --add-port=19888/tcp  # JobHistoryServer Web UI
sudo firewall-cmd --permanent --add-port=22/tcp     # SSH

# 重新加载防火墙
sudo firewall-cmd --reload

# 查看已开放端口
sudo firewall-cmd --list-ports

1.3 配置防火墙规则(Ubuntu/Debian)

# 启用防火墙
sudo ufw enable

# 开放 Hadoop 所需端口
sudo ufw allow 8020/tcp
sudo ufw allow 9000/tcp
sudo ufw allow 50070/tcp
sudo ufw allow 50470/tcp
sudo ufw allow 50090/tcp
sudo ufw allow 50075/tcp
sudo ufw allow 50475/tcp
sudo ufw allow 50010/tcp
sudo ufw allow 50020/tcp
sudo ufw allow 8088/tcp
sudo ufw allow 8030:8033/tcp
sudo ufw allow 8040:8042/tcp
sudo ufw allow 10020/tcp
sudo ufw allow 19888/tcp
sudo ufw allow 22/tcp

# 查看防火墙状态
sudo ufw status numbered

2. SELinux 配置

2.1 检查 SELinux 状态(CentOS/RHEL)

# 查看当前 SELinux 状态
getenforce

# 查看 SELinux 模式
sestatus

2.2 临时修改 SELinux 模式

# 临时设置为宽松模式
sudo setenforce 0

# 临时设置为强制模式
sudo setenforce 1

2.3 永久修改 SELinux 配置

# 编辑 SELinux 配置文件
sudo vim /etc/selinux/config

# 修改为以下内容
SELINUX=permissive
# 或者完全禁用
SELINUX=disabled

# 重启系统使配置生效
sudo reboot

2.4 Hadoop 相关 SELinux 配置

# 如果保持 SELinux 启用,需要设置以下布尔值
sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P nis_enabled 1

3. 时间同步配置(NTP/Chrony)

3.1 安装时间同步服务

CentOS 8/RHEL 8 及更新版本(使用 chrony):

sudo yum install chrony -y

CentOS 7/RHEL 7:

sudo yum install ntp -y

Ubuntu/Debian:

sudo apt update
sudo apt install ntp -y

3.2 配置时间同步服务

3.2.1 使用 chrony

编辑配置文件 
"/etc/chrony.conf":

sudo vim /etc/chrony.conf

# 添加或修改以下内容(使用国内NTP服务器)
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst

# 允许本地网络同步(如果有内部NTP服务器)
# allow 192.168.1.0/24

启动并启用服务:

sudo systemctl start chronyd
sudo systemctl enable chronyd

3.2.2 使用 ntpd

编辑配置文件 
"/etc/ntp.conf":

sudo vim /etc/ntp.conf

# 添加或修改以下内容
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst

# 限制访问
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

启动并启用服务:

sudo systemctl start ntpd
sudo systemctl enable ntpd

3.3 验证时间同步

chrony 验证:

# 查看时间同步状态
chronyc tracking
chronyc sources -v

# 手动同步时间
sudo chronyc -a makestep

ntpd 验证:

# 查看时间同步状态
ntpq -p

# 查看同步状态
ntpstat

3.4 集群内时间同步

如果无法访问外网,可以设置一个内部主节点作为时间服务器:

在主节点上:

# 编辑 chrony.conf
sudo vim /etc/chrony.conf

# 添加
local stratum 10
allow 192.168.1.0/24

# 重启服务
sudo systemctl restart chronyd

在从节点上:

# 编辑 chrony.conf
sudo vim /etc/chrony.conf

# 注释掉原有 server 行,添加
server hadoop-master iburst

# 重启服务
sudo systemctl restart chronyd

4. 验证集群配置

4.1 防火墙验证

# 检查开放的端口
sudo firewall-cmd --list-ports  # CentOS
sudo ufw status  # Ubuntu

# 测试端口连通性
telnet hadoop-master 8020
nc -zv hadoop-master 9000

4.2 SELinux 验证

# 检查当前模式
getenforce

# 检查布尔值设置
getsebool -a | grep httpd
getsebool -a | grep nis

4.3 时间同步验证

# 检查时间同步状态
chronyc tracking || ntpstat

# 检查各节点时间差异
for node in hadoop-master hadoop-slave1 hadoop-slave2; do
    echo "$node: $(ssh $node date)"
done

# 手动同步时间
sudo chronyc -a makestep || sudo ntpdate ntp.aliyun.com

5. 常见问题解决

5.1 防火墙阻止 Hadoop 服务

# 查看被拒绝的连接
sudo journalctl -xe | grep firewall
sudo grep DROP /var/log/syslog  # Ubuntu
sudo grep DROP /var/log/messages  # CentOS

# 临时禁用防火墙进行测试
sudo systemctl stop firewalld  # CentOS
sudo ufw disable  # Ubuntu

5.2 SELinux 阻止 Hadoop 进程

# 查看 SELinux 日志
sudo ausearch -m avc -ts recent

# 临时设置为宽松模式进行测试
sudo setenforce 0

5.3 时间同步失败

# 检查服务状态
sudo systemctl status chronyd || sudo systemctl status ntpd

# 检查网络连通性
ping ntp.aliyun.com

# 手动同步时间
sudo chronyc -a makestep || sudo ntpdate ntp.aliyun.com

# 检查时间偏差
timedatectl

6. 最佳实践建议

1. 防火墙:
   - 生产环境中建议保持防火墙开启
   - 只开放必要的 Hadoop 服务端口
   - 考虑使用更细粒度的 zone 配置(CentOS)
2. SELinux:
   - 生产环境建议保持 SELinux 为 enforcing 模式
   - 使用 
"audit2allow" 生成自定义策略而非完全禁用
   - 定期检查 SELinux 日志
3. 时间同步:
   - 确保所有节点时间偏差在几毫秒内
   - 使用可靠的 NTP 服务器源
   - 考虑部署本地 NTP 服务器减少外网依赖
4. 安全加固:
   - 定期更新系统和安全补丁
   - 限制 SSH 访问(仅允许密钥认证)
   - 监控系统日志和安全事件

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐