背景介绍

在当下,共享这个概念融入到了人们的生活中,共享单车,共享宝马,共享床铺等等。其实在 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. 数据结构5.4_m元多项式的表示

    三元多项式表示如下: P(x,y,z) = x10y3z2 + 2x6y3z2 + 3x5y2z2 + x4y4z + 6x3y4z + 2yz + 15 然后对式子进行变形: P(x,y,z)=(( ...

  2. linux 检测服务器端口工具

    #nmp# nmap 127.0.0.1 #netstat# netstat -anlp | grep 22 #telnet# 服务器端口即使处于监听状态,但是防火墙iptables屏蔽了该端口,是无 ...

  3. 零基础学QT编程

    吴迪.2010.1 北京航空航天大学出版社   Qt资源 CSDN QT http://bbs.csdn.net/forums/Qt/ QT编程网 http://www.qtbcw.com/ 编程论坛 ...

  4. B - Toy Storage(POJ - 2398) 计算几何基础题,比TOYS多了个线段排序

    Mom and dad have a problem: their child, Reza, never puts his toys away when he is finished playing ...

  5. .Net支持Redis哨兵模式

    csredis 博客 csRedisgit地址 csRedis3.2.1 Nuget地址 (在使用csredis3.2.1获取sentinel时产生运行时异常,调查问题最后发现是获取sentinel的 ...

  6. Oracle 设定字符集

    在Redhat上安装Oracle 10g没有设定字符集,采用的是操作系统默认字符集:WE8ISO8859P1,将字符集修改为:ZHS16GBK.由于过程不可逆,首先需要备份数据库. 1.数据库全备 2 ...

  7. C语言中的输入方式

    在c语言中,有gets().scanf().getchar()等输入方式,但是不同的方式处理的方式不同. scanf()读取时遇见tab.space.enter时会结束读取,不会舍弃最后的回车符(即回 ...

  8. zabbix web url监控

    一, web监控 这个监控为通过cookie的值来监控网站是否能正常使用 这里测试环境为bbs网站 二, 配置web监控 01, 创建web监控项 02,配置步骤1 查看数据是否成功 第一查看首页时候 ...

  9. DB Intro - MongoDB Relations

    https://www.quackit.com/mongodb/tutorial/mongodb_create_a_relationship.cfm

  10. 9 Essential Free Linux Transcoders(转码)

    需要转码的理由千万种,所幸除了硬件转码之外,Linux平台还有很多开源工具可以借鉴,如该文章所示: 原文来自:9 Essential Free Linux Transcoders(http://www ...