V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
goodraincloud
V2EX  ›  推广

容器化管理平台存储那点事

  •  
  •   goodraincloud · 2017-05-05 13:49:10 +08:00 · 1402 次点击
    这是一个创建于 2746 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以 Docker 为代表的容器技术在云计算领域正扮演着越来越重要的角色,甚至一度被认为是虚拟化技术的替代品。企业级的容器应用常常需要将重要的数据持久化,方便在不同容器间共享。为了能够持久化数据以及共享容器间的数据,Docker 提出了 Volume 的概念。单机环境的数据卷难以满足 Docker 集群化的要求,因此需要引入分布式文件系统。目前开源的分布式文件系统有许多,例如 GFS,Ceph,HDFS,FastDFS,GlusterFS 等。

    应用场景

    正常安装环境下云帮需要一个分布式文件系统,社区版默认使用 NFS 作为共享存储,如果你的环境中有分布式文件存储系统,需要使用dc-ctl set storage --mode custom 命令安装存储管理服务,然后再将你系统中的分布式存储挂载到 /grdata 目录。GlusterFS 支持文件接口,Ceph 支持块,文件,对象接口 本文的应用场景主要针对云帮如何使用 GlusterFS,后期会介绍云帮如何支持块存储。

    GlusterFS 介绍

    GlusterFS 是一个开源的分布式文件系统,它可以将分散的存储空间聚合在一起,形成一个虚拟的存储池。它支持横向扩展(Scale-Out),可通过增加存储节点来提升整个系统的容量或性能,存储容量可扩展至 PB 级。这一扩展机制是目前的存储技术热点,能有效应对容量、性能等存储需求。GlusterFS 除了支持分散存储(Distributed,将不同的文件放在不同的存储节点)之外,还支持镜像存储(Replicated,同一个文件存放在两个以上的存储节点) 和分片存储(Stripped,将一个文件分划分为多个固定长度的数据,分散存放在所有存储节点),其总体架构如下所示: 20170505149395172349361.png

    安装 GlusterFS

    集群环境

    • 安装 GlusterFS 至少需要 2 个节点,在本例中我们成为 gfs01,gfs02,
    • 需要这两台机器可以通过网络互相连接
    • 两个节点的系统中必须包含 2 块磁盘,假设 sda 作为系统盘,那么 sdb 则作为 GlusterFS 的存储盘

    注意:GlusterFS 会将集群的动态配置信息存放到/var/lib/glusterd文件中,需要确保这个文件可以写入,否则集群可能会发生问题,甚至下线,因此,需要确保系统某有足够的空间,不要让磁盘写满。

    机器配置

    | 主机名 | IP 地址 | 说明 | | :----: | :------------: | :-----: | | gfs01 | 172.16.0.151 | 存储节点 01 | | gfs02 | 172.16.0.150 | 存储节点 01 | | client | 172.16.0.152 | 测试挂载的机器 |

    格式化和挂载磁盘

    主要目的就是将磁盘格式化为 xfs,作为 glusterfs 的底层存储文件系统.

    (2 个节点都需要执行): 注意: 这个示例是以/dev/sdb作为数据磁盘。 如果是 Debian/Ubuntu 系统可能没有mkfs.xfs命令,需要手动执行安装 apt-get install -y xfsprogs

    mkfs.xfs -i size=512 /dev/sdb
    mkdir -p /grdata
    echo '/dev/sdb /grdata xfs defaults 1 2' >> /etc/fstab
    mount -a && mount
    

    命令执行完成后,你可以看到 /dev/sdb被挂载到了 /grdata 目录下。

    root@gfs01:~# df -h
    ...
    /dev/sdb         97M  5.2M   92M   6% /grdata
    

    安装 Glusterfs

    • Debian8
    #add GPG key
    wget -O - http://download.gluster.org/pub/gluster/glusterfs/3.8/LATEST/rsa.pub | apt-key add -
    #add source
    echo deb http://download.gluster.org/pub/gluster/glusterfs/3.8/LATEST/Debian/jessie/apt jessie main > /etc/apt/sources.list.d/gluster.list
    #update package
    apt-get update
    #install
    apt-get install -y glusterfs-server
    
    • CentOS
     yum install centos-release-gluster38
     yum makechche
     yum install glusterfs-server
    
    • Ubuntu 14
    sudo apt-get install software-properties-common
    sudo add-apt-repository ppa:gluster/glusterfs-3.8
    sudo apt-get update
    sudo apt-get install glusterfs-server
    

    启动 GlusterFS 管理服务

    Ubuntu/Debian 启动
    service glusterfs-server start
    service glusterfs-server status
    
    Centos 启动
    service glusterd start
    service glusterd status
        glusterd.service - LSB: glusterfs server
               Loaded: loaded (/etc/rc.d/init.d/glusterd)
           Active: active (running) since Mon, 13 Aug 2012 13:02:11 -0700; 2s ago
          Process: 19254 ExecStart=/etc/rc.d/init.d/glusterd start (code=exited, status=0/SUCCESS)
           CGroup: name=systemd:/system/glusterd.service
               ├ 19260 /usr/sbin/glusterd -p /run/glusterd.pid
               ├ 19304 /usr/sbin/glusterfsd --xlator-option georep-server.listen-port=24009 -s localhost...
               └ 19309 /usr/sbin/glusterfs -f /var/lib/glusterd/nfs/nfs-server.vol -p /var/lib/glusterd/...
    

    配置信任池(trusted pool)

    • 在 gfs01 执行
      gluster peer probe gfs02
    

    注意: 当使用主机名时,需要确保两台机器之间都设置了主机名(ip 也可以)。

    • 查看状态
    # gluster peer status
    Number of Peers: 1
    
    Hostname: gfs02
    Uuid: c191b17b-ab9d-4b15-a70d-dcc92be067c9
    State: Peer in Cluster (Connected)
    

    注意:一旦存储池建立之后,只有池中的信任成员可以添加新的节点,新服务器不能从外部加入到已经存在的池

    逻辑卷问题

    逻辑卷由一个或多个存储块(Brick)组成,每个存储块对应存储池中的一个目录。 GlusterFS 的基本类型有三个,分别是分散存储(Distributed,将不同的文件放在不同的存储块)、镜像存储(Replicated,同一个文件存放在两个以上的存储块,相当于 RAID1) 和分片存储(Striped,将一个文件分划分为多个固定长度的数据,分散存放在所有存储块,相当于 RAID0)。另外 Distributed 也可以跟 Replicated 和 Striped 组合形成新的类型。 这里简单介绍一些基本卷

    distribute volume 分布式卷

    基于 Hash 算法将文件分布到所有 brick server,只是扩大了磁盘空间,不具备容错能力。由于 distribute volume 使用本地文件系统,因此存取效率并没有提高,相反会因为网络通信的原因使用效率有所降低,另外本地存储设备的容量有限制,因此支持超大型文件会有一定难度。 20170505149395226653345.jpg

    stripe volume 条带卷

    类似 RAID0,文件分成数据块以 Round Robin 方式分布到 brick server 上,并发粒度是数据块,支持超大文件,大文件的读写性能高。 20170505149395229346878.jpg

    replica volume 复制卷

    文件同步复制到多个 brick 上,文件级 RAID1,具有容错能力,写性能下降,读性能提升。Replicated 模式,也称作 AFR ( Auto File Replication ),相当于 RAID1,即同一文件在多个镜像存储节点上保存多份,每个 replicated 子节点有着相同的目录结构和文件,replica volume 也是在容器存储中较为推崇的一种 2017050514939523278356.jpg

    设置 GlusterFS 逻辑卷

    gfs01 和 gfs02 都需要执行

    #这里跳过,已经建立了
    mkdir -p /grdata/
    

    随便在一台机器上执行

    
    root@gfs01:~# gluster volume create gv0 replica 2 gfs01:/grdata/ gfs02:/grdata/
    volume create: gv0: success: please start the volume to access data
    # 使用 Replicated 的方式,建立一个名为 gv0 的卷(Volume),存储块(Brick)为 2 个,分别为 gfs01:/grdata 和 gfs02:/grdata。
    

    启用逻辑卷

    root@gfs01:~# gluster volume start gv0
    volume start: gv0: success
    

    查看逻辑卷状态,确认状态为 “ Started ”

    root@gfs01:~# gluster volume info
    Volume Name: gv0
    Type: Replicate
    Volume ID: fde79f7d-294b-4eea-ac95-73bba9f24435
    Status: Started
    Snapshot Count: 0
    Number of Bricks: 1 x 2 = 2
    Transport-type: tcp
    Bricks:
    Brick1: 172.16.0.151:/grdata
    Brick2: 172.16.0.150:/grdata
    Options Reconfigured:
    transport.address-family: inet
    performance.readdir-ahead: on
    nfs.disable: on
    

    注意:如果存储卷没有启动,需要/var/log/glusterfs 目录查看日志,文件通常是 glusterfs-glusterd.vol.log

    相关命令

    1.创建信任存储池(如要创建一个包含 3 个服务器的存储池,则需要从第一个服务器 server1 中把另外两个服务器加入存储池中)
      # gluster peer probe server2
      Probe successful
    
      # gluster pool peer server3
      Probe successful
    2.查看存储池状态
      # gluster peer status
      Number of Peers: 2
    
      Hostname: 172.16.0.151
      Uuid: 86bd7b96-1320-4cd5-b3e1-e537d06dd5f7
      State: Peer in Cluster (Connected)
    
      Hostname: 172.16.0.150
      Uuid: c191b17b-ab9d-4b15-a70d-dcc92be067c9
      State: Peer in Cluster (Connected)
    3.从存储池移除服务器
      # gluster peer detach 172.16.0.150
      Detach successful
    4.逻辑卷管理
      gluster volume delete/stop/start 逻辑卷名(gv0)
    5.逻辑卷中新增存储块(操作存储块后都需要执行 gluster volume rebalance gv0 start 重建数据)
      gluster volume add-brick/remove-brick gv0 gfs03:/grdata
    

    测试 GlusterFS 存储卷

    在这一步中,我们使用 client 这台机器来挂载 GlusterFS 的存储卷进行测试。这台机器需要安装 GlusterFS 的 client 端程序,这里我们只使用 client 机器进行挂载和文件读写测试。

    # 安装 GlusterFS client 程序
    ### CentOS / RHEL ###
    yum install -y glusterfs-client
    
    ### Ubuntu / Debian ###
    apt-get install -y glusterfs-client
    
    
    # 将 GlusterFS 存储卷挂载到 /mnt
    mount -t glusterfs 172.16.0.151:/gv0 /grdata
    df -h
    172.16.0.151:/gv0   97M  5.4M   92M   6% /grdata
    # 确认挂载结果
    mount -t fuse.glusterfs
    172.16.0.151:/gv0 on /grdata type fuse.glusterfs (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072)
    # 重启自动挂载 在/ etc / fstab
    172.16.0.151:/grdata /grdata glusterfs defaults,_netdev 0 0
    
    # 将 /var/log/messages 复制到存储卷,循环执行 100 次
    for i in `seq -w 1 100`; do cp -rp /var/log/messages /grdata/copy-test-$i; done
    
    

    先检查挂载点

    ls -lA /mnt | wc -l
    

    可以看到 100 个文件,在每个存储节点查看挂载点信息

    ls -lA /grdata
    

    因为创建卷 gv0 的时候使用的是镜像存储(Replicated),所以在 gv0 上写入的文件应该同时出现在两个服务器的 /grdata 目录上,你可以看到每台机器都有 100 个文件,如果集群不是复制模式,每台机器的存储文件应该各 50

    END

    到这里关于 GlusterFS 介绍就到这里了。那么云帮如何配置呢,很简单第一步 dc-ctl set storage --mode custom,接着按照如上的操作将系统中的分布式存储挂载到 /grdata 目录即可。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2743 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 08:58 · PVG 16:58 · LAX 00:58 · JFK 03:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.