2、Linux基础与集群搭建:SSH免密登录、网络配置、JDK安装、ZooKeeper集群部署
好,咱们直接进入正题。大数据平台不是单机游戏,你想想看,一台机器跑 Hadoop 那叫玩具。真正的生产环境,少说三五台,多则上百台。所以,搭建集群是第一步,也是最容易踩坑的一步。
我个人习惯,先把 Linux 基础操作捋顺了,再动手。别急着敲命令,先搞清楚我们要干什么:让几台机器能互相认识、能无密码串门、装上 Java 环境、最后把 ZooKeeper 这个协调员给部署起来。嗯,这套流程我重复过不下五十次了,闭着眼都能走通,但每次新环境还是会遇到小惊喜。
2.1 网络配置:让机器互相找到对方
集群里的机器,说白了就是一群独立的电脑。它们之间要通信,首先得有个固定的门牌号——也就是静态 IP。DHCP 自动分配那种,今天一个 IP 明天一个 IP,集群直接崩给你看。
我在项目中遇到过最离谱的一次,是某台机器的 IP 被 DHCP 重新分配了,结果整个 HDFS 集群以为那台机器挂了,开始疯狂复制数据块,把网络带宽吃光了。从那以后,我每台机器都配静态 IP。
核心操作:修改 /etc/sysconfig/network-scripts/ifcfg-ens33(网卡名可能不同)
TYPE=Ethernet
BOOTPROTO=static # 静态IP
IPADDR=192.168.1.101 # 固定IP
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
ONBOOT=yes # 开机自启
配完之后,记得重启网络服务:systemctl restart network。然后 ping 一下网关,通了就说明网络没问题。
小技巧:我习惯把主机名也改掉,比如 node1、node2、node3。修改 /etc/hostname,然后 /etc/hosts 里加上所有机器的映射。这样以后用主机名通信,比记 IP 舒服多了。
192.168.1.101 node1
192.168.1.102 node2
192.168.1.103 node3
2.2 SSH 免密登录:告别每次输密码
集群搭建过程中,你会频繁地在机器之间跳来跳去。如果每次都要输密码,那效率太低了。更重要的是,很多分布式框架(比如 Hadoop、Spark)在启动时,会通过 SSH 去拉起其他节点的进程。没有免密,你就等着手动输入密码到崩溃吧。
原理其实很简单:用 RSA 非对称加密。每台机器生成一对密钥,把公钥发给别人。这样你访问别人时,对方用你的公钥验证你的身份。
我曾经在部署一个 20 台节点的集群时,因为 SSH 免密没配好,导致整个集群启动失败。排查了半天,发现是其中一台机器的 authorized_keys 权限不对。嗯,这里要注意:authorized_keys 文件的权限必须是 600,否则 SSH 会直接忽略它。
避坑指南:我曾经因为 authorized_keys 权限是 644,折腾了整整两个小时。记住:chmod 600 ~/.ssh/authorized_keys,目录权限是 700。
操作步骤很简单,三步走:
- 生成密钥对:
ssh-keygen -t rsa -P ''(-P '' 表示空密码) - 复制公钥到目标机器:
ssh-copy-id node2 - 验证:
ssh node2 'hostname',如果不输密码直接返回主机名,就成功了
注意,每台机器都要做这个操作。我建议在 node1 上生成密钥,然后把公钥分发给所有机器,包括自己(localhost 也要配)。这样 node1 就能免密登录所有节点了。其他节点同理。
2.3 JDK 安装:Java 环境是基石
大数据生态圈,十有八九都是 Java 写的。Hadoop、ZooKeeper、HBase、Kafka……清一色 Java。所以 JDK 是必须的。
我个人习惯用 Oracle JDK 8,虽然现在都出到 17 了,但大数据框架对 JDK 8 的支持最稳定。你想想看,生产环境求的是稳,不是新。我见过有人用 JDK 11 跑 Hadoop 3.x,结果一堆兼容性问题,最后乖乖换回 8。
安装步骤:
# 1. 下载 jdk-8u202-linux-x64.tar.gz
# 2. 解压到 /usr/local/
tar -zxvf jdk-8u202-linux-x64.tar.gz -C /usr/local/
# 3. 配置环境变量
vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_202
export PATH=$PATH:$JAVA_HOME/bin
# 4. 使配置生效
source /etc/profile
# 5. 验证
java -version
输出类似这样,就说明成了:
java version "1.8.0_202"
Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
小提示:所有节点都要装 JDK,版本必须一致。我习惯在 node1 上装好,然后 scp 整个目录到其他节点,再配环境变量。这样省事,还保证版本统一。
2.4 ZooKeeper 集群部署:分布式系统的协调员
ZooKeeper 是什么?说白了,就是一个分布式小秘书。它帮你管理配置、做服务发现、处理分布式锁。Hadoop 的 HA(高可用)、Kafka 的集群管理,都离不开它。
ZooKeeper 集群一般部署奇数台,比如 3 台、5 台。为什么是奇数?因为 ZooKeeper 用投票机制选主,奇数台能避免平局。我见过有人部署 4 台,结果一台挂了之后,剩下 3 台能正常工作,但万一再挂一台就只剩 2 台了,达不到多数派,整个集群就废了。所以,3 台起步,5 台更稳。
部署步骤(以 3 台为例):
# 1. 下载并解压
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz
tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz -C /usr/local/
mv /usr/local/apache-zookeeper-3.6.3-bin /usr/local/zookeeper
# 2. 创建数据目录
mkdir -p /data/zookeeper/data
mkdir -p /data/zookeeper/logs
# 3. 修改配置文件
cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg
vi /usr/local/zookeeper/conf/zoo.cfg
zoo.cfg 的核心配置如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181
# 集群节点配置
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
这里解释一下端口:2181 是客户端连接端口,2888 是节点间通信端口,3888 是选举端口。每个节点都要配一样的 zoo.cfg。
然后,在每个节点的 /data/zookeeper/data 目录下,创建一个 myid 文件:
# node1 上执行
echo "1" > /data/zookeeper/data/myid
# node2 上执行
echo "2" > /data/zookeeper/data/myid
# node3 上执行
echo "3" > /data/zookeeper/data/myid
这个 myid 文件里的数字,必须和 zoo.cfg 里的 server.id 对应。我曾经犯过一个低级错误:三台机器的 myid 都写了 1,结果 ZooKeeper 启动后互相不认,日志里全是连接拒绝。排查了半天才发现是 myid 没改。
避坑指南:启动 ZooKeeper 之前,先检查防火墙。2181、2888、3888 这三个端口必须放行。我习惯直接关防火墙测试,确认没问题后再开白名单。命令:systemctl stop firewalld。
启动集群:
# 每台机器都执行
/usr/local/zookeeper/bin/zkServer.sh start
# 查看状态
/usr/local/zookeeper/bin/zkServer.sh status
正常的话,会有一台显示 leader,其余显示 follower。这就说明集群搭建成功了。
验证小技巧:用 zkCli.sh 连接任意一台机器,执行 ls / 看看能不能返回空节点列表。能返回,说明 ZooKeeper 服务正常。我每次部署完都会跑一遍这个验证,心里才踏实。
/usr/local/zookeeper/bin/zkCli.sh -server node1:2181
ls /
# 输出:[zookeeper]
好了,到这里,Linux 基础环境就搭好了。网络通了,SSH 免密配了,JDK 装了,ZooKeeper 集群也跑起来了。下一章,我们开始搭建 Hadoop 集群,那才是真正的大数据核心。
记住一句话:基础不牢,地动山摇。这些步骤看着简单,但每一步都关系到后续的稳定性。别嫌麻烦,多检查几遍。我在生产环境吃过太多亏了,都是因为当初偷懒少配了一个参数。
公众号:蓝海资料掘金营,微信deep3321