CentOS 虚拟机集群搭建方法
一 方案总览与准备
- 目标:在本地快速起一套可复用的 CentOS 虚拟机集群,用于开发/测试常见分布式系统(如 Hadoop、Zookeeper、Kafka、ELK、Nginx+Tomcat 等)。
- 虚拟化与编排:
- 虚拟化:VirtualBox(免费、跨平台)。
- 编排:Vagrant(声明式定义多机环境,一键起停与销毁)。
- 基础镜像:使用官方 CentOS box(如:centos/7)。若下载缓慢,可直接构造 box 下载链接:
https://app.vagrantup.com/centos/boxes/7/versions/<版本号>/providers/virtualbox.box
- 网络规划:采用 private_network 私有网段,便于多节点互通且与宿主机隔离,例如 192.168.56.0/24。
- 宿主机工具:Git Bash(Windows)、终端(macOS/Linux)。
二 快速起步 Vagrant 一键起集群
- 安装软件:安装 VirtualBox 与 Vagrant,确保 vagrant 命令可用。
- 初始化与配置:
- 创建目录并初始化:
- mkdir -p ~/centos-cluster && cd ~/centos-cluster
- vagrant init
- 编辑生成的 Vagrantfile(示例为 3 节点):
Vagrant.configure("2") do |config|
(1..3).each do |i|
config.vm.define "node#{i}" do |node|
node.vm.box = "centos/7"
node.vm.hostname = "node#{i}"
node.vm.network "private_network", ip: "192.168.56.#{100+i}"
# 可选:共享目录(宿主机 ~/VmProjects/... <-> /home/vagrant/workspace)
node.vm.synced_folder "~/VmProjects/Distributed/node#{i}/workspace", "/home/vagrant/workspace"
node.vm.provider "virtualbox" do |v|
v.name = "node#{i}"
v.memory = 2048
v.cpus = 1
end
end
end
end
- 启动与连接:
- 启动集群:vagrant up(首次会自动下载 centos/7 box,可能较慢)。
- 进入节点:vagrant ssh node1(同理 node2、node3)。
- 常见问题处理:
- 共享目录挂载报错(mount: unknown filesystem type ‘vboxsf’):安装增强插件
- vagrant plugin install vagrant-vbguest
- 手动下载 box 提速:按版本号拼接下载链接后添加至本地 box 索引再使用。
三 虚拟机通用初始化与安全基线
- 主机名与 hosts:
- 网络与 DNS:
- 网卡开机自启:编辑 /etc/sysconfig/network-scripts/ifcfg-<网卡名>,设置 ONBOOT=yes;如需静态 IP,设置 BOOTPROTO=static 并配置 IPADDR/NETMASK/GATEWAY/DNS1。
- 使用 NetworkManager 管理时可用 nmcli 设置 DNS,例如:
- nmcli con mod enp0s3 ipv4.dns “114.114.114.114 8.8.8.8”
- nmcli con up enp0s3
- 防火墙与 SELinux(实验环境常用做法,生产请按需最小化放行):
- 关闭防火墙:systemctl stop firewalld && systemctl disable firewalld
- 关闭 SELinux:编辑 /etc/selinux/config,设 SELINUX=disabled,必要时执行 setenforce 0 临时生效。
- 时间同步:建议安装并启用 chrony 或 ntpd,保证节点间时间一致(集群组件如 Hadoop/Zookeeper 对时钟敏感)。
- SSH 免密登录(管理节点对全部节点):
- 各节点生成密钥:ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa
- 在管理节点汇总公钥:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- 将 authorized_keys 分发到所有节点(或各节点互相追加公钥),权限设为 600。
四 部署示例一 Nginx Keepalived 高可用 Web 集群
- 拓扑与 IP 规划(示例):
- Nginx+Keepalived 主:192.168.205.150
- Nginx+Keepalived 备:192.168.205.151
- Tomcat 业务 1:192.168.205.152:8080
- Tomcat 业务 2:192.168.205.153:8081
- VIP(漂移地址):192.168.205.159:8090
- 步骤概要:
- 所有节点:安装 JDK 8,配置环境变量(JAVA_HOME/PATH)。
- Tomcat 节点:部署 Tomcat 8.5,可启动多实例(如 8080/8081),放置测试页面用于验证。
- Nginx 节点:编译安装 Nginx 1.22(可启用 nginx-module-vts、nginx-sticky-module-ng 做监控与会话保持),配置 upstream 轮询/权重/粘性,监听 8090 反向代理到后端 Tomcat。
- Keepalived 节点:编译安装 Keepalived 2.2.7,配置 VRRP 实例(state MASTER/BACKUP、priority、virtual_router_id、authentication、virtual_ipaddress),并部署 Nginx 健康检查脚本(检测 Nginx 进程,失败则尝试拉起,仍失败则 kill keepalived 触发切换)。
- 验证:访问 http://192.168.205.159:8090,手动停掉主节点 Nginx/关机,观察 VIP 漂移 与业务无感切换。
五 部署示例二 Hadoop 高可用集群
- 节点与基础:
- 规划 NameNode HA(如 node1/node2)、JournalNode(建议 3 节点)、Zookeeper(3 节点)、DataNode(可多节点)。
- 完成前述初始化(静态 IP、hosts、SSH 免密、JDK 8、关闭防火墙/SELinux、时间同步)。
- Zookeeper 部署:
- 解压并配置 conf/zoo.cfg(dataDir、server.x=host:2888:3888),在各节点 dataDir 下创建 myid 文件标识 x。
- Hadoop 部署要点:
- 配置 core-site.xml(如 fs.defaultFS=hdfs://mycluster)、hdfs-site.xml(dfs.nameservices、dfs.ha.namenodes.mycluster、dfs.namenode.rpc-address、dfs.namenode.http-address、dfs.journalnode.edits.dir、dfs.client.failover.proxy.provider.mycluster 等)、yarn-site.xml(ResourceManager HA 可按需开启)。
- 启动顺序建议:Zookeeper → JournalNode →(格式化 ZKFC)NameNode(主)→ 同步 Standby → 启动 ZKFC/FailoverController → DataNode。
- 验证:HDFS Web UI、YARN Web UI、运行示例作业(如 wordcount)。