主题
集群化环境前置准备
课程介绍
接下来我们学习集群化环境的前置准备。大数据应用通常需要多台服务器协同工作,这时就需要搭建集群环境。使用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地址 | 状态 |
|---|---|---|---|
| NODE1 | Rocky Linux 9 | 192.168.88.130 | 待配置 |
| NODE2 | Rocky Linux 9 | 192.168.88.130 | 待配置 |
| NODE3 | Rocky Linux 9 | 192.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 addr3. 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 addr3. 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 addr3. 4 三台虚拟机配置汇总
| 虚拟机名称 | 主机名 | IP地址 | 状态 |
|---|---|---|---|
| NODE1 | NODE1 | 192.168.88.131 | 已配置 |
| NODE2 | NODE2 | 192.168.88.132 | 已配置 |
| NODE3 | NODE3 | 192.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
# 保存并退出
:wq5. 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
# 退出登录
exit6. 3 SSH免密登录原理
原理说明: SSH免密登录基于公钥加密技术,每个服务器生成自己的密钥对(公钥和私钥),然后将公钥分发到其他服务器,实现免密码登录。
密钥对说明:
- 私钥:保存在本地,相当于钥匙,不能泄露
- 公钥:分发到其他服务器,相当于锁,可以公开
- authorized_keys:存储公钥的授权文件
优势:
- 更安全,无需传输密码
- 更方便,无需每次输入密码
- 适合自动化脚本执行
6. 4 生成SSH密钥
步骤1:在每台服务器上生成密钥
在NODE1上执行:
bash
# 生成SSH密钥
ssh-keygen -t rsa -b 4096bash
# 按提示操作:
# Enter file in which to save the key: 直接回车(使用默认路径)
# Enter passphrase: 直接回车(不设置密码)
# Enter same passphrase again: 直接回车在NODE2上执行:
bash
# 生成SSH密钥
ssh-keygen -t rsa -b 4096bash
# 一路回车即可在NODE3上执行:
bash
# 生成SSH密钥
ssh-keygen -t rsa -b 4096bash
# 一路回车即可6. 5 验证密钥生成
步骤1:查看生成的密钥文件
bash
# 查看生成的密钥文件
ls -l ~/.ssh/bash
# 输出示例:
# id_rsa (私钥)
# id_rsa.pub (公钥)
# known_hosts
# authorized_keys6. 6 分发公钥
分发到NODE1自身:
bash
# 将NODE1的公钥添加到自己的authorized_keys中
ssh-copy-id NODE1bash
# 输入密码:123456分发到NODE2:
bash
# 将NODE1的公钥分发到NODE2
ssh-copy-id NODE2bash
# 输入密码:123456分发到NODE3:
bash
# 将NODE1的公钥分发到NODE3
ssh-copy-id NODE3bash
# 输入密码:123456分发到NODE2自身:
bash
# 将NODE2的公钥添加到自己的authorized_keys中
ssh-copy-id NODE2bash
# 输入密码:123456分发到NODE3自身:
bash
# 将NODE3的公钥添加到自己的authorized_keys中
ssh-copy-id NODE3bash
# 输入密码:1234566. 7 验证免密登录
步骤1:在NODE1上测试免密登录
bash
# 登录NODE1(自身)
ssh NODE1
# 应该不需要输入密码bash
hostname
# 输出:NODE1bash
exit步骤2:在NODE1上测试免密登录NODE2
bash
# 登录NODE2
ssh NODE2
# 应该不需要输入密码bash
hostname
# 输出:NODE2bash
exit步骤3:在NODE1上测试免密登录NODE3
bash
# 登录NODE3
ssh NODE3
# 应该不需要输入密码bash
hostname
# 输出:NODE3bash
exit6. 8 免密登录配置汇总
配置完成后的状态:
| 服务器 | 可免密登录到 |
|---|---|
| NODE1 | NODE1, NODE2, NODE3 |
| NODE2 | NODE1, NODE3 |
| NODE3 | NODE1, 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_keys8. 实践操作
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. 验证三台服务器之间的网络连通性和免密登录课程总结
这节课我们学了集群化环境的前置准备。
前置准备工作:
- 虚拟机克隆 - 基于一台机器快速创建多台
- 配置固定IP - 每台机器配置独立的IP地址
- 配置主机名 - 每台机器设置不同的主机名
- 主机名映射 - 修改/etc/hosts文件,用主机名代替IP访问
- 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登录。