OpenStack部署(二) 先决条件准备
1 | 作者:李晓辉 |
前言
在当今数字化时代,云计算技术已成为推动企业创新和业务发展的关键力量。OpenStack作为一种开源的云计算平台,凭借其强大的灵活性、可扩展性和开源社区的支持,成为众多企业和机构构建私有云和公有云基础设施的首选方案。
OpenStack通过整合计算、存储和网络资源,为企业提供了高效、灵活的资源管理能力,使得企业能够快速部署和管理虚拟化资源,满足不断变化的业务需求。然而,OpenStack的部署并非一蹴而就,它需要经过一系列复杂而关键的步骤,其中通用服务的部署是整个OpenStack环境搭建的基础。
通用服务的部署涵盖了从基础的网络配置到关键的后端服务(如数据库、消息队列等)的搭建,每一个环节都至关重要。这些服务不仅为OpenStack的核心组件(如Nova、Neutron、Cinder等)提供了运行的基础,还确保了整个云平台的稳定性和性能。
本文将详细阐述OpenStack通用服务的部署过程,包括配置名称解析、主机名设置、关闭防火墙和SELINUX、配置NTP、启用软件仓库、安装OpenStack客户端、安装SQL数据库、配置消息队列、配置Memcached以及配置ETCD等关键步骤。通过本文的介绍,你可以系统地了解如何为OpenStack的后续部署打下坚实的基础,确保整个云平台的顺利搭建和稳定运行。
配置网络
在OpenStack中,管理网络和Provider网络是两种重要的网络类型,它们在架构和使用场景上各有特点。
管理网络
定义:管理网络主要用于OpenStack内部组件之间的通信,例如,计算节点(Nova)、网络节点(Neutron)、存储节点(Cinder)等之间的通信。它确保了OpenStack服务之间的协调和管理功能能够正常运行。
特点:
通常是一个私有网络,不直接暴露给外部用户。
配置相对简单,主要关注内部服务的连通性。
在部署时,管理网络的配置是基础步骤之一,确保所有OpenStack节点能够相互通信。
在部署OpenStack时,通常会配置一个管理网络,例如使用一个私有IP段(如192.168.8.0/24),并将所有OpenStack节点的管理接口连接到这个网络。
管理网络配置:
我的管理网卡网卡名称为: ens160
IP: 192.168.8.10/24
网关: 192.168.8.2
DNS: 223.5.5.5
配置方法:
1 | cat > /etc/NetworkManager/system-connections/ens160.nmconnection <<-'EOF' |
网卡配置好之后,重启NetworkManager服务或者重启链接生效
1 | systemctl restart NetworkManager |
Provider网络
定义:Provider网络是由OpenStack管理员创建的网络,它直接映射到数据中心的物理网络上。Provider网络允许虚拟机(VM)直接连接到外部网络,从而实现与外部世界的通信。
特点:
直接与物理网络相连,可以使用Flat(无标签)或VLAN(带标签)类型。
对于Flat类型的Provider网络,所有实例都位于同一个网络中,没有VLAN tagging。
对于VLAN类型的Provider网络,可以使用VLAN ID(802.1Q tagged)在物理网络中创建多个隔离的网络。
可以被多个租户共享,提供了一种灵活的方式来管理外部网络访问
Provider网络要求:
我的Provider网络网卡名称为ens224
这个网络要求没有任何有效的IP地址
重启服务器要求会自动激活接口
配置方法:
1 | cat > /etc/NetworkManager/system-connections/ens224.nmconnection <<-'EOF' |
网卡配置好之后,重启NetworkManager服务或者重启链接生效
1 | systemctl restart NetworkManager |
配置名称解析
所有机器上都要能互相解析才可以,所以请在所有节点之间完成解析
1 | cat > /etc/hosts <<EOF |
这里要自己测试是否能ping通各个其他节点,确保通信正常
配置主机名
1 | hostnamectl hostname controller |
关闭防火墙和SELINUX
1 | systemctl disable firewalld --now |
配置NTP
NTP的作用
在OpenStack中,NTP(网络时间协议)服务是确保整个云平台时间同步的关键组件,NTP服务在OpenStack中的主要作用是确保所有节点(包括控制节点、计算节点、网络节点等)的时间保持一致。这对于分布式系统的正常运行至关重要,因为时间不一致可能导致数据复制、事务处理等问题。例如,数据库系统需要各个节点的时间同步,以确保数据的一致性。
安装NTP
我这里安装了chrony服务做NTP同步,请允许192.168.0.0/16
网段向controller同步时间
1 | dnf install chrony -y |
验证NTP
1 | [root@controller ~]# chronyc sources |
启用软件仓库
这里的release版本可以参考: https://releases.openstack.org
我这里选择安装dalmatian
版本,也就是2025年1月的版本
1 | dnf install dnf-plugins-core epel-release -y |
安装openstack客户端
1 | dnf install python3-openstackclient openstack-selinux -y |
安装SQL数据库
1 | yum install mariadb mariadb-server python3-PyMySQL -y |
准备配置文件
1 | cat > /etc/my.cnf.d/openstack.cnf <<'EOF' |
启动数据库服务
1 | systemctl enable mariadb.service --now |
初始化root密码
1 | mysql_secure_installation << EOF |
输出
1 |
|
配置消息队列
消息队列的作用
在OpenStack中,消息队列(如RabbitMQ、Qpid等)是核心组件之一,它在OpenStack架构中扮演着至关重要的角色。以下是消息队列在OpenStack中的主要作用:
1. 异步通信
消息队列允许OpenStack中的各个服务之间进行异步通信。这种异步通信机制可以显著提高系统的响应速度和性能,避免服务之间直接调用时可能出现的阻塞问题。
示例:
- 当Nova服务创建虚拟机实例时,它会将创建请求发送到消息队列,然后由其他服务(如Nova-compute)从队列中获取请求并处理。这种方式使得Nova服务可以快速响应用户的请求,而不需要等待实例创建完成。
2. 负载均衡
消息队列可以将任务均匀分配到多个服务实例上,从而实现负载均衡。这有助于提高系统的整体性能和可扩展性。
示例:
- 在一个包含多个计算节点的OpenStack环境中,Nova-scheduler可以将创建虚拟机的请求发送到消息队列,Nova-compute服务的多个实例可以从队列中获取任务并处理。这种方式确保了任务不会集中在某个特定节点上,从而提高了资源利用率。
3. 解耦服务
消息队列使得OpenStack中的各个服务之间可以实现解耦。服务之间不需要直接调用对方的接口,而是通过消息队列进行通信。这种解耦机制提高了系统的灵活性和可维护性。
示例:
- Cinder服务(块存储)和Nova服务(计算)之间通过消息队列通信。Nova服务在需要创建卷时,将请求发送到消息队列,Cinder服务从队列中获取请求并处理。这种方式使得Nova和Cinder服务可以独立开发和维护,而不会相互影响。
4. 任务持久化
消息队列可以将任务持久化存储,即使在消息队列服务或处理任务的服务出现故障时,任务也不会丢失。这确保了任务的可靠性和系统的高可用性。
示例:
- 如果Nova-compute服务在处理创建虚拟机的任务时出现故障,任务仍然保留在消息队列中。当服务恢复后,它可以继续处理这些任务,从而保证任务不会丢失。
5. 扩展性和高可用性
消息队列支持集群部署,可以提高系统的扩展性和高可用性。通过部署多个消息队列节点,可以实现负载均衡和故障转移,从而确保系统的稳定运行。
示例:
- 在高可用部署中,可以部署多个RabbitMQ节点组成一个集群。当某个节点出现故障时,其他节点可以继续提供服务,确保消息队列的高可用性。
6. 事件通知
消息队列还可以用于事件通知,使得服务之间可以相互通知重要的事件和状态变化。
示例:
- 当Neutron服务创建或删除网络时,它可以将事件发送到消息队列,其他服务(如Nova)可以从队列中获取这些事件并进行相应的处理。这种方式使得服务之间可以及时响应彼此的状态变化。
安装rabbitmq
1 | yum install rabbitmq-server -y |
启动服务
1 | systemctl enable rabbitmq-server.service --now |
添加rabbitmq管理员用户
添加openstack用户
1 | rabbitmqctl add_user openstack LiXiaohui |
分配此用户为管理员
1 | rabbitmqctl set_permissions openstack ".*" ".*" ".*" |
配置memcached
memcached的作用
在OpenStack中,Memcached是一种高性能的分布式内存缓存系统,主要用于缓存频繁访问的数据,从而提高系统的性能和响应速度。以下是Memcached在OpenStack中的主要作用:
1. 身份认证缓存
Memcached在OpenStack的身份认证服务(Keystone)中扮演着关键角色。Keystone使用Memcached来缓存用户的身份认证信息,包括用户的令牌(Token)和角色信息。通过缓存这些信息,可以显著减少对数据库的访问次数,从而提高身份认证的效率。
具体作用:
快速验证:当用户请求访问OpenStack资源时,Keystone首先检查Memcached中是否已经缓存了该用户的令牌信息。如果缓存存在,可以直接使用缓存中的数据进行验证,而无需查询数据库,从而大大加快了验证速度。
减轻数据库压力:通过缓存频繁访问的身份认证信息,Memcached可以显著减少对后端数据库的查询次数,从而减轻数据库的负载,提高系统的整体性能。
2. 会话管理
Memcached可以用于管理用户的会话信息。在OpenStack环境中,用户的会话信息(如登录状态、权限信息等)可以存储在Memcached中,以便快速访问和管理。
具体作用:
快速会话恢复:当用户重新访问OpenStack服务时,系统可以通过Memcached快速恢复用户的会话信息,而无需重新进行身份验证,从而提高用户体验。
分布式会话管理:在分布式环境中,Memcached可以跨多个节点共享会话信息,确保用户在不同节点之间的无缝切换。
3. 减少数据库读取
除了身份认证信息,Memcached还可以缓存其他频繁访问的数据,如配置信息、资源状态等。通过缓存这些数据,可以减少对数据库的读取操作,从而提高系统的性能和响应速度。
具体作用:
提高读取效率:对于一些不经常变化但频繁访问的数据,如配置参数、资源状态等,Memcached可以提供快速的读取服务,避免每次访问都查询数据库。
减轻数据库压力:减少对数据库的读取操作可以显著减轻数据库的负载,特别是在高并发环境下,这有助于提高系统的整体性能和稳定性。
4. 分布式缓存
Memcached支持分布式部署,可以跨多个节点共享缓存数据。在OpenStack环境中,这种分布式缓存机制可以确保数据的一致性和高可用性。
具体作用:
数据一致性:通过分布式缓存,可以确保所有节点上的缓存数据保持一致,避免因数据不一致导致的问题。
高可用性:分布式缓存可以提高系统的高可用性。即使某个节点出现故障,其他节点仍然可以提供缓存服务,确保系统的正常运行。
5. 提高系统性能
通过缓存机制,Memcached可以显著提高OpenStack系统的整体性能。缓存数据的读取速度远远快于从数据库中读取数据,这可以显著减少系统的响应时间,提高用户的满意度。
具体作用:
快速响应:缓存机制可以显著减少系统的响应时间,提高用户体验。
优化资源利用:通过减少对数据库的访问,可以优化资源利用,提高系统的整体性能。
安装memcached
1 | yum install memcached python3-memcached -y |
修改监听IP
将服务的IP更改为使用管理接口的IP
1 | sed -i 's/OPTIONS=.*/OPTIONS="-l 127.0.0.1,::1,controller"/' /etc/sysconfig/memcached |
启动服务
1 | systemctl enable memcached.service --now |
配置ETCD
1 | yum install etcd -y |
把这/etc/etcd/etcd.conf的几个IP都换成管理接口的IP: ETCD_INITIAL_CLUSTER
, ETCD_INITIAL_ADVERTISE_PEER_URLS
, ETCD_ADVERTISE_CLIENT_URLS
, ETCD_LISTEN_CLIENT_URLS
1 | cat > /etc/etcd/etcd.conf <<'EOF' |
启动服务
1 | systemctl enable etcd --now |