热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

OpenStack的Swift使用经验

1.Swift概述1.1Swift在整个openstack项目中所处的位置Swift属于openstack项目里面的一个负责数据对象存储的一个项目,由Rackspace公司开发。它在整个openstack项目中所处的位置如下:通过上图可以看出,openstack通过计算项目,然后通过镜像服务找到存
1.Swift概述
1.1 Swift在整个openstack项目中所处的位置

Swift属于openstack项目里面的一个负责数据对象存储的一个项目,由Rackspace公司开发。它在整个openstack项目中所处的位置如下:

通过上图可以看出,openstack 通过计算项目,然后通过镜像服务找到存储的数据。

1.2    Swift项目的内部概述

在Swift中会涉及到Proxy  Server,Account Server,Container server,Object Server四种服务器。在Account Server,Container server,Object Server 3个服务器中都会有复制器(Replication),更新器(Updater),审计器(Auditor),分别负责相应服务存储数据的复制,更新,及其数据的审核。

在Account server中存储了包括的该系统会涉及到的容器列表,在Container server中,包含的是该系统存储的所有的对象信息列表,这两种服务器的数据组织都以Sqlite数据库文件的形式存储,而Object Server是一个非常简单的块存储服务器,对象以二进制形式存储。

1.3   Swift的大概工作机制(目前没有准确理解)

  代理服务器接受外部网络相应的请求,根据代理的相应的一些策略(比如负载均衡,如果一个节点断电查找其他节点等),通过查找账户服务,容器服务,知道相应的对象服务,然后从对象服务器中返回相应的对象,将对象返回给代理服务器,通过代理服务器返回给外部网络,大概的一种硬件部署图如下:

2.Swift中的一些概念说明
2.1内容服务器/账户服务器如何存储列表?

Container Server的主要职责是提供objects的列表,objects列表以sqlite数据库文件的形式存储,并且像objects那样在集群中被备份。

2.2 对象服务器如何存储对象?

Object Server是一个非常简单的块存储服务器,它可以用来存储,获取和删除存储在本地存储设备上的objects。objects以二进制文件的形式,连带着存储在扩展属性(xattrs)中的元数据,被存储在文件系统上(xattrs)。这需要存储objects的基础文件系统支持文件的xattrs。像ext3的一些文件系统,默认是关闭xattrs的。

2.3 代理服务器如何进行工作?

Proxy Server负责将Swift架构的其他部分绑定在一起。对每一个请求,Proxy Server都要在环中查找account,container,或者object的位置,并且将请求转送到对应的地方。公开的API也是通过Proxy Server暴露出来。大量的失败也是由Proxy Server处理的。比如,如果一个server无法对一个object的PUT操作进行相应,它将从环中查询一个可以接手的server并将请求转递给它。当objects被传送object server或者从object server下载,他们将被直接通过proxy server传送。

2.4. 复制器如何进行复制?

复制器被设计用来在面临临时性错误(比如断网或存储器错误)时,保护系统的一致性。复制进程通过将本地数据与每一个远程备份进行比较,来确保它们都是最新版本的数据。Object复制器使用一个哈希列表来迅速地比较每一个分区的子部分,同时container和account复制器使用哈希的排列并且共享高峰标记。复制操作的更新是基于PUSH的方式。比如object的复制操作,更新就是一个往其他节点同步文件的过程。Account和container的复制操作通过HTTP来PUSH丢失的记录,或着远程同步全部的数据库文件。复制器同时也确保数据从系统的删除。当一个条目(object, container, account)被删除,一个墓碑将作为此目标的最新版本被设置。复制器将见到此墓碑,并将确保此目标被从所有的系统中删除。

2.5. 更新器如何进行更新操作?

    当contaniner或account数据不能被立即更新的情况会多次出现。这通常当出现错误或者系统过载时会发生。当一个更新失败时,更新操作就会在本地文件系统上排队,然后更新器会处理这些失败的更新。这时最终一致性的窗口会适时地出现。比如,假设当一个container server处于低负载并且一个新的object被put到系统中时,一旦proxy server向客户端回复成功消息,此object就将立即可读。然而,container server不会更新object的列表,并且因此更新将被排队以等待稍候的更新。此刻container列举的清单,可能不回立马包含此object。在实践中,一致性窗口的大小仅仅与更新器运行的频率一致,并且ProxyServer不会将list请求转递给最初对请求进行回复的那个ContainerServer。低负载的服务器可能不会接手接下来的list请求---其他的两个备份中的一个会处理此list请求。

2.6.审计师如何进行审计操作?

审计师爬行本地服务器来检查objects,containers和accounts的完整性。当一个文件被发现有损坏(比如一点损坏),它将被隔离,并且复制器将同其他的副本复制一份来代替此损坏的文件。如果有别的错误发生,它们将被记录日志(比如列举一个object时,在所有的它应该位于的container server中都无法找到)。

2.7什么是环?

    环代表磁盘上所存储的实体的名称与他们物理位置之间的映射。它们是分别对应于accounts,containers和objects的环。当其它的组件需要对object,container或者account执行某个操作时,它们需要通过

与对应的环沟通来确定执行客体在集群中的位置。

2.8.为什么要用Memcached?Memcached部署在哪儿?

     Swift本身并不缓存任何数据对象,缓存单独用Memcached实现。Memcached用于缓存令牌信息,存在在容器跟账户等。在Rackspace,将Memcached部署在代理服务器上面,具体配置在文件proxy-server.conf中进行配置。

2.9.系统时间的同步

时间或许是相对而言的,但是它却是Swift中非常重要的一个因素!Swift使用时间戳来确定哪个才是对象的最新版本。将集群中的所有服务器的系统时间同步到最同步的状态非常重要(尤其是Proxy,但是最好将所有服务器的时间都同步)。在Rackspace,我们使用本地的一个NTP服务器来确保系统的时间尽可能地接近。这同样也应该被严密监视以确保系统时间相差不会太大。

2.10.一般服务的调节(General Service Tuning)

大多数的服务都支持一个或者多个并发的处理器。这使服务可以更大化地利用多核的性能。一个好的起点是将Proxy和存储服务器的并发水平设置为内核数量的两倍。如果有1个以上的服务在共享一个服务器,那需要做些具体的实验以找出最平衡的方式。

2.11环中涉及到地一些概念

Zone(区域):一个zone可以代表一个存储器,一个服务器,一个机柜,一个交换机,甚至一个数据中心。

devices(存储):

partitions(分区):

replicas(副本):

Weight(权重):权重可以用来均衡存储设备上的partitions在集群间的分布。这是非常有用的,比如,当大小不同的存储设备被使用在同一集群中时。

3.Swift学习中还有的一些问题
.1在swift中,服务器本身不修改环,而是通过外部工具,通过什么外部工具呢?       

环的管理由一个叫做ringbuilder的工具进行管理。

3.2用Ring builder具体如何进行环的管理? 3.3如何进行分区(partition)? 4 Swift的安装部署

    由于Swif我目前为止还没有进行过真正的安装部署,所以暂时不写本部分,能成功部署后再补上这一块内容。


推荐阅读
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • Ralph的Kubernetes进阶之旅:集群架构与对象解析
    本文深入探讨了Kubernetes集群的架构和核心对象,详细介绍了Pod、Service、Volume等基本组件,以及更高层次的抽象如Deployment、StatefulSet等,帮助读者全面理解Kubernetes的工作原理。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文探讨了在 ASP.NET MVC 5 中实现松耦合组件的方法。通过分离关注点,应用程序的各个组件可以更加独立且易于维护和测试。文中详细介绍了依赖项注入(DI)及其在实现松耦合中的作用。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
author-avatar
mobiledu2502921803
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有