背景介绍

在当下,共享这个概念融入到了人们的生活中,共享单车,共享宝马,共享床铺等等。其实在 IT 界,共享这个概念很早就出现了,通过 SMB 协议的 Windows 共享目录,NFS 协议的网络文件系统等等。在 Azure 平台,也提供了 Azure 共享文件服务供客户访问。但是不管是 CIFS,NFS,还是 Azure File Share 都有其不足之处。比如 CIFS,NFS 无法实现高可用,一旦 CIFS server 或者 NFS server 不可用,整个共享目录就变得不可用。那么如何实现共享文件系统的高可用呢? 今天就给大家介绍一下:

基于 Azure 托管磁盘 + Gluster 分布式文件系统来构建高可用的共享文件系统。

名词解释

Azure 托管磁盘

在托管磁盘发布之前,Azure 的磁盘分为普通存储和高端存储,在创建存储账号之后,来存储虚拟机的磁盘(VHD 页文件)。而且对于磁盘的 IOPS 都有所限制,比如不能超过 20,000 IOPS/账户。而且存储单元是没有高可用的功能。一旦存储单元出现故障,那么该存储单元下的磁盘都会受到影响。在这种架构下,基于这些磁盘部署的虚拟机即使部署在同一个高可用集合内,依然会变得不可用。同理 Azure File Share 也会受到上述的限制。

最近 Azure 发布了托管磁盘(中国区还没正式上线),就完美的解决了上述的问题。其优点参考如下:

  • 简单且可缩放的虚拟机部署

    在使用托管磁盘时,磁盘的 IOPS 不再受到存储账号的 IOPS 上线限制。在进行扩展时,无需额外创建存储账号等。

  • 可用性集更加可靠

    托管磁盘彼此之间完全隔离以避免单点故障,通过高可用集,自动将磁盘防止在不同的存储单元。如果该存储单元不可用,那么只能影响到使用该磁盘的虚拟机实例。

其他优点及详情,参考链接如下:Azure 托管磁盘概览

GlusterFS

GlusterFS 是一个开源的可扩展分布式文件系统,适用于云计算,流媒体等互联网应用。与Lustre、MooseFS、CEPH 并列成为四大开源分布式文件系统。由于 GlusterFS 新颖的 KISS(KeepIt as Stupid and Simple)的系统架构,使其在扩展性、可靠性、性能、维护性等方面具有独特的优势,目前开源社区风头有压倒之势,国内外有大量用户在研究、测试和部署应用。有优势,也势必有其短板之处,比如处理元数据和海量小文件的效率和性能表现一般,所以在选择时,一定要评估自己的应用场景是否适用。

架构简介

基于上述对托管磁盘的分析,我们可以看到,从磁盘层面,我们已经做了高可用,保证同一可用集合内,不会所有的磁盘(虚拟机)同时不可用。之后,通过 Gluster 分布式文件系统的备份卷,即使有磁盘因为计划内的维护升级变得不可用,从文件系统层面,依然可以提供数据访问的可用性。

再加上 Azure 平台面向内部负载均衡器(ILB),从前端访问不用担心节点故障时,需要手动切换挂载点。

实施方案

部署基于托管磁盘的虚拟机

  1. 登录 Azure 门户管理网站 。

  2. 根据向导,部署 4 台基于 ARM 的 CentOS 7.3 虚拟机服务器。

     
    gfs-node1 ( 172.16.5.4 )
    gfs-node2 ( 172.16.5.5 )
    gfs-node3 ( 172.16.5.6 )
    gfs-node4 ( 172.16.5.7 )
  3. 在创建时,一定要把虚拟机放在同一高可用集内。

  4. 虚拟机创建完毕之后,给每一台虚拟机附加一块 1TB 的托管磁盘。

  5. 登录虚拟机,通过 fdisk -l 检查托管磁盘是否附加上。

  6. 当托管磁盘附加上之后,执行命令进行初始化:

  7. # mkfs.xfs /dev/sdc

  8. # mkdir /sdc

  9. # mount /dev/sdc /sdc

  10. 在之后,/sdc 就作为 Gluster 文件系统里的 Brick 来使用。

安装配置 Gluster

  1. 登录每台虚拟机,执行下列操作,安装配置 Gluster 服务

  2. # yum install centos-release-gluster37

  3. # yum install glusterfs gluster-cli glusterfs-libs glusterfs-server

  4. 启动 Gluster 服务:# service glusterd start

  5. 创建存储池:# gluster peer probe <hostname>

  6. 查看存储池状态:# gluster peer status

配置 ILB 实现负载均衡

  1. 登录 Azure 门户管理网站

  2. 根据向导创建负载均衡 gfs-ilb

  3. 指定前端 IP 地址为:172.16.5.88

  4. 指定后端 IP 池:172.16.5.4, 172.16.5.5, 172.16.5.6, 172.16.5.7

  5. 指定健康探测端口:22

  6. 指定负载均衡规则:

  7. Tcp/udp-24007/24008

  8. 上述端口为 Gluster 服务端口

  9. Tcp 49152 为数据端口,一个卷对应一个端口,其实为 49152,依次加 1。

客户端挂载 Gluster 卷

执行命令挂载 Gluster 卷:

# mount.glusterfs 172.16.5.88:/dsr_vol /dsr_data

至此,你就拥有了几乎不会 offline 的共享目录!

立即访问http://market.azure.cn

基于 Azure 托管磁盘配置高可用共享文件系统的更多相关文章

  1. Azure 配置高可用的准备系列工作-建立不同区域的存储账户和建立网络!

     我们谈到我们的业务,常常谈到一个词.三层架构,就是我们的UI层.数据訪问层和数据存储层的分离,通常情况下我们的业务高可用必须满足这三层的所有高可用的情况下才干达到最高级别的高可用. 那么谈到Az ...

  2. 实现基于Haproxy+Keepalived负载均衡高可用架构

    1.项目介绍: 上上期我们实现了keepalived主从高可用集群网站架构,随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务 ...

  3. (转)基于keepalived搭建MySQL的高可用集群

    基于keepalived搭建MySQL的高可用集群  原文:http://www.cnblogs.com/ivictor/p/5522383.html MySQL的高可用方案一般有如下几种: keep ...

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

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

  5. 集群相关、用keepalived配置高可用集群

    1.集群相关 2.keepalived相关 3.用keepalived配置高可用集群 安装:yum install keepalived -y   高可用,主要是针对于服务器硬件或服务器上的应用服务而 ...

  6. Nginx 配置高可用

    阅读本文需要安装Nginx 一 什么是高可用 nginx作为负载均衡服务器 所有请求都到了nginx 可见nginx处于非常重要的位置 如果nginx服务器宕机 后端web服务器将无法提供服务 影响严 ...

  7. Linux集群介绍、keepalived介绍及配置高可用集群

    7月3日任务 18.1 集群介绍18.2 keepalived介绍18.3/18.4/18.5 用keepalived配置高可用集群扩展heartbeat和keepalived比较http://blo ...

  8. Nginx 配置高可用的集群

    1.什么是 nginx 高可用 (1)需要两台 nginx 服务器 (2)需要 keepalived (3)需要虚拟 ip 2.配置高可用的准备工作 (1)需要两台服务器 192.168.17.129 ...

  9. Linux centosVMware 集群介绍、keepalived介绍、用keepalived配置高可用集群

    一.集群介绍 根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 实现高可用的开源软件有:heartbeat. ...

随机推荐

  1. VMware下安装CentOS7 无法通过桥接模式进行联网

    #修改配置# vi /etc/sysconfig/network-scripts/ifcfg-ens33  (ifcfg-ens33,不同的机器名称不一样,但大都为ifcfg-ensxxx) 把文件中 ...

  2. MySQL 安装 linux ,window 傻瓜版

    现在作为服务器操作系统的一般有三种,Windows Server,Linux,Unix,在这里我们只介绍在windows下和linux下安装mysql,Unix下安装应该和linux差不多. Wind ...

  3. ZOJ - 3623 完全背包变种

    题意理解有误导致方程建歪,题意是n种类型的船造成至少L伤害的最小时间,攻击过程是不必同步的 #include<iostream> #include<algorithm> #in ...

  4. Scala 中 for 循环 和 generator 的使用例子

    这个例子是,从每个list中,找到age最大的那个node. class Node(vName: String, vAge: Int) { // Entity class var name: Stri ...

  5. python小商店

    (1) 输入自己所有的钱.(2) 展示商品的序号,名称及其价格.(3) 输入要买商品的序号.(4) 输入要买商品的数量.(5) 购物车中显示购买的水果名称及其对应的数量和剩余钱.(6) 如果序号输入有 ...

  6. Lucene初识

    1.概述 1.1 Lucene是apache软件基金会4 jakarta项目组的一个子项目: 是一个开放源代码的全文检索引擎工具包: 但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了 ...

  7. FileSearch.java

    !=fileList.size()) { ]) { fileOutputStream.write(bytes; i < files.length; i++) {// 将其中的文件夹遍历出来,并调 ...

  8. spark ALS 推荐算法参数说明

  9. (转)跟着老男孩一步步学习Shell高级编程实战

    原文:http://oldboy.blog.51cto.com/2561410/1264627/  跟着老男孩一步步学习Shell高级编程实战 原创作品,允许转载,转载时请务必以超链接形式标明文章 原 ...

  10. vue之mapMutaions的使用 && vuex中 action 用法示例 && api.js的使用

    vue之mapMutations的使用 我们通过Mutation来改变store中的state,方法往往是在子组件中使用 this.$store.commit(); 来实现,但是这样的缺点是不容易查看 ...