相关阅读:

三年无bug,提升代码质量的秘诀

背景

目前,对互联网行业而言,在数据库应用上大规模使用SQL Server的并不多见,更多的企业基于LAMP架构来使用MySQL数据库。在这样的背景下,业内基于MySqL数据库的应用架构非常活跃,提供了多种选择,而基于SQL Server数据库的架构,可供参考的案例则极其有限。

有别于MySQL在数据库架构设计上的多样性和灵活性,基于SQL Server的高可用架构更多的还是基于SAN存储的集群架构。

同时,在云计算蓬勃发展的今天,各种公有云、私有云及混合云技术在IT基础架构中都得到很好的发展及应用。基于对这种趋势的判断,未来云计算将成为主流。 对于SQL Server数据库的架构而言,如何能够将虚拟化及私有云技术应用到其中是一个可以值得研究的课题。

基于以上,我们希望设计一套针对SQL Server的高可用架构,能够充分利用私有云的相关技术,同时在存储架构上能够有别于传统的SAN网络。


方案设计

对于私有云,我们最先想到的会是开源的OpenStack技术,这估计是目前被应用得最多的开源云计算技术。

在方案设计之初,我们也尝试利用OpenStack来支持SQL Server数据库,尝试着去搭建能够满足我们需求的架构,但在进一步的了解与测试之后,发现并不合适。虽然在OpenStack上搭建Windows虚拟机是可行的,但考虑到OpenStack对Windows的有限的支持能力,以及数据库应用对于IO的高吞吐要求,我们会担心在性能上并不能满足对搭建SQL Server数据库的实际需要;同时,在其它方面也存在很大的局限性和不确定性。

最终我们放弃了开源的技术方案,转而寻找微软技术体系下的可替代方案。

得益于微软对于Windows Server的不断升级与优化,最终借助于Windows Server 2012 R2中的相关技术,我们可以快速搭建一套在Windows平台下的私有云架构,逻辑结构如下:

整体架构分为四层:

  • 最上层是我们的应用层,利用 Hyper-V技术来实施虚拟化,能够为具体的业务应用提供满足实际需要的计算资源;同时结合群集服务,我们可以实现虚拟机在不同宿主机之间的动态迁移。

  • 第二层为文件系统层,利用SOFS技术来为上层应用提供高可用的共享存储服务。在应用层计算节点与SOFS文件共享服务之间, 将利用SMB3.0协议来提供高效的数据交互服务。在这种架构下,对于Hyper-V虚拟机,其所有文件(包括虚拟机配置,VHD文件,快照)都将存储在SOFS之上。

  • 第三层为存储空间层,利用Windows Server 2012最新的WSS技术,将底层的硬件存储资源通过虚拟化技术整合为可用的逻辑磁盘,提供给上层的SOFS来使用,是一种可靠的存储池资源;

  • 最下层为物理硬件层,提供了实际的物理空间支持,可支持动态扩展。

核心技术

在这套架构中,我们将要用到Windows Server 2012中的推出的以下几个非常实用的技术及功能:

SMB3.0

Windows标准文件共享协议3.0版本,是SMB协议最大的一次飞跃,可在客户端和服务端之间提供了一种高效的数据交换通道,能够提供与直连存储(DMA)相当的访问性能。

SMB3.0协议支持以下新的特性,为我们构建高可用的应用架构提供极大的灵活性:

  • 分布式支持:SMB3.0可以将多台服务器组建成为一个集群,使服务端的所有节点统一起来,共同为客户端节点提供文件访问服务。该集群支持横向扩展,可以动态添加或删除节点。

  • 透明故障切换:在集群模式下,SMB3.0提供了故障转移功能,能够在服务端的一个节点出现故障的情况下,自动的将客户端的请求平滑的转移到另一个服务节点之下,实现0的宕机时间,从而保证应用的高可用性。

  • RDMA支持:借助于符合要求的硬件,SMB3.0协议提供了对远程直接内存访问(RDMA)网络适配器的支持,可以让存储的性能与光纤通道相匹配,从而绕过系统的内核直接在内存中进行读写操作,达到与直连存储一样的远程存储速度。该功能使SMB共享能够获得更高的带宽和更低的延迟,从而有效减轻CPU处理 I/O的负载压力,非常适合Hyper-V或SQL Server等读写密集型的应用。

  • SMB多通道:多通道技术能够充分利用客户端及服务端的多个网卡,提供多路径支持,在一个网卡出现故障时快速的进行自动切换,从而有效避免网络故障对整体稳定性的影响。另外在多网络可用的情况,多通道还可以提供网络带宽聚合功能,充分利用硬件资源来提高吞吐量,从而提高应用整体的性能。

WSS

Windows Server 2012下的WSS(Windows Storage Spaces)服务提供了一种针对存储的虚拟化技术,可以对所有由SAS和SATA连接的磁盘进行整合,统一到一个称为存储池的管理单元之中进行分配,通过划分虚拟磁盘来对外提供空间服务,能有效的简化我们对于存储的管理。

WSS具备以下新的特性:

  • 高可用性支持

对于从存储池中创建的任何虚拟磁盘,WSS可以提供以下三种类型的高可用性:

  • 单镜像

  • 为了额外保护的2路或3路镜像

  • 奇偶校验 (RAID 5)

在实际项目中可以根据需要,灵活的来进行配置。

  • 分层管理

WSS引入了一个全新的,基于策略的自动分层机制,能够有效的利用好不同的存储介质。 比如可以基于使用频率来有效的区分冷、热数据,从而为其分配不同的存储介质。对于经常变更的热数据,将被存储在访问速度更快、价格也相对更高的驱动硬盘之上;而对于不经常变更的冷数据,则会被存储在速度相对较慢,较为廉价的磁盘之上。同时,当冷、热数据的状态发生变化时,WSS可依照预定义的策略来执行数据的自动迁移。

  • 数据去重

WSS支持数据去重功能,能有效的去掉重复数据的冗余,从而提高存储设备的使用效率,降低总体的成本开销,提高设备的使用周期。

SOFS

SOFS(Scale-Out File Server)扩展文件服务是微软在Windows Server 2012中推出的一项全新的技术,可以为前端应用(如Hyper-V或SQL Server)提供一种高可用的、可扩展的共享存储服务。其在性能及可靠性上能够提供与传统SAN存储相当的能力。

为了保证高可用性,SOFS需以集群的AA模式来部署,群集中所有的节点都处于在线状态,当有节点出现故障时,来自客户端的访问会话会自动被重定向到其它可用的节点之上。

另外,SOFS服务最终交付给客户端会是一个UNC的网络路径,当不同的客户端访问SOFS时,会根据访问的共享对象,进行负载均衡。可能这一次SMB客户端访问SOFS 的UNC路径是节点1提供的连接,而下一次SMB客户端访问就有可能是节点2来提供连接。

以上几个技术是我们整个架构的核心。

私有云实践

利用以上架构及其所涉及到的相关技术,同时配合一定的硬件资源投入,我们就可以打造一个高可用的私有云架构。

我们能够做到在整体上不存在单点,同时在各级链路均有冗余。

对于应用层的计算节点,我们利用Windows Cluster来保证Hyper-V虚拟机的高可用。

对于文件层的服务节点,我们利用SOFS集群的AA模式及SMB3.0的透明故障转移来保证文件访问的高可用。

对于存储节点,我们利用虚拟磁盘的奇偶校验 (RAID 5)模式来保证数据的完整性。

在网络层面,我们利用硬件来保证足够的冗余。

最终的我们的应用架构如下(部分):

物理空间我们以JBOD的方式来提供,在实际应用中使用了4个MD1200的盘柜,组成了两个逻辑设备组,每个逻辑设备组都会配置一个使用快盘的MD1200和一个使用慢盘的MD1200(用于支持冷热数据的分层管理)。而JBOD设备则通过HBA卡来直连文件服务器。

文件服务器利用两台RD720来搭建,以此组成SOFS的双A节点,配置了SSD硬盘,支持CSV Cache功能,为应用提供了更高的性能。

应用层的宿主机和文件服务器之间使用两台万兆光纤交换机来连接,既保证了网络层面的冗余,同时也能够最大的发挥SMB3.0协议的传输性能。

应用层投入8台服务器作为宿主机,支持Hyper-V的虚拟化。

搭建完成之后,我们充分模拟了各种可能出现的故障,经过一系列的测试,在可用性层面,最终的结果令我们非常满意。

另外,对于整体的性能,由于借助了SMB3.0的多通道及RDMA技术,以及利用到了SSD支持的CSV Cache技术,经测试,对于随机读写可取得一个比较好的IOPS值,完全能够支持SQL Server对于高IO的要求。

扩展性层面,应用层可以通过扩充计算节点来支持更多的Hyper-V虚拟机,而存储空间则可以通过加入更多的SOFS节点来支持横向扩展。

在建设成本方面,初期会有一个中等规模的投入,但远期扩展成本会变的非常低廉,相较于SAN架构,性价比非常高且可控性更强。

整套应用将基于SCOM(System Center Operations Manager)来进行管理,支持高效的配置与调整,易用性较好。

SQL Server的支持

我们已经完成了一个高可用的私有云平台的搭建,但我们最终的目标是支持SQL Server数据库的高可用。

得益于SOFS提供的高性能,我们在私有云架构的基础之上做出一定的调整,就能很快的支持SQL Server数据库的应用。

具体做法:将SQL Server数据库的计算资源运行在Hyper-V的虚拟机之上,而数据库的文件资源则通过SOFS来调用底层的虚拟化存储资源。

最终,Hyper-V虚拟机的高可用性加上SOFS文件系统的高可用性保证了SQL Server数据库整体的高可用性。

在我们的实际项目中,这种架构支持了20多个SQL Server的数据库,共10多TB的数据量,整体运行平稳。


展望

在微软最新的Windows Server 2016中,相关技术又得到了进一步的提升,提供了更加强大的功能,提供了类超融合的技术架构,能够更加高效、快捷的搭建基于Windows的私有云及高可用架构。

如果你的项目中应用到了Windows的相关技术,不妨尝试尝试。

-END-

欢迎关注“互联网架构师”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。

本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。

  • 长按下方的二维码可以快速关注我们

  • 如想加群讨论学习,请点击右下角的“加群学习”菜单入群

基于私有云的数据库高可用架构实践相关推荐

  1. 携程数据库高可用架构实践

    作者:携程技术团队,来自:DataFunTalk 导读: 我们推荐使用数据库三副本,一主一从一异地容灾.如果想要节省成本,也可以只保留两副本,但是一旦其中一台服务器发生故障,服务器维修时间会比较长,那 ...

  2. 基于Consul的数据库高可用架构【转】

    几个月没有更新博客了,已经长草了,特意来除草.本次主要分享如何利用consul来实现redis以及mysql的高可用.以前的公司mysql是单机单实例,高可用MHA加vip就能搞定,新公司mysql是 ...

  3. 郭忆:网易数据库高可用架构最新进展!

    [IT168 专稿]本文根据郭忆老师在2018年5月12日[第九届中国数据库技术大会(DTCC)]现场演讲内容整理而成. 讲师简介: 郭忆--七年云端数据库开发经验,主导了网易私有云关系数据库服务的建 ...

  4. 亚马逊AWS在线系列讲座——基于AWS云平台的高可用应用设计

    设计高可用的应用是架构师的一个重要目标,可是基于云计算平台设计高可用应用与基于传统平台的设计有很多不同.云计算在给架构师带来了很多新的设计挑战的时候,也给带来了很多新的设计理念和可用的服务.怎样在设计 ...

  5. 美团数据库高可用架构的演进与设想

    本文介绍最近几年美团MySQL数据库高可用架构的演进过程,以及我们在开源技术基础上做的一些创新.同时,也和业界其它方案进行综合对比,了解业界在高可用方面的进展,和未来我们的一些规划和展望. 在2015 ...

  6. 数据库高可用架构 转载

    数据库高可用架构对于我们这些应用端开发的人来说是一个比较陌生的领域,是在具体的数据库产品之上搭建的环境,需要像DBA这样对数据库产品有足够的了解才能有所涉及,虽然不能深入其中,但可以通过一些经典的高可 ...

  7. 《MySQL性能优化和高可用架构实践》简介与推荐序

    #好书推荐##好书奇遇季#<MySQL性能优化和高可用架构实践>,京东当当天猫都有发售.腾讯云架构师宋立桓倾情奉献,定价59元,网店打折销售其实没多少钱. 互联网公司里面几乎很少有公司不用 ...

  8. 《MySQL性能优化和高可用架构实践》阅读总结

    文章目录 介绍 第1章 MySQL架构介绍 1.1 MySQL简介 1.2 MySQL主流的分支版本 1.3 MySQL存储引擎 1.4 MySQL逻辑架构 1.5 MySQL物理文件体系结构 第2章 ...

  9. 面向大规模流量活动的高可用架构实践

    分享的内容主要分为三个部分: 1.大流量活动的系统扩容评估方法 2.系统高可用架构设计实践 3.大规模流量活动的实践案例 大流量活动的系统扩容评估方法 大流量活动有多种形式,除了我们常见的电商大促(双 ...

  10. 近几年在淘宝及阿里云上的高可用架构演进

    原文:架构之家 主要介绍了其近几年在阿里电商平台及阿里云上的高可用设计的经验,分为两个部分:第一部分主要包括传统的淘宝店铺稳定性体系的建设及相关的基础链路设计.缓存和容灾方案的设计及部署:第二部分主要 ...

最新文章

  1. Oozie中允许hive程序xml配置
  2. SpringBoot对于标注@ResponseBody注解返回JSON数据的处理
  3. JAVA语法——经典题目01
  4. 【CC精品教程】ContextCapture 4.4.12(CC,Smart 3D)简体中文版安装教程(附安装包下载)
  5. 如何讲页面打入jar包中_如何把我的Java程序变成exe文件?
  6. 论文浅尝 - ICLR2020 | Abductive Commonsense Reasoning
  7. RAID及LVM,iscsi
  8. AlexNet,VGG,GoogleNet,ResNet
  9. python中__init__.py是干什么的
  10. Dubbo实战快速入门 (转)
  11. 程序员常用的泛型机制究竟怎么玩?
  12. sublime前端开发常用插件
  13. 根据on,获取选中的元素
  14. 自学python需要安装什么-Python学习需要安装的工具
  15. 【转】关于OnPaint的工作机制
  16. VP9编解码标准知识总结
  17. 最新 Transformer 预训练模型综述!
  18. js获取明天的年月日和计时器
  19. Marked.js让您的文档编辑更加轻松自如!
  20. java es 如何查询_使用elasticsearch的java-api进行查询

热门文章

  1. Radon变换——MATLAB
  2. IAR模板--怎样在IARproject中创建和使用模板
  3. mysql 大小写问题—20161102
  4. PHP程序员7小时学会Kotlin 第二小时
  5. inDesign 教程,如何调整布局元素的大小?
  6. indesign使用教程,如何编辑段落样式?
  7. 如何在 Mac 上忘记 Wi-Fi 网络?
  8. 在苹果Mac上的“磁盘工具”中如何修复储存设备?
  9. 如何使用Movavi Slideshow Maker进行幻灯片制作?
  10. Sqlalchemy 乱码解决方法