跳转到内容

集群化环境前置准备

课程介绍

接下来我们学习集群化环境的前置准备。大数据应用通常需要多台服务器协同工作,这时就需要搭建集群环境。使用VMware克隆功能可以快速复制虚拟机,节省安装系统的时间。克隆后需要为每台虚拟机配置独立的IP地址和主机名,确保网络不冲突。还会配置主机名映射和SSH免密登录,方便节点间的通信。这些都是搭建大数据集群的前置准备工作。

1. 集群化环境概述

1. 1 什么是集群化环境

定义: 集群化环境是指由多台服务器(节点)组成的分布式系统,这些服务器通过网络互相通信,协同工作以提供更高的性能、可靠性和可扩展性。

核心特点:

  • 分布式:数据和计算分布在多台服务器上
  • 协同工作:节点之间通过网络协同工作
  • 高可用性:单点故障不影响整体服务
  • 可扩展性:通过增加节点可以轻松扩展
  • 负载均衡:请求可以分发到不同节点

应用场景:

  • 大数据存储(Hadoop HDFS)
  • 分布式计算(Spark)
  • 消息队列(Kafka)
  • 分布式协调(ZooKeeper)
  • 分布式数据库(HBase)

1. 2 单机模式 vs 集群模式对比

特性单机模式集群模式
服务器数量1台多台(3台或更多)
性能受限于单机资源多机协同,性能更高
可靠性单点故障风险高可用,容错能力强
扩展性扩展困难易于横向扩展
复杂度简单较复杂
成本

2. 虚拟机克隆

2. 1 VMware克隆功能介绍

克隆类型:

  • 完整克隆:创建一个完全独立的虚拟机副本,占用更多磁盘空间
  • 链接克隆:基于原始虚拟机的快照创建,占用空间少,但依赖原始虚拟机

推荐选择:

  • 完整克隆(更适合生产环境和独立部署)

2. 2 克隆操作步骤

步骤1:关闭原始虚拟机

bash
# 在虚拟机中执行关机命令
poweroff

步骤2:在VMware中创建集群文件夹

  • 在VMware主界面,右键选择"新建文件夹"
  • 命名为"集群"或"虚拟机集群"
  • 点击"确定"

2. 3 克隆NODE1

步骤1:右键选择原始虚拟机

  • 在VMware虚拟机列表中,右键点击原始虚拟机(Rocky Linux 9)
  • 选择"管理" → "克隆"

步骤2:选择克隆源

  • 从虚拟机当前状态克隆
  • 或从快照克隆(推荐选择干净的快照)

步骤3:配置克隆选项

  • 克隆类型:选择"创建完整克隆"
  • 虚拟机名称:输入"NODE1"
  • 位置:选择合适的存储路径

步骤4:等待克隆完成

  • 克隆过程可能需要几分钟
  • 完成后会显示成功提示

按照相同步骤,克隆出NODE2和NODE3两台虚拟机。

2. 4 克隆完成后的虚拟机管理

虚拟机信息:

虚拟机名称原始主机名原始IP地址状态
NODE1Rocky Linux 9192.168.88.130待配置
NODE2Rocky Linux 9192.168.88.130待配置
NODE3Rocky Linux 9192.168.88.130待配置

注意事项:

  • 克隆后的虚拟机IP地址和主机名都相同,需要分别修改
  • 确保三台虚拟机的IP地址不冲突
  • 建议将三台虚拟机移动到"集群"文件夹中统一管理

3. 配置IP地址和主机名

3. 1 配置NODE1

步骤1:启动NODE1虚拟机

  • 在VMware中启动NODE1虚拟机
  • 等待系统启动完成

步骤3:切换到root用户

bash
# 切换到root用户
su -
bash
# 输入密码:123456

步骤5:修改主机名

bash
# 查看当前主机名
hostname

步骤6:修改主机名为NODE1

bash
# 修改主机名为NODE1
hostnamectl set-hostname NODE1

步骤7:修改IP地址

bash
# 查看当前网络连接名称
nmcli connection show

# 使用nmcli配置静态IP(以Wired connection 1为例)
nmcli connection modify "Wired connection 1" \
  ipv4.method manual \
  ipv4.addresses 192.168.88.131/24 \
  ipv4.gateway 192.168.88.2 \
  ipv4.dns 192.168.88.2 \
  connection.autoconnect yes

步骤8:重启网络连接

bash
# 重启网络连接使配置生效
nmcli connection up "Wired connection 1"

步骤11:验证IP地址

bash
# 查看IP地址
ip addr

3. 2 配置NODE2

步骤1:启动NODE2虚拟机

  • 在VMware中启动NODE2虚拟机
  • 等待系统启动完成

步骤3:切换到root用户

bash
# 切换到root用户
su -
bash
# 输入密码:123456

步骤5:修改主机名

bash
# 查看当前主机名
hostname

步骤6:修改主机名为NODE2

bash
# 修改主机名为NODE2
hostnamectl set-hostname NODE2

步骤8:修改IP地址

bash
# 使用nmcli配置静态IP(以Wired connection 1为例)
nmcli connection modify "Wired connection 1" \
  ipv4.method manual \
  ipv4.addresses 192.168.88.132/24 \
  ipv4.gateway 192.168.88.2 \
  ipv4.dns 192.168.88.2 \
  connection.autoconnect yes

步骤9:重启网络连接

bash
# 重启网络连接使配置生效
nmcli connection up "Wired connection 1"

步骤13:验证IP地址

bash
# 查看IP地址
ip addr

3. 3 配置NODE3

步骤1:启动NODE3虚拟机

  • 在VMware中启动NODE3虚拟机
  • 等待系统启动完成

步骤3:切换到root用户

bash
# 切换到root用户
su -
bash
# 输入密码:123456

步骤5:修改主机名

bash
# 查看当前主机名
hostname

步骤6:修改主机名为NODE3

bash
# 修改主机名为NODE3
hostnamectl set-hostname NODE3

步骤8:修改IP地址

bash
# 使用nmcli配置静态IP(以Wired connection 1为例)
nmcli connection modify "Wired connection 1" \
  ipv4.method manual \
  ipv4.addresses 192.168.88.133/24 \
  ipv4.gateway 192.168.88.2 \
  ipv4.dns 192.168.88.2 \
  connection.autoconnect yes

步骤9:重启网络连接

bash
# 重启网络连接使配置生效
nmcli connection up "Wired connection 1"

步骤13:验证IP地址

bash
# 查看IP地址
ip addr

3. 4 三台虚拟机配置汇总

虚拟机名称主机名IP地址状态
NODE1NODE1192.168.88.131已配置
NODE2NODE2192.168.88.132已配置
NODE3NODE3192.168.88.133已配置

注意事项:

  • 克隆后的虚拟机IP地址和主机名都相同,需要分别修改
  • 确保三台虚拟机的IP地址不冲突
  • 建议将三台虚拟机移动到"集群"文件夹中统一管理

4. 配置Xshell连接

4. 1 添加SSH连接

步骤1:打开Xshell

  • 点击连接管理器中的"文件夹"图标
  • 点击"添加新连接"

步骤2:配置NODE1连接

  • 连接类型:SSH
  • 名称:NODE1
  • 主机:192.168.88.131
  • 端口:22
  • 用户名:root
  • 密码:123456
  • 点击"确定"

步骤3:配置NODE2连接

  • 连接类型:SSH
  • 名称:NODE2
  • 主机:192.168.88.132
  • 其他配置同NODE1
  • 点击"确定"

步骤4:配置NODE3连接

  • 连接类型:SSH
  • 名称:NODE3
  • 主机:192.168.88.133
  • 其他配置同NODE1
  • 点击"确定"

4. 2 测试连接

步骤1:连接NODE1

  • 双击NODE1连接
  • 点击"接受"(首次连接会提示主机密钥验证)
  • 验证连接成功

步骤2:连接NODE2

  • 双击NODE2连接
  • 点击"接受"
  • 验证连接成功

步骤3:连接NODE3

  • 双击NODE3连接
  • 点击"接受"
  • 验证连接成功

5. 配置主机名映射

5. 1 什么是主机名映射

定义: 主机名映射(Host Mapping)是通过修改hosts文件,将IP地址与主机名建立对应关系,使得用户可以通过主机名而不是IP地址来访问服务器。

优势:

  • 简化访问方式,无需记忆复杂的IP地址
  • 提高配置文件的可读性
  • 便于集群管理和维护

5. 2 配置Windows系统hosts文件

步骤1:以管理员身份打开记事本

  • 右键点击"记事本"
  • 选择"以管理员身份运行"

步骤2:打开hosts文件

  • 在记事本中,点击"文件" → "打开"
  • 导航到:C:\Windows\System32\drivers\etc
  • 文件类型选择"所有文件"
  • 选择"hosts"文件并打开

步骤3:添加主机名映射 在hosts文件末尾添加以下内容:

ini
192.168.88.131    NODE1
192.168.88.132    NODE2
192.168.88.133    NODE3

步骤4:保存文件

  • Ctrl+S保存文件

5. 3 配置Linux系统hosts文件

步骤1:配置NODE1的hosts文件

bash
# 在NODE1上编辑hosts文件
vim /etc/hosts

步骤2:添加主机名映射 在文件末尾添加以下内容:

bash
192.168.88.131    NODE1
192.168.88.132    NODE2
192.168.88.133    NODE3

步骤3:保存退出

bash
# 保存并退出
:wq

步骤4:配置NODE2的hosts文件

bash
# 在NODE2上编辑hosts文件
vim /etc/hosts

步骤5:添加主机名映射 在文件末尾添加以下内容:

bash
192.168.88.131    NODE1
192.168.88.132    NODE2
192.168.88.133    NODE3

步骤6:保存退出

bash
# 保存并退出
:wq

步骤7:配置NODE3的hosts文件

bash
# 在NODE3上编辑hosts文件
vim /etc/hosts

步骤8:添加主机名映射 在文件末尾添加以下内容:

bash
192.168.88.131    NODE1
192.168.88.132    NODE2
192.168.88.133    NODE3

步骤9:保存退出

bash
# 保存并退出
:wq

5. 4 验证主机名映射

步骤1:在CMD中测试主机名解析

cmd
# 打开CMD命令提示符
cmd

步骤2:测试主机名解析

cmd
# 测试主机名解析
ping NODE1
ping NODE2
ping NODE3

步骤3:验证结果

  • 如果能ping通,说明主机名映射配置成功
  • 如果ping不通,检查hosts文件配置

6. SSH免密登录配置

6. 1 SSH协议介绍

定义: SSH(Secure Shell)是一种网络安全协议,用于加密网络服务,提供安全的远程登录和文件传输功能。

登录方式:

  • 密码登录:使用用户名和密码进行认证
  • 密钥登录:使用公钥和私钥进行认证(更安全)

应用场景:

  • 远程登录Linux服务器
  • 集群节点间通信
  • 自动化脚本执行
  • 文件传输(SCP、SFTP)

6. 2 SSH远程登录演示

基本用法:

bash
# 使用用户名和主机名登录
ssh root@NODE1

# 使用用户名和IP地址登录
ssh root@192.168.88.131

演示步骤:

  • 在NODE1上登录NODE2
bash
# 在NODE1上执行
ssh root@NODE2
# 输入密码:123456
  • 验证当前所在服务器
bash
# 验证当前所在服务器
hostname
# 输出:NODE2
  • 退出登录
bash
# 退出登录
exit

6. 3 SSH免密登录原理

原理说明: SSH免密登录基于公钥加密技术,每个服务器生成自己的密钥对(公钥和私钥),然后将公钥分发到其他服务器,实现免密码登录。

密钥对说明:

  • 私钥:保存在本地,相当于钥匙,不能泄露
  • 公钥:分发到其他服务器,相当于锁,可以公开
  • authorized_keys:存储公钥的授权文件

优势:

  • 更安全,无需传输密码
  • 更方便,无需每次输入密码
  • 适合自动化脚本执行

6. 4 生成SSH密钥

步骤1:在每台服务器上生成密钥

在NODE1上执行:

bash
# 生成SSH密钥
ssh-keygen -t rsa -b 4096
bash
# 按提示操作:
# Enter file in which to save the key: 直接回车(使用默认路径)
# Enter passphrase: 直接回车(不设置密码)
# Enter same passphrase again: 直接回车

在NODE2上执行:

bash
# 生成SSH密钥
ssh-keygen -t rsa -b 4096
bash
# 一路回车即可

在NODE3上执行:

bash
# 生成SSH密钥
ssh-keygen -t rsa -b 4096
bash
# 一路回车即可

6. 5 验证密钥生成

步骤1:查看生成的密钥文件

bash
# 查看生成的密钥文件
ls -l ~/.ssh/
bash
# 输出示例:
# id_rsa      (私钥)
# id_rsa.pub  (公钥)
# known_hosts
# authorized_keys

6. 6 分发公钥

分发到NODE1自身:

bash
# 将NODE1的公钥添加到自己的authorized_keys中
ssh-copy-id NODE1
bash
# 输入密码:123456

分发到NODE2:

bash
# 将NODE1的公钥分发到NODE2
ssh-copy-id NODE2
bash
# 输入密码:123456

分发到NODE3:

bash
# 将NODE1的公钥分发到NODE3
ssh-copy-id NODE3
bash
# 输入密码:123456

分发到NODE2自身:

bash
# 将NODE2的公钥添加到自己的authorized_keys中
ssh-copy-id NODE2
bash
# 输入密码:123456

分发到NODE3自身:

bash
# 将NODE3的公钥添加到自己的authorized_keys中
ssh-copy-id NODE3
bash
# 输入密码:123456

6. 7 验证免密登录

步骤1:在NODE1上测试免密登录

bash
# 登录NODE1(自身)
ssh NODE1

# 应该不需要输入密码
bash
hostname

# 输出:NODE1
bash
exit

步骤2:在NODE1上测试免密登录NODE2

bash
# 登录NODE2
ssh NODE2
# 应该不需要输入密码
bash
hostname
# 输出:NODE2
bash
exit

步骤3:在NODE1上测试免密登录NODE3

bash
# 登录NODE3
ssh NODE3
# 应该不需要输入密码
bash
hostname
# 输出:NODE3
bash
exit

6. 8 免密登录配置汇总

配置完成后的状态:

服务器可免密登录到
NODE1NODE1, NODE2, NODE3
NODE2NODE1, NODE3
NODE3NODE1, NODE2

验证结果:

  • 三台服务器之间可以互相免密登录
  • 不再需要输入密码
  • 为后续集群软件部署做好准备

7. 常见问题

7. 1 常见问题及解决方案

问题原因解决方案
虚拟机克隆后无法启动磁盘空间不足或路径错误检查磁盘空间,重新选择存储路径
IP地址冲突克隆后的虚拟机IP地址相同分别修改每台虚拟机的IP地址
主机名修改不生效需要重启或重新登录执行bash命令重新加载配置
ping主机名不通hosts文件配置错误检查hosts文件格式和内容
SSH连接被拒绝SSH服务未启动或防火墙阻止检查SSH服务状态和防火墙规则
免密登录仍需密码公钥未正确分发或权限错误检查~/.ssh/authorized_keys文件权限
虚拟机网络不通网卡配置错误或VMware网络问题检查网卡配置和VMware网络设置

7. 2 故障排查命令

检查网络配置:

bash
# 查看IP地址(推荐)
ip addr

# 或(已过时)
ip

检查网络连通性:

bash
# 测试网络连通性
ping 192.168.88.131

检查SSH服务:

bash
# 查看SSH服务状态
systemctl status sshd

# 启动SSH服务
systemctl start sshd

检查SSH配置:

bash
# 查看SSH配置文件
cat /etc/ssh/sshd_config

检查密钥配置:

bash
# 查看密钥文件
ls -l ~/.ssh/

# 查看授权文件
cat ~/.ssh/authorized_keys

8. 实践操作

8. 1 综合练习

练习1:虚拟机克隆和配置

  • 使用VMware克隆三台虚拟机
  • 分别配置三台虚拟机的主机名和IP地址
  • 验证三台虚拟机之间的网络连通性

练习2:主机名映射配置

  • 在Windows系统中配置hosts文件
  • 在三台Linux虚拟机中配置hosts文件
  • 使用ping命令验证主机名解析

练习3:SSH免密登录配置

  • 在三台虚拟机上分别生成SSH密钥
  • 分发公钥到其他服务器
  • 验证免密登录是否配置成功

练习4:集群环境验证

  • 使用Xshell连接三台服务器
  • 使用ping命令测试网络连通性
  • 使用ssh命令测试免密登录
  • 检查所有服务状态

8. 2 实战场景

场景:快速部署大数据集群

bash
# 任务:为Kafka集群部署准备三台服务器
# 要求:
# 1. 三台服务器的主机名分别为node1、node2、node3
# 2. IP地址分别为192.168.1.101、192.168.1.102、192.168.1.103
# 3. 配置主机名映射
# 4. 配置SSH免密登录
# 5. 验证三台服务器之间的网络连通性和免密登录

课程总结

这节课我们学了集群化环境的前置准备。

前置准备工作:

  1. 虚拟机克隆 - 基于一台机器快速创建多台
  2. 配置固定IP - 每台机器配置独立的IP地址
  3. 配置主机名 - 每台机器设置不同的主机名
  4. 主机名映射 - 修改/etc/hosts文件,用主机名代替IP访问
  5. SSH免密登录 - 配置公钥认证,节点间免密码通信

常用命令: hostnamectl set-hostname 新名称 - 修改主机名 ssh-keygen - 生成SSH密钥对 ssh-copy-id 用户@主机 - 复制公钥到目标主机

Xshell管理多台服务器更方便,可以同时管理多个会话。

通过本课程的学习,学员应该能够独立完成集群化环境的前置准备工作,为后续部署Kafka、ZooKeeper、Hadoop等大数据集群软件打下坚实基础。


课后练习

练习1(基础)

请在Linux终端中执行以下操作:

  • 使用VMware克隆Rocky Linux 9虚拟机为3个节点(NODE1、NODE2、NODE3)
  • 分别启动三个虚拟机,并切换到root用户
  • 配置每个节点的主机名和IP地址
  • 使用ping命令验证节点间的网络连通性

💡 提示:使用hostnamectl set-hostname NODE1修改主机名,使用nmcli connection modify命令配置静态IP地址。

练习2(进阶)

请尝试:

  • 在Windows系统中配置hosts文件,添加三个节点的主机名映射
  • 在三个Linux节点上配置hosts文件
  • 使用主机名代替IP地址进行SSH连接
  • 测试使用ping命令通过主机名访问各个节点

💡 提示:Windows hosts文件路径为C:\Windows\System32\drivers\etc\hosts,Linux hosts文件路径为/etc/hosts

练习3(拓展)

请尝试:

  • 在三个节点上分别生成SSH密钥对
  • 使用ssh-copy-id命令分发公钥到其他节点
  • 配置SSH免密登录,验证节点间可以免密互相访问
  • 使用Xshell同时连接三个节点,测试免密登录效果

💡 提示:使用ssh-keygen -t rsa生成密钥对,使用ssh-copy-id NODE2分发公钥,测试时使用ssh NODE1登录。

评论区

专业的Linux技术学习平台,从入门到精通的完整学习路径