容器化管理平台存储那点事 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
goodraincloud
V2EX    推广

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

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

    以 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     Solana     5137 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 07:16 PVG 15:16 LAX 23:16 JFK 02:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86