通俗理解OpenStack:控制节点 vs 计算节点

用生活中的比喻讲解OpenStack控制节点和计算节点的区别,物理服务器如何分配

前言

很多人学习OpenStack时,最困惑的问题就是:控制节点和计算节点到底是什么?有什么区别?

今天我用最通俗的话,让你彻底搞懂这两个概念。


一、用餐厅比喻理解控制节点和计算节点

1.1 想象一下餐厅是怎么工作的

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│                         餐 厅                                    │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                      控 制 节 点                        │   │
│   │                        (后厨)                          │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   👨‍🍳 厨师长 ← 接收订单,决定谁来炒菜                    │   │
│   │   📋 订单系统 ← 记录所有客人点了什么菜                  │   │
│   │   📦 食材仓库 ← 管理所有食材库存                        │   │
│   │   🚚 配菜员 ← 把做好的菜传给服务员                      │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                              │                                  │
│                              ▼                                  │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │                      计 算 节 点                        │   │
│   │                        (灶台)                          │   │
│   ├─────────────────────────────────────────────────────────┤   │
│   │                                                         │   │
│   │   🔥 灶台1 ← 实际炒菜的地方                             │   │
│   │   🔥 灶台2 ← 实际炒菜的地方                             │   │
│   │   🔥 灶台3 ← 实际炒菜的地方                             │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

关键点:

  • 控制节点(后厨):不动手炒菜,只负责指挥、记录、调度
  • 计算节点(灶台):不动脑子,只负责执行、干活、出力

1.2 OpenStack就是一间云餐厅

餐厅角色 OpenStack角色 干什么
厨师长 控制节点 接收请求,决定任务分配
订单系统 Nova-API 接收创建虚拟机的请求
食材仓库 Glance 存放虚拟机镜像
配菜员 Neutron 把网络连接好传给虚拟机
灶台 计算节点 真正运行虚拟机的地方

二、控制节点详解

2.1 控制节点是什么?

控制节点就是OpenStack的"大脑"和"管理者"。

它不运行虚拟机,它只负责:

  • 接收你的请求(创建虚拟机、创建网络等)
  • 保存所有数据(数据库)
  • 调度任务(决定在哪个计算节点运行)
  • 管理整个系统

2.2 控制节点的核心组件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
┌─────────────────────────────────────────────────────────────────┐
│                        控制节点                                  │
│                     (不动手,只动嘴)                            │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │  🧠 大脑(管理所有组件)                                  │   │
│   │                                                         │   │
│   │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐     │   │
│   │  │  Keystone  │  │    Nova    │  │  Neutron   │     │   │
│   │  │   门卫     │  │  调度员    │  │  交通警   │     │   │
│   │  │  验证身份   │  │ 分配任务   │  │  管理网络  │     │   │
│   │  └─────────────┘  └─────────────┘  └─────────────┘     │   │
│   │                                                         │   │
│   │  ┌─────────────┐  ┌─────────────┐                       │   │
│   │  │   Glance   │  │ Placement   │                       │   │
│   │  │   仓库管理员│  │  资源统计员 │                       │   │
│   │  │   管理镜像  │  │  盘点资源   │                       │   │
│   │  └─────────────┘  └─────────────┘                       │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │  📦 数据库(记忆)                                        │   │
│   │  MySQL - 记住所有虚拟机、网络、用户的信息                 │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │  📬 消息队列(传话)                                      │   │
│   │  RabbitMQ - 控制节点和计算节点之间传递消息                 │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

2.3 控制节点各组件职责

组件 通俗比喻 职责
Keystone 前台/门卫 验证用户身份,发放"工作证"
Nova-API 接线员 接收创建虚拟机的请求
Nova-Scheduler 调度员 决定虚拟机放在哪个计算节点
Nova-Conductor 助理 安全地访问数据库
Glance 仓库管理员 管理虚拟机镜像(模板)
Neutron-Server 交通局长 管理网络规则
Placement 会计 统计资源使用情况
Horizon 客服 Web界面,让用户操作

2.4 控制节点不能做什么?

控制节点不运行虚拟机!

就像厨师长不会亲自颠勺一样,控制节点:

  • ❌ 不运行KVM
  • ❌ 不创建虚拟机实例
  • ❌ 不占用大量计算资源

控制节点很"闲"吗?

不!它很忙:

  • 处理海量API请求
  • 调度任务
  • 管理数据库
  • 监控所有计算节点

三、计算节点详解

3.1 计算节点是什么?

计算节点就是OpenStack的"苦力"。

它只负责一件事:

  • 运行虚拟机

3.2 计算节点的核心组件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
┌─────────────────────────────────────────────────────────────────┐
│                        计算节点                                  │
│                     (只动手,不用脑)                            │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │  🔥 灶台(运行虚拟机的机器)                              │   │
│   │                                                         │   │
│   │    ┌────────┐  ┌────────┐  ┌────────┐                   │   │
│   │    │虚拟机1 │  │虚拟机2 │  │虚拟机3 │  ← 真正干活的    │   │
│   │    │  Ubuntu │  │  CentOS │  │ Windows│                   │   │
│   │    └────────┘  └────────┘  └────────┘                   │   │
│   │         │           │           │                       │   │
│   │         ▼           ▼           ▼                       │   │
│   │    ┌────────────────────────────────────────┐            │   │
│   │    │         KVM/QEMU 虚拟化引擎            │            │   │
│   │    │  (灶台的火,让虚拟机跑起来)          │            │   │
│   │    └────────────────────────────────────────┘            │   │
│   │         │           │           │                       │   │
│   │         ▼           ▼           ▼                       │   │
│   │    ┌────────────────────────────────────────┐            │   │
│   │    │         物理服务器硬件                  │            │   │
│   │    │  CPU: 32核心  内存: 128GB  硬盘: 2TB   │            │   │
│   │    └────────────────────────────────────────┘            │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │  📡 网络代理(连接虚拟机的网线)                          │   │
│   │  neutron-linuxbridge-agent 或 neutron-openvswitch-agent   │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

3.3 计算节点的组件

组件 通俗比喻 职责
nova-compute 灶台工 接收指令,创建/管理虚拟机
neutron-agent 网线工 把虚拟机接入网络
libvirtd 灶台开关 KVM的管理服务

3.4 计算节点需要什么?

计算节点的核心是:KVM

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
┌─────────────────────────────────────────────────────────────────┐
│                        计算节点灵魂                               │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   1️⃣ 硬件虚拟化支持(CPU必须支持VT-x或AMD-V)                    │
│      └── 让CPU可以"一分多用"                                     │
│                                                                 │
│   2️⃣ KVM(Kernel-based Virtual Machine)                        │
│      └── Linux内核的虚拟化模块                                   │
│                                                                 │
│   3️⃣ QEMU                                                       │
│      └── 模拟硬件,让虚拟机以为自己有独立硬件                      │
│                                                                 │
│   4️⃣ libvirt                                                   │
│      └── 管理KVM的工具,提供API                                  │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

3.5 计算节点不需要什么?

计算节点很"单纯":

  • ❌ 不需要MySQL数据库
  • ❌ 不需要RabbitMQ
  • ❌ 不需要Keystone
  • ❌ 不需要Glance镜像服务
  • ❌ 不需要API服务

计算节点只需要:nova-compute + neutron-agent + KVM


四、控制节点 vs 计算节点对比

4.1 一张图看懂区别

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
┌─────────────────────────────────────────────────────────────────┐
│                        控制节点                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   📊 数据库(MySQL)              ← 有                          │
│   📬 消息队列(RabbitMQ)         ← 有                          │
│   🔐 身份认证(Keystone)          ← 有                          │
│   📋 API服务                      ← 有                          │
│   🔧 调度器                       ← 有                          │
│   🖥️ 运行虚拟机(KVM)            ← 没有!                       │
│                                                                 │
│   CPU需求:中等(4-8核)                                         │
│   内存需求:中等(8-16GB)                                       │
│   磁盘需求:中等(100GB)                                        │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

                         ⬆️ 指挥 ⬆️

┌─────────────────────────────────────────────────────────────────┐
│                        计算节点                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   📊 数据库(MySQL)              ← 没有                         │
│   📬 消息队列(RabbitMQ)         ← 没有                         │
│   🔐 身份认证(Keystone)          ← 没有                         │
│   📋 API服务                      ← 没有                         │
│   🔧 调度器                       ← 没有                         │
│   🖥️ 运行虚拟机(KVM)            ← 有!必须!                    │
│                                                                 │
│   CPU需求:高(8-32核)                                          │
│   内存需求:高(16-128GB)                                       │
│   磁盘需求:高(500GB+,看虚拟机数量)                           │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

4.2 核心对比表

对比项 控制节点 计算节点
定位 管理者/大脑 执行者/肌肉
运行KVM ❌ 不运行 ✅ 必须运行
数据库 ✅ 必须有 ❌ 不需要
API ✅ 必须有 ❌ 不需要
内存需求 8-16GB 16-128GB
CPU需求 中等
磁盘需求 中等(100GB) 高(存储虚拟机)
网络需求 较低 较高
数量 1-3台 可多台
可扩展性 有限 灵活扩展

五、物理服务器部署实战

5.1 两台物理服务器的架构

现在我们来实际部署:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
┌─────────────────────────────────────────────────────────────────┐
│                    物理服务器1:控制节点                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   硬件配置:                                                     │
│   ├── CPU:8核心                                                │
│   ├── 内存:16GB                                                │
│   ├── 磁盘:256GB SSD(系统盘)                                  │
│   └── 网卡:2块(1块管理,1块VM网络)                            │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │  安装的服务:                                           │   │
│   │                                                         │   │
│   │  ✅ MySQL(数据库)                                     │   │
│   │  ✅ RabbitMQ(消息队列)                               │   │
│   │  ✅ Keystone(身份认证)                                │   │
│   │  ✅ Nova-API(API服务)                                │   │
│   │  ✅ Nova-Scheduler(调度器)                           │   │
│   │  ✅ Nova-Conductor(数据库中介)                       │   │
│   │  ✅ Placement(资源统计)                               │   │
│   │  ✅ Glance(镜像服务)                                 │   │
│   │  ✅ Neutron-Server(网络服务)                         │   │
│   │  ✅ Neutron-Agent(网络代理)                          │   │
│   │  ✅ Horizon(Web界面)                                  │   │
│   │  ✅ Apache/Nginx(Web服务器)                          │   │
│   │                                                         │   │
│   │  ❌ nova-compute(不运行KVM!)                        │   │
│   │  ❌ 虚拟机(不在这里运行!)                            │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

                            ⬆️
                       网络通信/调度
                            ⬇️

┌─────────────────────────────────────────────────────────────────┐
│                    物理服务器2:计算节点                         │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   硬件配置:                                                     │
│   ├── CPU:16核心(支持VT-x)                                   │
│   ├── 内存:64GB                                                │
│   ├── 磁盘:256GB SSD(系统盘)+ 2TB HDD(数据盘)               │
│   └── 网卡:2块(1块管理,1块VM网络)                            │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │  安装的服务:                                           │   │
│   │                                                         │   │
│   │  ✅ KVM/QEMU(虚拟化引擎)                              │   │
│   │  ✅ Libvirt(虚拟化管理)                               │   │
│   │  ✅ nova-compute(计算服务)                            │   │
│   │  ✅ neutron-linuxbridge-agent(网络代理)                │   │
│   │                                                         │   │
│   │  ❌ MySQL(不需要)                                     │   │
│   │  ❌ RabbitMQ(不需要)                                  │   │
│   │  ❌ Keystone(不需要)                                   │   │
│   │  ❌ 所有API服务(不需要)                                │   │
│   │  ❌ Horizon(不需要)                                   │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐   │
│   │  运行的虚拟机:                                         │   │
│   │                                                         │   │
│   │    ┌────────┐  ┌────────┐  ┌────────┐                   │   │
│   │    │虚拟机1 │  │虚拟机2 │  │虚拟机3 │  ...              │   │
│   │    │ 2vCPU  │  │ 4vCPU  │  │ 2vCPU  │                   │   │
│   │    │ 4GB RAM│  │ 8GB RAM│  │ 4GB RAM│                   │   │
│   │    └────────┘  └────────┘  └────────┘                   │   │
│   │                                                         │   │
│   └─────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

5.2 完整的通信流程

当你创建一台虚拟机时,发生了什么?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
┌─────────────────────────────────────────────────────────────────┐
│                      创建虚拟机的流程                            │
└─────────────────────────────────────────────────────────────────┘

  1️⃣ 用户请求
┌─────────────────────────────────────┐
│        物理服务器1(控制节点)        │
│                                     │
│  ┌───────────────────────────────┐  │
│  │ ① Horizon/Web界面接收请求    │  │
│  └───────────────────────────────┘  │
│                │                    │
│                ▼                    │
│  ┌───────────────────────────────┐  │
│  │ ② Nova-API 接收创建指令      │  │
│  └───────────────────────────────┘  │
│                │                    │
│                ▼                    │
│  ┌───────────────────────────────┐  │
│  │ ③ Glance 选择镜像模板         │  │
│  └───────────────────────────────┘  │
│                │                    │
│                ▼                    │
│  ┌───────────────────────────────┐  │
│  │ ④ Placement 检查资源情况      │  │
│  └───────────────────────────────┘  │
│                │                    │
│                ▼                    │
│  ┌───────────────────────────────┐  │
│  │ ⑤ Nova-Scheduler 决定:       │  │
│  │    "去服务器2创建虚拟机"       │  │
│  └───────────────────────────────┘  │
│                │                    │
│                ▼                    │
│  ┌───────────────────────────────┐  │
│  │ ⑥ Neutron 准备网络           │  │
│  └───────────────────────────────┘  │
│                │                    │
│                ▼                    │
│  ┌───────────────────────────────┐  │
│  │ ⑦ 发送指令到计算节点          │  │
│  │    (通过RabbitMQ)              │  │
│  └───────────────────────────────┘  │
│                                     │
└─────────────────────────────────────┘
┌─────────────────────────────────────┐
│        物理服务器2(计算节点)        │
│                                     │
│  ┌───────────────────────────────┐  │
│  │ ⑧ nova-compute 收到指令      │  │
│  └───────────────────────────────┘  │
│                │                    │
│                ▼                    │
│  ┌───────────────────────────────┐  │
│  │ ⑨ KVM 创建虚拟机              │  │
│  │    - 分配CPU                   │  │
│  │    - 分配内存                   │  │
│  │    - 挂载镜像                   │  │
│  └───────────────────────────────┘  │
│                │                    │
│                ▼                    │
│  ┌───────────────────────────────┐  │
│  │ ⑩ neutron-agent 配置网络      │  │
│  └───────────────────────────────┘  │
│                │                    │
│                ▼                    │
│  ┌───────────────────────────────┐  │
│  │ ✅ 虚拟机启动成功!            │  │
│  │   VM运行中...                 │  │
│  └───────────────────────────────┘  │
│                                     │
└─────────────────────────────────────┘

5.3 服务器1的具体配置(控制节点)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# ==============================
# 控制节点安装清单
# 服务器1:8核CPU / 16GB内存 / 256GB SSD
# ==============================

# 1. 安装基础软件
apt update && apt upgrade -y
apt install -y chrony          # 时间同步
apt install -y python3-openstackclient  # OpenStack客户端

# 2. 安装数据库
apt install -y mariadb-server python3-pymysql
systemctl enable mariadb
systemctl start mariadb

# 3. 安装消息队列
apt install -y rabbitmq-server
systemctl enable rabbitmq-server
systemctl start rabbitmq-server

# 4. 安装Memcached(Token缓存)
apt install -y memcached python3-memcache
systemctl enable memcached
systemctl start memcached

# 5. 安装OpenStack组件
apt install -y keystone
apt install -y glance
apt install -y nova-api nova-scheduler nova-conductor nova-novncproxy
apt install -y placement-api
apt install -y neutron-server neutron-dhcp-agent neutron-l3-agent neutron-linuxbridge-agent
apt install -y horizon
apt install -y apache2

# 6. 关键:不要安装nova-compute!
# ❌ apt install nova-compute  ← 不要执行这条命令!

# 7. 检查服务状态
systemctl status nova-api
systemctl status neutron-server
systemctl status keystone

5.4 服务器2的具体配置(计算节点)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# ==============================
# 计算节点安装清单
# 服务器2:16核CPU / 64GB内存 / 256GB SSD + 2TB HDD
# ==============================

# 1. 安装基础软件
apt update && apt upgrade -y
apt install -y chrony          # 时间同步

# 2. 安装KVM虚拟化
apt install -y qemu-kvm libvirt-daemon-system libvirt-clients
apt install -y cpu-checker

# 3. 验证KVM是否正常工作
kvm-ok
# 输出应该显示:KVM acceleration can be used

# 4. 安装OpenStack计算组件
apt install -y nova-compute
apt install -y neutron-linuxbridge-agent

# 5. 关键:不要安装API服务!
# ❌ apt install nova-api    ← 不要执行!
# ❌ apt install keystone    ← 不要执行!
# ❌ apt install mysql       ← 不要执行!

# 6. 配置网络
cat > /etc/neutron/plugins/ml2/linuxbridge_agent.ini << 'EOF'
[linux_bridge]
physical_interface_mappings = provider:ens3

[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
EOF

# 7. 重启服务
systemctl enable nova-compute
systemctl enable neutron-linuxbridge-agent
systemctl start nova-compute
systemctl start neutron-linuxbridge-agent

# 8. 检查服务状态
systemctl status nova-compute
systemctl status neutron-linuxbridge-agent

# 9. 查看运行中的虚拟机
virsh list
# 应该显示空(还没有创建虚拟机)

六、干货技术:常用命令

6.1 控制节点常用命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查看OpenStack服务状态
openstack compute service list

# 查看Nova调度日志
tail -f /var/log/nova/nova-scheduler.log

# 查看Neutron服务状态
openstack network agent list

# 查看计算节点注册情况
openstack compute service list | grep nova

# 查看镜像列表
openstack image list

# 查看网络列表
openstack network list

# 查看配额使用情况
openstack quota show --project admin

# 查看资源使用
openstack usage list

6.2 计算节点常用命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 查看KVM状态
virsh list

# 查看KVM虚拟机详细信息
virsh list --all
virsh dominfo vm_name

# 查看nova-compute日志
tail -f /var/log/nova/nova-compute.log

# 查看neutron-agent日志
tail -f /var/log/neutron/linuxbridge-agent.log

# 查看CPU虚拟化支持
cat /proc/cpuinfo | grep vmx

# 查看KVM模块是否加载
lsmod | grep kvm

# 查看内存使用
free -h

# 查看磁盘使用
df -h

6.3 排错常用命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 控制节点:检查服务是否运行
systemctl status mariadb
systemctl status rabbitmq-server
systemctl status keystone

# 控制节点:检查API是否响应
curl http://localhost:8774/v2.1/
curl http://localhost:9696/
curl http://localhost:5000/v3/

# 计算节点:检查能否连接控制节点
ping controller
telnet controller 5672  # RabbitMQ端口

# 计算节点:检查nova-compute日志中的错误
grep -i error /var/log/nova/nova-compute.log

# 计算节点:验证KVM嵌套(虚拟机内运行KVM)
cat /sys/module/kvm_intel/parameters/nested

七、扩展:添加更多计算节点

7.1 架构扩展

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
                    ┌─────────────────────────────────────────┐
                    │         控制节点(服务器1)              │
                    │   MySQL / RabbitMQ / Keystone / Nova   │
                    └─────────────────────────────────────────┘
                    ┌────────────────┼────────────────┐
                    │                │                │
                    ▼                ▼                ▼
          ┌─────────────┐  ┌─────────────┐  ┌─────────────┐
          │  计算节点1   │  │  计算节点2   │  │  计算节点3   │
          │   (服务器2)  │  │   (服务器3)  │  │   (服务器4)  │
          │             │  │             │  │             │
          │  10台VM     │  │  10台VM     │  │  10台VM     │
          │             │  │             │  │             │
          └─────────────┘  └─────────────┘  └─────────────┘
                               总共可以运行 30台虚拟机

7.2 添加新计算节点的步骤

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 在新服务器(服务器3)上执行:

# 1. 安装KVM
apt install -y qemu-kvm libvirt-daemon-system

# 2. 安装计算组件
apt install -y nova-compute
apt install -y neutron-linuxbridge-agent

# 3. 配置连接到控制节点
# 编辑 /etc/nova/nova.conf
[DEFAULT]
auth_url = http://服务器1的IP:5000/v3
mysql = mysql+pymysql://nova:密码@服务器1的IP/nova
rabbit_host = 服务器1的IP

# 编辑 /etc/neutron/neutron.conf
[DEFAULT]
auth_url = http://服务器1的IP:5000/v3
rabbit_host = 服务器1的IP

# 4. 重启服务
systemctl enable nova-compute neutron-linuxbridge-agent
systemctl start nova-compute neutron-linuxbridge-agent

# 5. 在控制节点验证
openstack compute service list
# 应该看到新的计算节点注册上来了

八、常见问题

8.1 Q: 控制节点可以运行虚拟机吗?

A:技术上可以,但不推荐。

All-in-One模式下,控制节点也会运行nova-compute,可以创建虚拟机。

但生产环境建议分开:

  • 控制节点:稳定、安全、不暴露
  • 计算节点:资源密集、可以宕机维护

8.2 Q: 可以只有1个控制节点吗?

A:可以,但不安全。

  • 学习/测试:1个控制节点足够
  • 生产环境:建议3个控制节点做高可用

8.3 Q: 计算节点需要多少内存?

A:取决于你要跑多少虚拟机。

经验公式:

1
2
3
4
5
6
计算节点总内存 = 虚拟机数量 × 平均每VM内存 + 16GB(系统预留)

例如:
- 要跑10台4GB内存的虚拟机
- 计算节点需要:10 × 4GB + 16GB = 56GB
- 建议配64GB内存

8.4 Q: 控制节点和计算节点必须用同样的操作系统?

A:不是必须的,但建议一致。

  • 控制节点:Ubuntu/CentOS都可以
  • 计算节点:Ubuntu/CentOS都可以
  • 建议都用Ubuntu 22.04 LTS,统一管理

8.5 Q: 可以把服务分开装吗?比如把Keystone单独装一台服务器?

A:可以,但不推荐。

OpenStack支持非常灵活的分布式部署,但:

  • 复杂度急剧上升
  • 网络延迟影响性能
  • 维护难度增加

建议:

  • 学习/测试:All-in-One或简单两节点
  • 生产环境:控制节点集群 + 多计算节点

九、总结

9.1 一句话总结

1
2
控制节点 = 管理者(不动手,只动嘴)
计算节点 = 苦力(只动手,不用脑)

9.2 最终对比

特性 控制节点 计算节点
定位 大脑/管理者 肌肉/执行者
运行虚拟机 ❌ 不运行 ✅ 必须运行
数据库 ✅ 必须有 ❌ 不要
API服务 ✅ 必须有 ❌ 不要
KVM ❌ 不要装 ✅ 必须装
内存需求 8-16GB 16-128GB
CPU需求 中等
扩展性 有限 灵活
数量 1-3台 可多台

9.3 记住这个比喻

1
2
3
4
5
6
7
想象你在经营一家餐厅:

控制节点 = 厨师长 + 前台 + 仓库管理员
           不亲自炒菜,但指挥一切

计算节点 = 灶台 + 帮厨
           真正炒菜的地方

希望这篇文章能帮助你理解控制节点和计算节点的区别!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计