温馨提示×

centos虚拟机集群搭建方法

小樊
43
2026-01-02 01:25:33
栏目: 云计算

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 一键起集群

  • 安装软件:安装 VirtualBoxVagrant,确保 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:
    • 设置主机名(示例):hostnamectl set-hostname node1
    • 统一 /etc/hosts(所有节点一致):
      192.168.56.101 node1
      192.168.56.102 node2
      192.168.56.103 node3
      
  • 网络与 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 临时生效。
  • 时间同步:建议安装并启用 chronyntpd,保证节点间时间一致(集群组件如 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 业务 1192.168.205.152:8080
    • Tomcat 业务 2192.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 节点)、Zookeeper3 节点)、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.xmldfs.nameservicesdfs.ha.namenodes.myclusterdfs.namenode.rpc-addressdfs.namenode.http-addressdfs.journalnode.edits.dirdfs.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)。

0