温馨提示×

Linux虚拟机如何进行集群部署

小樊
44
2025-12-14 05:21:29
栏目: 云计算

Linux虚拟机集群部署实操指南

一 规划与准备

  • 目标架构:建议至少准备3台虚拟机,分别命名为node1、node2、node3,便于后续组件(如 Zookeeper、Kafka、Hadoop)做高可用与分布式部署。
  • 虚拟化与网络:使用VMware/VirtualBox创建虚机;网络优先选择桥接(与宿主机同网段、可访问外网)或仅主机/内部网络(仅虚机互通,适合隔离测试)。
  • 资源规划:三台虚机同时运行需考虑宿主机资源。示例:宿主机16GB内存,可每台分配约4GB;CPU 核心总数可按“逻辑处理器 ÷ 4”估算,再按虚机角色微调(控制节点略高)。
  • 基础软件:安装JDK(多数大数据/中间件依赖),统一目录(如**/export/server**),便于分发与维护。

二 创建与初始化三台虚机

  • 克隆虚机:先装好一台模板机(如CentOS 7),关机后执行完整克隆得到node2、node3,避免重复安装与配置。
  • 避免冲突:克隆后每台虚机的MAC 地址需重新生成,防止网卡冲突导致无法同时启动。
  • 静态 IP:为每台虚机配置固定 IP(示例网段192.168.88.0/24),编辑网卡配置文件(如**/etc/sysconfig/network-scripts/ifcfg-ens33**),设置BOOTPROTO=static、ONBOOT=yes、IPADDR、NETMASK、GATEWAY、DNS1;重启网络服务生效。
  • 主机名:在每台虚机执行hostnamectl set-hostname nodeX设置唯一主机名。
  • 主机名映射:在所有虚机的**/etc/hosts**写入三台主机映射,例如:
    192.168.88.131 node1
    192.168.88.132 node2
    192.168.88.133 node3
    
    如需在宿主机(Windows)上用名称访问,也可在C:\Windows\System32\drivers\etc\hosts添加相同记录。
  • 快照:基础环境就绪后为每台虚机创建快照,便于回滚。

三 打通节点间通信与基础环境

  • SSH 免密登录(推荐 root 或统一运维账号):
    1. 在每台虚机执行ssh-keygen -t rsa -b 4096生成密钥;
    2. 每台执行ssh-copy-id node1; ssh-copy-id node2; ssh-copy-id node3实现两两互通
    3. 验证:ssh node2无需密码即成功。
  • JDK 环境:三台统一安装与配置JAVA_HOMEPATH,保证版本一致。
  • 防火墙与 SELinux(测试环境常用做法):
    • 关闭防火墙:systemctl stop firewalld && systemctl disable firewalld
    • 关闭 SELinux:vim /etc/sysconfig/selinux,将SELINUX=enforcing改为SELINUX=disabled,保存并重启
  • 时间同步:配置NTP/chrony进行网络时钟同步,保证集群时间一致(生产环境强烈建议)。

四 部署示例一 中间件集群(Zookeeper + Kafka)

  • 角色与目录:三台均部署ZookeeperKafka;软件统一解压至**/export/server**,建议创建软链接(如ln -s ... zookeeperln -s ... kafka)。
  • Zookeeper 配置(/export/server/zookeeper/conf/zoo.cfg):
    tickTime=2000
    dataDir=/export/server/zookeeper/data
    clientPort=2181
    initLimit=5
    syncLimit=2
    server.1=node1:2888:3888
    server.2=node2:2888:3888
    server.3=node3:2888:3888
    
    在每台虚机的dataDir下创建myid文件,内容分别为1、2、3(与 server.X 对应)。
  • Kafka 配置(/export/server/kafka/config/server.properties):
    • node1:broker.id=1listeners=PLAINTEXT://node1:9092
    • node2:broker.id=2listeners=PLAINTEXT://node2:9092
    • node3:broker.id=3listeners=PLAINTEXT://node3:9092
      公共项:log.dirs=/export/server/kafka/datazookeeper.connect=node1:2181,node2:2181,node3:2181
  • 启动与验证:
    • 启动 Zookeeper(三台):/export/server/zookeeper/bin/zkServer.sh start;检查进程:jps应见QuorumPeerMain
    • 启动 Kafka(三台):
      • 前台:/export/server/kafka/bin/kafka-server-start.sh /export/server/kafka/config/server.properties
      • 后台:nohup ... >> kafka-server.log 2>&1 &
    • 验证:
      • 创建主题:/export/server/kafka/bin/kafka-topics.sh --create --zookeeper node1:2181 --replication-factor 1 --partitions 3 --topic test
      • 生产/消费:
        • 生产者:/export/server/kafka/bin/kafka-console-producer.sh --broker-list node1:9092 --topic test
        • 消费者:/export/server/kafka/bin/kafka-console-consumer.sh --bootstrap-server node1:9092 --topic test --from-beginning

五 部署示例二 大数据集群(Hadoop HDFS + YARN)

  • 角色规划(示例):
    • node1NameNode、ResourceManager、HistoryServer、WebProxyServer、DataNode、NodeManager、QuorumPeerMain
    • node2/node3DataNode、NodeManager、QuorumPeerMain
  • 基础配置:
    • 安装并配置JDKHadoop(建议统一目录如**/export/server/hadoop**),设置环境变量(HADOOP_HOMEPATH)。
    • 配置核心文件(示例):
      • core-site.xml:fs.defaultFS=hdfs://node1:9000
      • hdfs-site.xml:设置副本数NameNode/DataNode目录
      • yarn-site.xml:配置ResourceManager/NodeManager相关参数
      • mapred-site.xml:指定MapReduce 框架为 YARN
  • 启动与验证:
    • 格式化 NameNode(仅首次):hdfs namenode -format
    • 启动 HDFS:start-dfs.sh;启动 YARN:start-yarn.sh
    • 验证:jps查看进程、hdfs dfsadmin -report查看集群状态、提交示例作业(如WordCount)。

六 常见问题与优化建议

  • 网络不通:优先检查IP 冲突、网段掩码、网关、DNS;桥接/仅主机模式选择不当会导致虚机不可达或无法互访。
  • 克隆后异常:克隆虚机务必重新生成 MAC,并为每台设置唯一静态 IP主机名
  • 端口被拒:测试环境可临时关闭firewalld/SELinux;生产环境应按需放通端口并保留 SELinux 策略。
  • 分发效率:使用scp -rAnsible批量分发安装包与配置文件,减少手工操作与差错。
  • 时间漂移:部署NTP/chrony统一校时,避免分布式一致性问题。
  • 回滚与备份:关键里程碑创建快照;重要目录(如**/export/server**、Hadoop 数据目录)定期备份

0