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。

操作步骤很简单,三步走:

  1. 生成密钥对:ssh-keygen -t rsa -P ''(-P '' 表示空密码)
  2. 复制公钥到目标机器:ssh-copy-id node2
  3. 验证: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