热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

生产环境中OpenStack的高可用性设计

OpenStack的高可用集群划分基础架构服务高可用控制服务高可用网络服务高可用存储服务高可用计算服务高可用基础架构服务高可用包括消息队列服务高可用、数据库服务高可用和缓存服务

OpenStack的高可用集群划分

    • 基础架构服务高可用
    • 控制服务高可用
    • 网络服务高可用
    • 存储服务高可用
    • 计算服务高可用


基础架构服务高可用

包括消息队列服务高可用、数据库服务高可用和缓存服务高可用


控制服务高可用

Nova-API、Glance-API和Neutron-server等
目前主流的OpenStack控制服务高可用性主要分为两大类:



  • Pacemaker和Haproxy

  • Keepalived和Haproxy

在这两种方案中,OpenStack控制服务和基础架构服务通常都部署在三台控制节点上,OpenStack控制服务以Active/Active或Active/Passive高可用模式运行在三个节点上,并且OpenStack基础架构服务的高可用实现在两种方案中是类似的。
如通过消息队列镜像方式实现RabbitMQ服务的高可用,通过Galera集群实现Mysql或MarriaDB数据库的高可用,通过列表形式实现Memcache缓存服务的高可用行。


网络服务高可用

网络服务的高可用主要涉及API服务、L2和L3服务的高可用。API由于是无状态服务,因此通过三节点和HAProxy负载均衡器即可解决,但是像L3这种有状态服务,则需专门的高可用解决方案–L3 HA和DVR。



  • L3 HA高可用解决方案

这种主要思想是在多个网络节点(通常就在控制节点)上同时部署L3 Agent服务。当租户创建高可用L3 Router时,在多个运行L3 agent的网络节点上同步创建多个L3 Router实例,不同网络节点上的L3 Router 完全相同,借助VRRP使得多个网络节点上的L3Router具有不同的运行状态,即其中仅有L3 Router 是Master状态,而其他Router是Standby状态。正常情况下,Master向虚拟机提供路由服务,当Master出现故障时,重新从standby状态的L3 Router选举新的Master。



  • DVR高可用方案

L3 HA高可用方案虽然可以解决网络服务高可用问题,但是由于集群中全部东西和南北向网络流量全汇聚到网络节点,因此在大规模集群中很容易造成网络节点的瓶颈。DVR解决方案将所有东西流量和南北向中的DNAT全部转移到各个计算节点,网络节点仅保留南北向流量中的SNAT功能,因此分布式的虚拟路由不仅解决了L3 的高可用问题,同时也解决了网络瓶颈问题。

在实际应用中,为了解决DVR方案中SNAT的高可用性,通常将DVR与L3 HA高可用方案同时启用,从而利用L3 HA高可用方案解决SNAT的单点故障问题。


存储服务高可用

Cinder-volume、Ceph RBD
Cinder项目是OpenStack私有云建设中最主要的存储服务提供者,但是Cinder服务的高可用一直被诟病,主要原因在于Cinder-volume使用了本地锁,因此无法实现在Active/Active模式下的高可用运行。
因此对于Cinder服务的高可用,目前主流的做法仍然是通过HaProxy实现Cinder-scheduler的高可用性,并将Cinder-volume以Active/Passive模式运行在Pacemaker集群中,由pacemaker来控制Cinder-volume的高可用。
在这里插入图片描述

实践中,存储高可用最佳实践采用Ceph分布式存储解决方案。在Ceph存储高可用方案中,存储服务前段(如cinder-API和cinder-scheduler)的高可用由HAProxy实现,存储后端的高可用直接交由Ceph分布式存储集群。


计算服务高可用

Nova-compute和虚拟机

计算服务是Openstack私有云中最核心的服务,由于社区一直未提供完善的计算服务高可用解决方案,因此只能通过第三方基础架构软件来实现。
最主流的便是由Redhat主导的pacemaker_remote计算服务高可用解决方案。其重要部署在计算节点上,从而将计算节点与控制节点全部加入pacemaker集群,最终将Openstack计算服务纳入Pacemaker集群中进行高可用实现。

采用pacemaker_remote解决方案,用户无须自己编写脚步监测计算节点服务运行情况,而通过Redhat开源代理fence-agent和resource-agent即可自动实现对计算节点服务的监测、隔离和虚拟机撤离操作。


推荐阅读
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • ZooKeeper 学习
    前言相信大家对ZooKeeper应该不算陌生。但是你真的了解ZooKeeper是个什么东西吗?如果别人面试官让你给他讲讲ZooKeeper是个什么东西, ... [详细]
  • Nginxgaodaima.comnginx属于七层架构,支持的是http协议,本身对tcp协议没有支持。所以不能代理mysql等实现负载均衡。但是lvs这个东西不熟悉,主要是公司 ... [详细]
  • 什么是网关服务器初学linux服务器开发时,我们的服务器是很简单的,只需要一个程序完成与客户端的连接,接收客户端数据,数据处理,向客户端发送数据。但是在处理量很大的情况下,一 ... [详细]
  • 朱晔的互联网架构实践心得S1E7:三十种架构设计模式(上)【下载本文PDF进行阅读】设计模式是前人通过大量的实践总结出来的一些经验总结和最佳实践。在经过多年的软件开发实践之后,回过头 ... [详细]
  • Kubernetes(k8s)基础简介
    Kubernetes(k8s)基础简介目录一、Kubernetes概述(一)、Kubernetes是什么(二& ... [详细]
  • celery 爬虫使用
    简介celery是一个基于分布式消息传输的异步任务队列,它专注于实时处理,同时也支持任务调度。它由三部分组成,消息中间件, ... [详细]
  • OpenStack 的 Nova 和 Glance 组件
    简单回顾一下OpenStack三大组件的用途:OpenStackCompute(Nova),为云组织的控制器,它提供一个工具来部署云&#x ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  •  Rabbitmq是对AMQP协议的一种实现。使用范围也比较广泛,主要用于消息异步通讯。 ... [详细]
  • RabbitMQ消息中间件快速入门:SpringBoot整合生产者与消费者
    前言本章我们来一次快速入门RabbitMQ——生产者与消费者。需要构建一个生产端与消费端的模型。什么意思呢?我们的生产者发送一条消息,投递到RabbitMQ集群也就是Broker。 ... [详细]
  • 原文:蚊子132围绕对象存储系统(Swift)做研发工作蚊子132当时的第一个任务是在青岛IDC部署一套小规模的Openstack集群用于支持内部的开发环境。虽然我 ... [详细]
  • 【Hoxton.SR1版本】Spring Cloud Stream消息驱动
    目录一、简介二、搭建消息生产者端三、搭建消息消费者端四、消息重复消费问题五、消息持久化六、总结一、简介在实际项目中,服务与服务之间的通信往往我们会采用消 ... [详细]
  • 领域驱动设计 领域事件DDD分层架构
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了领域驱动设计领域事件DDD分层架构相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
小思绪
创造人生的可能
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有