查看原文
其他

OpenStack部署1.0:基础环境部署(train)

李逸皓 运维book思议 2023-10-21

先放个链接,万一有人关注呢

优质文章推荐

↓ ↓ ↓ ↓ ↓

ESXi虚拟化系统创建与应用

Linux ps命令没想到还能这样用

Linux网卡配置文件详解

CentOS再见!拥抱Rocky or Alma

一文搞懂Linux下的神级编辑器:Vim

OpenStack是一款开源的云计算管理平台,用于构建私有云和公有云基础设施。它由NASA和Rackspace合作开发,并以Apache许可证方式开源发布。OpenStack项目实际上是多个细分项目的集合,每个项目完成一个功能模块,这些模块通过API进行交互,共同完成对底层计算、存储、网络资源的管理。
概念简述
OpenStack的诞生源于2010年,最初它只包含两个核心组件:计算服务Nova和对象存储服务Swift。后来陆续加入了图像服务Glance、身份认证服务Keystone等,形成了较为完整的云计算管理平台。每个服务都是一个独立的项目,有自己的开发团队进行维护。
OpenStack的主要服务组件包含:
Nova - 提供计算服务,相当于虚拟化平台,可以用来管理虚机实例的全生命周期,包括启动、停止、恢复、迁移等操作。Nova需要与Keystone进行身份认证,与Glance进行镜像管理。
Neutron - 提供网络服务,让用户可以通过API定义虚拟网络拓扑,实现网络管理的自动化。可以提供路由、DHCP、负载均衡等服务。
Keystone - 提供身份认证服务,相当于一个统一的认证系统,用于验证用户身份、管理服务目录、注册端点信息等。这是OpenStack访问控制的基石。
Glance - 提供虚机镜像服务,用户可以通过Glance上传镜像、查询镜像、检索镜像元数据信息等。Glance支持多种镜像格式和后端存储。
Cinder - 提供块存储服务,在计算节点和不同的存储设备之间提供了逻辑存储的抽象层。这样可以支持多种存储后端,为用户提供创建/删除卷、创建快照等功能。
Swift - 提供对象存储服务,用于存储非结构化的数据,它具有高度容错性、伸缩性和持久性。Swift采用分布式存储,可以存储大量不需要进行变更的静态数据。
除了这些核心服务,后续还加入了Horizon、Ceilometer等其它模块。Horizon提供了Web界面,供用户访问各种OpenStack服务和资源。Ceilometer提供了计量和监控功能。所有的服务都对外提供REST风格的API,以方便与其它系统集成。
OpenStack系统可以灵活部署,适应不同规模的应用场景,既可以在单节点上全置,也可以分布在多个节点上。同时它也可以与虚拟化和容器技术结合使用,组建强大的私有云基础设施。
部署开始

准备3台主机配置在2核2G或以上,存储20G以上,尽量配置高一些。3台主机分别作为控制节点计算节点块存储节点

主机网络(3台都要做)

为了试验方便,关闭3台主机的外部与内部防火墙

systemctl stop firewalldsystemctl disable firewalldsetenforce 0sed -ri '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config

配置静态IP(3台),防止DHCP导致的IP变动

vim /etc/sysconfig/network-scripts/ifcfg-ens33

内容大致如下

TYPE="Ethernet"PROXY_METHOD="none"BROWSER_ONLY="no"#将原来的dhcp修改为staticBOOTPROTO="static"DEFROUTE="yes"IPV4_FAILURE_FATAL="no"IPV6INIT="yes"IPV6_AUTOCONF="yes"IPV6_DEFROUTE="yes"IPV6_FAILURE_FATAL="no"IPV6_ADDR_GEN_MODE="stable-privacy"NAME="ens33"UUID="21b39a7b-a822-4266-ae8d-c02cdc90adaa"DEVICE="ens33"ONBOOT="yes"
#添加如下内容#IP地址IPADDR=192.168.2.161#子网掩码NETMASK=255.255.255.0#默认网关GATEWAY=192.168.2.1#默认域名解析地址DNS1=8.8.8.8

重启网络

systemctl restart network

这里用的是CentOS 7,如果是CentOS 8,则不能用此命令重启网络。

分别给3台主机修改主机名

hostnamectl set-hostname controllerhostnamectl set-hostname computehostnamectl set-hostname compute2

解析主机名(3台),为了3台主机方便连接

vim /etc/hosts

添加如下内容

192.168.2.161 controller192.168.2.162 compute192.168.2.163 compute2

在CentOS中,CentOS默认启用extras仓库,extras仓库提供OpenStack所用的RPM包,因此可以直接安装OpenStack所用的RPM包。

更换国内源

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

安装软件包

yum -y install centos-release-openstack-train

升级软件包

yum upgrade

安装OpenStack客户端

yum -y install python-openstackclient

网络时间协议(控制节点与其他节点的操作不同)

NTP(Network Time Protocol)是一种网络时间同步协议,它允许计算机通过网络交换时间信息,从而使网络中的所有计算机实现时间同步。NTP协议最初由David Mills于1985年设计。
Chrony是NTP协议的一种实现,由Richard P. Curnow维护开发。Chrony包含NTP协议的客户端和服务器实现,所以可以作为NTP客户端同步其他NTP服务器的时间,也可以作为NTP服务器提供时间同步服务。
Chrony作为NTP协议的实现,提供了比传统NTP更好的算法和实现,在速度、准确性、稳定性等方面都有改进,是Linux系统首选的时间同步方案。但 Chrony仍完全兼容NTP协议,可以无缝地用于当前基于NTP时间同步的环境中。

在所有节点安装Chrony

yum -y install chrony

控制节点,编辑配置文件

vi /etc/chrony.conf

添加如下内容

#根据控制节点主机名配置server controller iburst#根据主机所处的网段配置allow 192.168.2.0/24

计算节点块存储节点编辑配置文件,在配置文件中添加如下内容

#根据控制节点主机名配置server controller iburst

启动服务(3台)

systemctl enable chronydsystemctl start chronyd

验证是否配置成功

chronyc sources -v

输出如下

210 Number of sources = 1MS Name/IP address Stratum Poll Reach LastRx Last sample ^* controller 2 6 177 16 +601us[+1255us] +/- 37ms

MS的值为^*时,说明时间同步配置成功

数据库(控制节点)

数据库服务在OpenStack中的主要作用有:
1、存储OpenStack各组件的配置信息、状态信息、日志等数据。各组件需要持久化存储大量的数据。
2、实现不同组件之间的数据共享。组件可以通过数据库访问其他组件的数据。
3、提供查找服务。实例、网络、镜像等信息的数据都存储在数据库中,需要快速查找。
4、记录审计日志。OpenStack的操作记录如API访问日志会存入数据库。
5、存储块存储的数据。Cinder块存储的数据本身就存放在数据库中。
6、支持高可用。通过数据库复制等手段实现高可用。
所以数据库是OpenStack不可或缺的关键服务,为OpenStack提供存储、查询、共享数据的功能。选择合适的数据库非常重要,直接影响到OpenStack的性能、可靠性和可扩展性。

OpenStack服务支持MariaDB、MySQL等SQL数据库,这里选择MariaDB。

安装数据库

yum -y install mariadb mariadb-server python2-PyMySQL

编辑配置文件,设置监听地址及数据库的相关配置,使得其他节点能够通过控制节点访问数据库

vi /etc/my.cnf.d/openstack.cnf

内容如下

[mysqld]bind-address = 192.168.2.161 #监听地址default-storage-engine = innodb #设置默认存储引擎innodb_file_per_table = on #开启独享表空间max_connections = 4096 #设置最大连接数collation-server = utf8_general_ci #设置校对规则character-set-server = utf8 #设置默认字符集

开启服务

systemctl enable mariadb.servicesystemctl start mariadb.service

初始化数据库

mysql_secure_installation

在初始化过程中需要手动配置密码,为了操作方便,这里使用一个简单的123密码。

消息队列(控制节点)

OpenStack常用的消息队列有:
RabbitMQ:这是OpenStack最广泛使用的消息队列,大多数组件默认采用它来进行交互。RabbitMQ是一个由Erlang编写的AMQP协议的消息队列。
Qpid:这是一个由Apache基金会开发的开源消息队列,也支持AMQP协议,部分OpenStack组件可选用它。
ZeroMQ:这是一个轻量级的消息队列,用在一些OpenStack组件进行通信。
Kafka:这是一个高吞吐量的分布式消息队列,部分 OpenStack组件已支持它。
消息队列在OpenStack中的主要作用:
1、解耦服务之间的直接调用关系,通过异步消息调用提高扩展性。
例如,计算节点之间需要通信确认虚拟机的迁移操作。传统方式是直接RPC调用,这将产生强耦合。而通过消息队列进行异步消息通知,可以降低耦合,也更有利于扩展计算节点。
2、接收用户请求并将请求分发给各服务,协调服务之间处理流程。
例如,当用户发起虚拟机创建请求,消息队列可以将请求传递给Nova计算服务、Cinder存储服务、Neutron网络服务等,协调它们一起创建虚拟机。
3、发送配置信息或状态变更通知给各个服务。
例如,Neutron网络服务在配置网路拓扑时,可以通过消息队列向Hypervisor发送配置通知。
4、收集系统日志、指标信息到中心服务进行处理。
例如,各计算节点通过消息队列发送日志到中心日志服务器,或发送性能指标到监控系统。
5、支持不同节点之间的负载均衡。
例如,消息队列可以将请求均匀地分发给不同的计算节点或API节点。
6、提供数据缓冲和削峰功能,应对突发请求。
例如,消息队列可以缓冲大量的读请求,逐步发送给存储服务以平滑流量突峰。
7、实现不同服务之间的数据分发。
例如,镜像服务可以通过消息队列将镜像分发到不同的计算节点。

安装RabbitMQ

yum -y install rabbitmq-server

开启服务

systemctl enable rabbitmq-server.servicesystemctl start rabbitmq-server.service

RabbitMQ服务添加openstack用户

rabbitmqctl add_user openstack 123 #123是密码

输出如下

Creating user "openstack"

给予openstack用户读和写的权限

rabbitmqctl set_permissions openstack ".*" ".*" ".*"

输出如下

Setting permissions for user "openstack" in vhost "/"

对象缓存服务(控制节点)

OpenStack对象存储主要有以下两种:
1、Memcached:这是一个基于内存的分布式缓存,可以大幅提升数据库访问速度。OpenStack大多数服务都使用memcached缓存常用对象。
2、Redis:这也是一个开源的内存键值缓存,提供更丰富的数据结构和操作,某些OpenStack服务会采用它。
对象缓存的主要作用有:
1、缓存常读取的对象数据,避免每次从数据库读取,提高访问速度。
例如,缓存虚拟机列表、网络列表以快速响应列表操作。
2、缓存计算结果,避免重复计算。
例如,缓存筛选规则的计算结果,提高筛选响应速度。
3、缓存大对象,避免数据库压力。
例如,缓存虚拟机镜像、上传文件的内容等大对象。
4、缓存经常变更的信息。
例如,缓存虚拟机的最新状态,如IP地址、状态等。
5、分布式锁,协调不同服务。
例如,实现分布式互斥锁来协调多个服务对同一个资源的访问。
6、工作队列,平滑处理突发请求。
例如,使用队列缓存大量写请求,逐步处理以保护后端存储。

安装Memcached

yum install memcached python-memcached

修改Memcached的配置文件,将服务配置为控制节点的IP地址

vi /etc/sysconfig/memcached

内容如下

OPTIONS="-l 192.168.190.129,::1,controller"

开启服务

systemctl enable memcached.servicesystemctl start memcached.service

键值存储服务(控制节点)

Etcd是一种可靠的分布式键值存储服务,用于存储配置、跟踪服务实时性等场景。etcd为OpenStack提供关键的协调和数据存储服务,是构建可靠分布式云管理平台的重要组件。

etcd不属于典型的NoSQL数据库,准确来说它是一个采用Go语言开发的分布式键值存储系统。etcd作为一个优秀的分布式键值存储系统,与一般意义上的NoSQL数据库有明显区别,它更专注在分布式协调和key-value存储方面,而不是作为通用数据库使用。

etcd是一个可靠的分布式KV存储,它主要用于OpenStack集群中各服务的协调和状态存储,具体作用如下:
1、服务发现和注册
各服务节点可以将信息注册到etcd,这样便于服务之间相互发现。例如compute节点注册到etcd。
2、配置存储和共享
etcd可用于存储OpenStack的配置信息,各服务通过etcd共享配置。例如存储控制器的配置并共享。
3、锁服务
etcd提供分布式锁功能,用于协调各服务对共享资源的访问。例如不同节点之间启动虚机的互斥访问。
4、高可用协调
etcd的Raft协议可以实现主节点选举,用于检测失败和容错。例如存储集群的leader选举。
5、事件监听
etcd支持订阅和通知模型,服务可以 Watcher事件变化。例如监听虚机的状态变化。
6、分布式队列
etcd可实现分布式队列,用于存储任务消息并均衡调度。例如请求缓存队列。

安装Etcd服务

yum install etcd -y

修改Etcd的配置文件,将服务设置为控制节点的IP地址

vi /etc/etcd/etcd.conf

内容如下

#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.2.161:2380"ETCD_LISTEN_CLIENT_URLS="http://192.168.2.161:2379"
ETCD_NAME="controller"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.2.161:2380"ETCD_ADVERTISE_CLIENT_URLS="http://192.168.2.161:2379"ETCD_INITIAL_CLUSTER="controller=http://192.168.2.161:2380"ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"ETCD_INITIAL_CLUSTER_STATE="new"

开启服务

systemctl enable etcdsystemctl start etcd
未完待续。。。。

来不及解释了,快上车!(进群看公告)

欢迎新的小伙伴加入!在这里,我们鼓励大家积极参与群内讨论和交流,分享自己的见解和经验,一起学习和成长。同时,也欢迎大家提出问题和建议,让我们不断改进和完善这个平台。

              ↓↓↓ 点个在看,你最好看!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存