CentOS7下的集群化部署
一、集群化部署核心目标与场景
1.1 为什么需要集群化环境
集群化部署通过多台服务器协同工作,解决单机部署的性能瓶颈与单点故障问题,核心优势包括:
- 横向扩展能力:通过增加节点数量提升计算 / 存储容量(如 Hadoop 集群处理 PB 级数据)。
- 高可用性:节点故障时自动故障转移(如 Zookeeper 集群的 Leader 选举机制)。
- 成本优化:利用低成本服务器构建分布式系统,替代昂贵的单机架构。
典型应用场景:
- 大数据处理(Hadoop/Spark 集群)
- 分布式缓存(Redis Cluster)
- 微服务架构(Kubernetes 集群)
- 消息队列(RabbitMQ 镜像队列)
二、集群规划与资源准备
2.1 硬件与网络规划
2.1.1 节点配置建议
角色 | CPU | 内存 | 存储 | 数量 | 用途说明 |
---|---|---|---|---|---|
主节点 | 4 核 | 8GB | SSD 100GB | 1-3 台 | 管理元数据(如 Namenode) |
数据节点 | 8 核 | 16GB | HDD/SSD 500GB+ | N 台 | 存储业务数据 |
网络节点 | 2 核 | 4GB | SSD 50GB | 1 台 | 负载均衡与代理 |
2.1.2 网络拓扑设计
plaintext
┌───────────┐ ┌───────────┐ ┌───────────┐
│ 主节点1 │ │ 主节点2 │ │ 数据节点1 │
│ (192.168.1.10) │ │ (192.168.1.11) │ │ (192.168.1.12) │
└───────────┘ └───────────┘ └───────────┘├───────────────────────┤│ 内部通信网络 │ (交换机)├───────────────────────┤
┌───────────┐ ┌───────────┐ ┌───────────┐
│ 数据节点2 │ │ 数据节点3 │ │ 公网网关 │
│ (192.168.1.13) │ │ (192.168.1.14) │ │ (192.168.1.1) │
└───────────┘ └───────────┘ └───────────┘
- 内网要求:节点间延迟 < 1ms,带宽≥1Gbps(推荐万兆网卡)。
- 端口规划:
- 管理端口:22(SSH)、8080(Web 管理)
- 服务端口:如 5672(RabbitMQ)、9200(Elasticsearch)
三、虚拟机克隆与基础配置
3.1 虚拟机克隆流程(以 VMware 为例)
3.1.1 准备基础镜像
-
安装 CentOS 7 最小化系统,配置固定 IP、关闭 SELinux 和防火墙:
bash
# 关闭防火墙 systemctl stop firewalld && systemctl disable firewalld # 禁用SELinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux reboot # 重启生效
-
安装基础工具:
bash
yum install -y net-tools wget vim git # 安装常用工具
3.1.2 克隆多台虚拟机
- 右键点击基础虚拟机→克隆→选择完整克隆→命名为
node1
、node2
、node3
。 - 修改各节点主机名:
bash
# node1执行 hostnamectl set-hostname node1 # node2执行 hostnamectl set-hostname node2
3.1.3 配置固定 IP
编辑/etc/sysconfig/network-scripts/ifcfg-ens33
(以 CentOS 为例):
bash
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static # 静态IP
IPADDR=192.168.88.130 # node1 IP
NETMASK=255.255.255.0
GATEWAY=192.168.88.1
DNS1=8.8.8.8
注意:各节点 IP 需在同一子网,且未被其他设备占用。
四、集群通信基础:主机名映射与 SSH 免密
4.1 全局主机名映射
4.1.1 修改本地 hosts 文件(所有节点执行)
bash
vim /etc/hosts
# 添加以下内容
192.168.88.130 node1
192.168.88.131 node2
192.168.88.132 node3
验证:
bash
ping node1 -c 2 # 应返回正常响应
ping node2 -c 2
4.2 SSH 免密登录配置
4.2.1 生成 SSH 密钥对(node1 执行)
bash
ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa
# 生成公钥/私钥对,不设置密码
4.2.2 分发公钥到其他节点
bash
# 分发到node2
ssh-copy-id node2
# 分发到node3
ssh-copy-id node3
4.2.3 验证免密登录
bash
ssh node2 "echo hello from node1" # 应直接登录并输出内容
ssh node3 "date" # 验证node3连通性
五、系统服务统一配置
5.1 JDK 环境部署(所有节点)
5.1.1 下载与解压
bash
wget https://download.oracle.com/java/11/latest/jdk-11_linux-x64_bin.tar.gz
tar -zxvf jdk-11_linux-x64_bin.tar.gz -C /usr/local/
ln -s /usr/local/jdk-11.0.20 /usr/local/jdk # 创建软链接
5.1.2 配置环境变量
bash
vim /etc/profile
# 添加以下内容
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
source /etc/profile # 立即生效
5.1.3 验证安装
bash
java -version # 应输出Java 11版本信息
javac -version
5.2 时间同步服务(NTP)
5.2.1 安装 NTP 服务
bash
yum install -y ntp
systemctl start ntpd && systemctl enable ntpd # 启动并开机自启
5.2.2 同步阿里云时间服务器
bash
vim /etc/ntp.conf
# 添加以下内容
server ntp.aliyun.com iburst
bash
ntpdate ntp.aliyun.com # 立即同步时间
六、系统优化与安全加固
6.1 关闭不必要的服务
bash
systemctl disable --now postfix # 关闭邮件服务
systemctl disable --now avahi-daemon # 关闭零配置网络服务
6.2 调整文件描述符限制
编辑/etc/security/limits.conf
,添加:
bash
* soft nofile 65536
* hard nofile 131072
* soft nproc 65536
* hard nproc 131072
说明:提升单个进程可打开的文件数(默认 1024→65536),避免集群服务文件句柄不足。
6.3 禁用透明大页(THP)
bash
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/khugepaged/enabled
# 永久生效需添加到rc.local
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.local
作用:减少内存碎片化,提升 Redis/MySQL 等内存敏感型服务性能。
七、集群初始化验证与快照
7.1 基础连通性测试
7.1.1 节点间服务探测
bash
# 在node1执行,测试node2的SSH服务
nc -zv node2 22
# 预期输出:succeeded
# 测试node3的HTTP端口(如9200)
nc -zv node3 9200
7.1.2 集群服务预启动验证
bash
# 启动临时Nginx服务测试负载均衡
yum install -y nginx
systemctl start nginx
# 在node2/node3重复安装并启动,验证集群节点均可提供服务
7.2 创建虚拟机快照
7.2.1 快照命名规范
bash
# 格式:节点名-用途-时间
vmware snapshot node1 create "node1-base-20240610"
vmware snapshot node2 create "node2-base-20240610"
7.2.2 快照用途
- 回滚点:当集群配置错误时快速恢复初始状态。
- 模板克隆:基于已配置好的快照快速创建新节点,减少重复配置成本。
八、生产环境进阶配置
8.1 配置管理工具(Ansible)
8.1.1 安装 Ansible(管理节点执行)
bash
yum install -y ansible
8.1.2 编写 playbook 批量部署
yaml
# cluster_setup.yml
- hosts: alltasks:- name: Update system packagesyum:name: "*"state: latest- name: Install common toolsyum:name: ["net-tools", "wget"]state: present
执行:
bash
ansible-playbook cluster_setup.yml -i hosts.ini # hosts.ini定义节点列表
8.2 云服务器集群部署(以阿里云为例)
8.2.1 购买 ECS 实例
- 选择同一地域、相同可用区的 ECS 实例,确保内网互通。
- 配置安全组规则:放行 22、80、443、自定义服务端口(如 9092、5672)。
8.2.2 初始化云服务器
bash
# 替换阿里云YUM源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/CentOS-vault.repo
yum makecache fast
九、故障排查与维护清单
9.1 常见启动故障
故障现象 | 可能原因 | 解决方法 |
---|---|---|
节点无法 ping 通 | IP 冲突 / 防火墙阻塞 | 检查 IP 配置、放行 ICMP 协议 |
SSH 免密失效 | 公钥未正确分发 | 重新执行ssh-copy-id 并检查权限 |
JDK 环境变量失效 | 未 source 配置文件 | 执行source /etc/profile 或重启 |
9.2 日常维护脚本
bash
#!/bin/bash
# 集群状态巡检脚本
echo "===== 节点连通性检查 ====="
for node in node1 node2 node3; doping -c 2 $node | grep "64 bytes" && echo "$node 连通正常" || echo "$node 连通失败"
doneecho "===== JDK版本检查 ====="
ssh node1 "java -version" | head -n 1
ssh node2 "java -version" | head -n 1
ssh node3 "java -version" | head -n 1
十、总结:集群化部署的核心链路
通过以上步骤,可快速构建标准化的 Linux 集群化环境,为后续大数据组件(Hadoop/Spark)、中间件(Kafka/RabbitMQ)及容器化平台(Docker/Kubernetes)的部署奠定基础。生产环境中需结合监控系统(如 Prometheus)和自动化工具(如 Jenkins),实现集群的持续集成与动态扩缩容。建议每完成一个关键步骤(如 SSH 免密、JDK 部署)后立即验证,避免问题累积导致复杂排错。