分布式存储

存储概述

存储介绍

  • 存储:就是存放数据的介质

  • 如果web服务器家目录空间不够,可以通过添加硬盘使用LVM进行扩容,但硬盘数量存在上限;也可以使用远程存储共享进行扩容

存储分层

  • 一个新的硬盘在linux系统里使用一般来说就三步:(分区)-格式化-挂载,才能使用

linux上如何挂载ntfs格式的移动硬盘?

linux内核支持ntfs,但centos7系统没有编译该功能,解决方法:

  • 重新编译内核,在内核中加上ntfs支持。但该方法不推荐,因为编译内核会造成内核运行不稳定,没有过硬的实力不要尝试)

  • 参考内核模块
    [root@server1 ~]# lsmod
    Module                  Size  Used by
    snd_seq_midi           13565  0
    snd_seq_midi_event     14597  1 snd_seq_midi
    ppdev                  17671  0
    crc32_pclmul           13133  0
    ghash_clmulni_intel    13273  0
    vmw_balloon            18094  0
    aesni_intel           189456  0
    btusb                  41520  0
    lrw                    13286  1 aesni_intel
    gf128mul               15139  1 lrw
    btrtl                  12945  1 btusb
    btbcm                  14040  1 btusb
    glue_helper            13990  1 aesni_intel
    btintel                15709  1 btusb
    ablk_helper            13597  1 aesni_intel
    cryptd                 21190  3 ghash_clmulni_intel,aesni_intel,ablk_helper
    bluetooth             548787  5 btbcm,btrtl,btusb,btintel
    snd_ens1371            25076  0
    snd_rawmidi            31553  2 snd_ens1371,snd_seq_midi
    snd_ac97_codec        130479  1 snd_ens1371
    ac97_bus               12730  1 snd_ac97_codec
    snd_seq                62774  2 snd_seq_midi_event,snd_seq_midi
    joydev                 17389  0
    pcspkr                 12718  0
    snd_seq_device         14356  3 snd_seq,snd_rawmidi,snd_seq_midi
    rfkill                 22391  1 bluetooth
    snd_pcm               101339  2 snd_ac97_codec,snd_ens1371
    sg                     40719  0
    snd_timer              30014  2 snd_pcm,snd_seq
    snd                    83987  7 snd_ac97_codec,snd_timer,snd_pcm,snd_seq,snd_rawmidi,snd_ens1371,snd_seq_device
    vmw_vmci               67168  0
    soundcore              15047  1 snd
    i2c_piix4              22401  0
    parport_pc             28205  0
    parport                46395  2 ppdev,parport_pc
    ip_tables              27126  0
    xfs                   997727  2
    libcrc32c              12644  1 xfs
    sd_mod                 46281  3
    crc_t10dif             12912  1 sd_mod
    crct10dif_generic      12647  0
    sr_mod                 22416  0
    cdrom                  42600  1 sr_mod
    ata_generic            12923  0
    pata_acpi              13053  0
    vmwgfx                291993  1
    crct10dif_pclmul       14307  1
    crct10dif_common       12595  3 crct10dif_pclmul,crct10dif_generic,crc_t10dif
    crc32c_intel           22094  1
    drm_kms_helper        186531  1 vmwgfx
    serio_raw              13434  0
    syscopyarea            12529  1 drm_kms_helper
    mptspi                 22673  2
    sysfillrect            12701  1 drm_kms_helper
    sysimgblt              12640  1 drm_kms_helper
    fb_sys_fops            12703  1 drm_kms_helper
    e1000                 137624  0
    ttm                    96673  1 vmwgfx
    drm                   456166  4 ttm,drm_kms_helper,vmwgfx
    scsi_transport_spi     30732  1 mptspi
    mptscsih               40150  1 mptspi
    mptbase               106036  2 mptspi,mptscsih
    ata_piix               35052  0
    drm_panel_orientation_quirks    17180  1 drm
    libata                243094  3 pata_acpi,ata_generic,ata_piix
    nfit                   55639  0
    libnvdimm             159524  1 nfit
    dm_mirror              22326  0
    dm_region_hash         20813  1 dm_mirror
    dm_log                 18411  2 dm_region_hash,dm_mirror
    dm_mod                124501  8 dm_log,dm_mirror
  • 安装软件,为内核加上支持ntfs的模块

  • 安装
    # yum install epel-release  -y
    # yum install ntfs-3g        挂载
    # mount.ntfs-3g /dev/sdb1 /mnt
    
  • liunx存储分层

  • 物理卷:指的是物理设备,如硬盘(/dev/sda),分区(/dev/sda1),dd命令创建的文件,软raid(/dev/md0),逻辑卷(/dev/vg01/lv01)等
  • 模块驱动:安装相应的模块,即可实现相应的功能
  • 文件系统:格式化成相应的文件系统:如ext4,xfs
  • 虚拟文件系统: 又名VFS (Virtual File System),作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统,即为各类文件系统提供了一个统一的操作界面和应用编程接口

存储分类

  • 三种存储方式:DAS、SAN、NAS
  • 三种存储类型:块存储、文件存储、对象存储

按存储方式分:

分类 名称 描述
DAS 直连式存储
(direct access/attach storage)
如:机箱里的disk,或通过接口直连到系统总线上的disk(如U盘,移动硬盘)
NAS 网络附加存储
(network attched storage)
通过交换机,路由器连接起来,共享的是目录如:nfs,samba,ftp
SAN 存储区域网络
(storage area network)
通过交换机,路由器连接起来的高速存储网络,共享的是块设备

三者区别与联系

  • DAS: 直接连接系统,不受网速限制,速度快; 扩展容量有上限。

  • NAS与SAN: 通过网络设备连接的远程存储,速度受网络影响; 但扩展方便,几乎无上限。

  • NAS和SAN都是通过网络(通过了网络设备,如路由器,交换机等)的,但NAS共享的是应用层的目录,而SAN共享的是/dev/sdb1或/dev/sdb这种块设备

按储存类型分:

分类 描述
文件存储 NAS都属于这一类。
简单来说就是mount后直接使用的
块存储 SAN都属于这一类。
简单来说就是类似/dev/sdb这种,要分区,格式化后才能mount使用
对象存储 对象存储采用扁平化的形式管理数据,没有目录的层次结构,并且对象的操作主要以put、get、delete为主。

三者比较

比较项 块存储 文件存储 对象存储
概念 用高速网络连接专业主机服务器的一种存储方式 使用文件系统,具有目录树 将数据和元数据当做一个对象
速度 低延迟(10ms),热数据 不同技术各有不同 100ms-1s,冷数据
可分布性 异地不现实 可分布式 分布并发能力高
文件大小 大小都可以 适合大文件 大小都可以
接口 Driver,kernel module POSIX Restful API
典型技术 SAN HDFS、GFS Swift、Amazon S3
适合场景 数据中心,虚拟化平台 办公网络 网络媒体文件存储

文件存储: 类似一个大的目录,多个客户端都可以挂载过来使用。

  • 优点: 利于数据共享
  • 缺点: 速度较慢

块存储: 类似一个block设备,客户端可以格式化,挂载并使用,和用一个硬盘一样。

  • 优点: 和本地硬盘一样,直接使用,速度较快
  • 缺点: 数据不共享,建议一个块设备仅供一人使用

对象存储: 一个对象我们可以看成一个文件, 综合了文件存储和块存储的优点。

  • 优点: 速度快,数据共享
  • 缺点: 成本高, 不兼容现有的模式

SAN

分类

  • FC-SAN: 早期的SAN, 服务器与交换机的数据传输是通过光纤进行的, 服务器把SCSI指令传输到存储设备上,不能走普通LAN网的IP协议。速度快,成本高
  • IP-SAN: 用IP协议封装的SAN, 可以完全走普通网络,因此叫做IP-SAN, 最典型的就是ISCSI。速度较慢(已经有W兆以太网标准), 成本低

IP-SAN之iscsi实现

虚拟机 IP地址 作用
server1 192.168.139.10 储存服务器(导出)
server2 192.168.139.20 业务服务器(导入)
  • 环境准备
systemctl stop NetworkManager
systemctl disable NetworkManagersystemctl stop firewalld
systemctl disable firewalldsetenforce 0
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/configcat >> /etc/hosts <<EOF192.168.139.10 server10192.168.139.20 server20EOFntpdate cn.ntp.org.cn
date
  • 导出端配置
安装iscsi-target-utils软件包
[root@server1 ~]# yum install -y epel-release.noarch
[root@server1 ~]# yum install -y scsi-target-utils模拟需要导出的物理卷
[root@server1 ~]# dd if=/dev/zero of=/tmp/big_file bs=1M count=1000修改配置文件
[root@server1 ~]# cd /etc/tgt/
[root@server1 tgt]# vim targets.conf
[root@server1 tgt]# cat targets.conf |grep -Ev '^#|^$'
default-driver iscsi#共享名,也就是存储导入端发现后看到的名称
<target iscsi:data>#backing-store定义实际要共享出去的设备backing-store /tmp/big_file
</target>启动服务
[root@server1 tgt]# systemctl start tgtd
[root@server1 tgt]# systemctl enable tgtd
  • 导入端配置
安装iscsi-initiator-utils软件包
[root@server2 ~]# yum install -y epel-release.noarch
[root@server2 ~]# yum install -y iscsi-initiator-utils寻找资源
[root@server2 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.139.10
192.168.139.10:3260,1 iscsi:data登录
[root@server2 ~]# iscsiadm -m node -l
[root@server2 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part ├─centos-root 253:0    0   17G  0 lvm  /└─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    5G  0 disk
sdc               8:32   0 1000M  0 disk
sr0              11:0    1  973M  0 rom
#发现多出来了一块sdc断开连接:
[root@server2 ~]# iscsiadm -m node -u
[root@server2 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part ├─centos-root 253:0    0   17G  0 lvm  /└─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    5G  0 disk
sr0              11:0    1  973M  0 rom
#删除登录过的信息
[root@server2 ~]# iscsiadm -m node --op delete
  • 扩展:添加用户名和密码验证功能
导出端配置验证功能
[root@server1 tgt]# vim targets.conf
[root@server1 tgt]# cat targets.conf |grep -Ev '^#|^$'
default-driver iscsi#共享名,也就是存储导入端发现后看到的名称
<target iscsi:data>#backing-store定义实际要共享出去的设备backing-store /tmp/big_fileincominguser tgt-user tgt-pass
</target>导入端添加用户及密码
[root@server2 ~]# vim /etc/iscsi/iscsid.conf57 node.session.auth.authmethod = CHAP68 node.session.auth.username = tgt-user69 node.session.auth.password = tgt-pass78 discovery.sendtargets.auth.authmethod = CHAP82 discovery.sendtargets.auth.username = tgt-user83 discovery.sendtargets.auth.password = tgt-pass验证
[root@server2 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.139.10
192.168.139.10:3260,1 iscsi:data
[root@server2 ~]# iscsiadm -m node -l
[root@server2 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part ├─centos-root 253:0    0   17G  0 lvm  /└─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    5G  0 disk
sdc               8:32   0 1000M  0 disk
sr0              11:0    1  973M  0 rom

分布式储存

介绍

  • NAS是远程通过网络共享目录, SAN是远程通过网络共享块设备

  • 分布式存储你可以看作**拥有多台存储服务器连接起来的存储导出端**。把这多台存储服务器的存储合起来做成一个整体再通过网络进行远程共享,共享的方式有目录(文件存储),块设备(块存储),对象网关或者说一个程序接口(对象存储)。

  • 常见的分布式存储开源软件有:GlusterFS,Ceph,HDFS,MooseFS,FastDFS等

  • 分布式存储系统,是将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。

  • 分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用定位服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。

  • 分布式存储系统需要解决的两个问题:

    问题一:我应该把数据写到什么地方?对于一个存储系统而言,当用户提交需要写入的数据时,系统必须迅速决策,为数据分配一个存储空间。这个决策的速度影响到数据如延迟,而更为重要的是,其决策的合理性也影响着数据分布的均匀性。

    问题二:我之前把数据写到什么地方?对于一个存储系统而言,高效、准确地处理数据寻址空间也是基本功能之一。

特性

可扩展

  • 分布式系统可以扩展到几百台到几千台的集群规模,轻松达到PB级别或以上。而且,随着集群规模的增长,系统整体性能表现为线性增长。 分布式存储的水平扩展有以下几个特性:

    • 节点扩展后,旧数据会自动迁移到新节点,实现负载均衡,避免单点过热的情况出现
    • 水平扩展只需要将新节点和原有集群连接到同一网络,整个过程不会对业务造成影响
    • 当节点被添加到集群,集群系统的整体容量和性能也随之线性扩展,此后新节点的资源就会被管理平台接管,被用于分配或者回收

低成本

  • 分布式存储系统的自动容错、自动负载均衡机制使其可以构建在普通PC机之上。另外,线性扩展能力也使得增加、减少机器非常方便,可以使用较低的成本实现自动运维

高性能

  • 无论是整个集群还是单机服务,都要求分布式系统具备高性能。提升读写性能(LB)或数据高可用(HA)

易用

  • 分布式存储系统需要提供易用的对外接口,另外也要求具备完善的监控、运维工具,并能够方便地与其它系统集成。如 Hadoop云计算系统导入数据。

开源软件比较

存储系统 Ceph GlusterFS HDFS MooseFS FastDFS
开发语言 C++ C Java C C
开源协议 LGPL GPL V3 Apache GPL V3 GPL V3
数据存储方式 对象/文件/块 文件/块 文件 文件/块
集群节点通信协议 私有协议(TCP) TCP/RDAM TCP TCP TCP
专用元数据存储点 占用MDS 占用MDS 占用MFS
在线扩容 支持 支持 支持 支持 支持
冗余备份 支持 支持 支持 支持 支持
单点故障 不存在 不存在 存在 存在 不存在
跨集群同步 不支持 支持 不支持 不支持 部分支持
适用场景 单集群的大中小文件 跨集群云存储 Mapreduce使用的文件存储 单集群的大中文件 单集群的中小文件
FUSE挂载 支持 支持 支持 支持 不支持
访问接口 POSIX POSIX 不支持POSIX POSIX 不支持POSIX

Glusterfs

介绍

  • glusterfs是一个免费,开源的分布式文件系统(它属于文件存储类型
  • 官网:https://www.gluster.org/

常见raid级别(扩展)

  • raid0 读写性能佳,坏了其中一块,数据挂掉,可靠性低(stripe条带化),磁盘利用率100%

  • raid1 镜像备份(mirror),同一份数据完整的保存在多个磁盘上,写的性能不佳,可靠性高,读的性能还行,磁盘利用率50%

  • raid10 先做raid 1 再做raid 0 (生产环境中常用)

  • raid5 由多块磁盘做raid 5,磁盘利用率为n-1/n, 其中一块放校验数据,允许坏一块盘,数据可以利用校验值来恢复 (生产环境中常用)

  • raid6 在raid5的基础上再加一块校验盘,进一步提高数据可靠性

常见卷的模式

卷模式 描述
Replicated 复制卷,类似raid1
Striped 条带卷,类似raid0
Distributed 分布卷
Distribute Replicated 分布与复制组合
Dispersed 纠删卷,类似raid5,raid6

复制卷(Replica volume)

  • 将文件同步到多个Brick上,使其具备多个文件副本,属于文件级RAID1,具有容错能力。因为数据分散 到多个Brick中,所以读性能得到了很大提升,但写性能下降

条带卷(Stripe volume)

  • 类似于RAID0,文件被分为数据块并以轮询的方式分布到多个Brick Server上,文件存储以数据块为单 位,支持大文件存储,文件越大,读取效率越高

分布式卷(Distribute volume)

  • 文件通过HASH算法分布到所有Brick Server上,这种卷是Glusterf的基础;以文件为单位根据HASH算法 散列到不同的Brick,其实只是扩大了磁盘空间,如果有一个磁盘损坏,数据也将丢失,属于文件级的 RAID0,不具备容错能力

分布式复制卷(Distribute Replica volume)

  • Brick Server数量是镜像数(数据副本数量)的倍数,具有分布式卷和复制卷的特点

其他:详见官网

集群搭建

虚拟机 担当 IP地址
server1 storage1 192.168.139.10
server2 storage2 192.168.139.20
server3 storage3 192.168.139.30
server4 storage4 192.168.139.40
server5 client 192.168.139.50
  • 基于server02克隆server03,server04,server05
  • 环境准备(所有节点)
修改主机名
hostnamectl set-hostname server3/4/5
su配置静态IP
vim /etc/sysconfig/network-scripts/ifcfg-ens33
#修改UUID和IPADDR即可
-----------------------------------------------------
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="79065771-0af6-41b9-9112-1dd5b373f8ed"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.139.10
GATEWAY=192.168.139.2
NETMASK=255.255.255.0
DNS1=114.114.114.114
-----------------------------------------------------
systemctl restart network域名解析
cat >> /etc/hosts <<EOF192.168.139.10 server1192.168.139.20 server2192.168.139.30 server3192.168.139.40 server4192.168.139.50 server5EOF关闭防火墙,selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforced/SELINUX=disabled/' /etc/selinux/config时间同步
ntpdate cn.ntp.org.cnyum源配置(需要加上glusterfs官方yum源)
vim /etc/yum.repos.d/glusterfs.repo
---------------------------------------------------
[glusterfs]
name=glusterfs
baseurl=https://buildlogs.centos.org/centos/7/storage/x86_64/gluster-4.1/
enabled=1
gpgcheck=0
--------------------------------------------------
yum clean all
yum makecache
  • 在所有存储(storage)服务器上安装glusterfs-server软件(1,2,3,4节点)
yum install -y glusterfs-server.x86_64
systemctl start glusterd
systemctl enable glusterd
systemctl status glusterd

分布式集群大多会有一个中心节点去管理其他节点,但是glusterfs无中心节点。

如果想要glusterfs分布式集群中的所有storage建立,只需要选择其中任意一个storage节点,去连接其他节点,即可实现互通

  • 连接命令:gluster peer probe 主机名|IP地址

  • 断开命令:gluster peer detach 主机名|IP地址

  • 节点互通(1,2,3,4,任选其中一个节点),现以server4为例
互连
gluster peer probe server1
gluster peer probe server2
gluster peer probe server3查看连接状态
gluster peer status

replica复制卷

  • storage服务器准备存储目录(1,2,3,4节点)
mkdir -p /data/gv0

在生产环境中建议将数据盘和系统盘分开,重新添加磁盘或分区,将磁盘或分区挂载到数据目录下

  • 创建存储卷(1,2,3,4,任选其中一个节点)
创建
gluster volume create gv0 replica 4 server1:/data/gv0/ server2:/data/gv0/ server3:/data/gv0/ server4:/data/gv0 force查看已创建的卷
gluster volume info gv0
----------------------------------------------
Volume Name: gv0
Type: Replicate
Volume ID: 32026a58-93f2-4b13-8e17-704b5d20a6c4
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 4 = 4
Transport-type: tcp
Bricks:
Brick1: server1:/data/gv0
Brick2: server2:/data/gv0
Brick3: server3:/data/gv0
Brick4: server4:/data/gv0
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
---------------------------------------------启动存储卷
gluster volume start gv0
gluster volume info gv0
---------------------------------------------
Volume Name: gv0
Type: Replicate
Volume ID: 32026a58-93f2-4b13-8e17-704b5d20a6c4
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 4 = 4
Transport-type: tcp
Bricks:
Brick1: server1:/data/gv0
Brick2: server2:/data/gv0
Brick3: server3:/data/gv0
Brick4: server4:/data/gv0
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
---------------------------------------------
  • 客户端使用(节点5)
安装相应软件包
yum install -y glusterfs glusterfs-fuse.x86_64挂载
mkdir /mnt/gv0
mount -t glusterfs server1:gv0 /mnt/gv0df -h
-------------------------------------------------------
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 899M     0  899M    0% /dev
tmpfs                    910M     0  910M    0% /dev/shm
tmpfs                    910M  9.6M  901M    2% /run
tmpfs                    910M     0  910M    0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  2.1G   15G   12% /
/dev/sda1               1014M  194M  821M   20% /boot
tmpfs                    182M     0  182M    0% /run/user/0
server1:gv0               17G  3.2G   14G   19% /mnt/gv0
-------------------------------------------------------
  • 扩展:验证数据共享(同读同写),基于server5克隆server6
[root@server6 ~]# dd if=/dev/zero of=/mnt/gv0/file1 bs=1M count=100
[root@server6 ~]# ls /mnt/gv0/
file1
[root@server5 ~]# ls /mnt/gv0/
file1

作为运维人员,需要考虑性能稳定, 高可用,负载均衡,健康检查, 扩展性等等内容

如果其中一个storage节点关机|网卡down掉:

  • 客户端需要等待10几秒钟才能正常继续使用,再次启动数据就正常同步过去

如果其中一个storage节点glusterfs相关的进程(glusterfsd)被kill掉

  • 客户端正常使用,但写数据不会同步到挂掉的storage节点,等进程再次启动即可同步

特点:

  • 类似raid1
  • 能够实现高可用
  • 磁盘利用率为1/n

stripe条带卷

创建
mkdir /data/gv1
[root@server1 ~]# gluster volume create gv1 stripe 4 server1:/data/gv1/ server2:/data/gv1/ server3:/data/gv1/ server4:/data/gv1/ force开启
[root@server1 ~]# gluster volume start gv1挂载
[root@server5 ~]# mkdir /mnt/gv1
[root@server5 ~]# mount.glusterfs server1:gv1 /mnt/gv1测试

特点:

  • 文件过小,不会平均分配给存储节点。有一定大小的文件会平均分配。类似raid0
  • 磁盘利用率100%(前提是所有节点提供的空间一样大,如果大小不一样,则按小的来进行条带)
  • 大文件会平均分配给存储节点(LB)
  • 不能实现HA,挂掉一个存储节点,此stripe存储卷则不可被客户端访问

distributed分布卷

创建
mkdir /data/gv2
[root@server1 ~]# gluster volume create gv2 server1:/data/gv2/ server2:/data/gv2/ server3:/data/gv2/ server4:/data/gv2/ force开启
[root@server1 ~]# gluster volume start gv2挂载
[root@server5 ~]# mkdir /mnt/gv2
[root@server5 ~]# mount.glusterfs server1:gv2 /mnt/gv2
[root@server5 ~]# df -Th
文件系统                类型            容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs        899M     0  899M    0% /dev
tmpfs                   tmpfs           910M     0  910M    0% /dev/shm
tmpfs                   tmpfs           910M  9.6M  901M    2% /run
tmpfs                   tmpfs           910M     0  910M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs              17G  2.1G   15G   12% /
/dev/sda1               xfs            1014M  194M  821M   20% /boot
tmpfs                   tmpfs           182M     0  182M    0% /run/user/0
server1:gv2             fuse.glusterfs   68G  9.8G   59G   15% /mnt/gv2测试
[root@server5 ~]# touch /mnt/gv2/{a..h}
[root@server1 ~]# ls /data/gv2/
a
[root@server2 ~]# ls /data/gv2/
b  c  e
[root@server3 ~]# ls /data/gv2/
f  g
[root@server4 ~]# ls /data/gv2/
d  h

特点:

  • 该模式为随机写到不同的存储里,直到所有写满为止
  • 磁盘利用率100%
  • 方便扩容
  • 不保障的数据的安全性(挂掉一个节点,等待大概1分钟后,这个节点就剔除了,被剔除的节点上的数据丢失)
  • 不能提高IO性能

distributed-replica

创建
mkdir /data/gv3
[root@server1 ~]# gluster volume create gv3 replica 2 server1:/data/gv3/ server2:/data/gv3/ server3:/data/gv3/ server4:/data/gv3/ force开启
[root@server1 ~]# gluster volume start gv3
[root@server1 ~]# gluster volume info gv3Volume Name: gv3
Type: Distributed-Replicate
Volume ID: 28066226-1da3-4b7c-87f4-0aa0c85c1a08
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: server1:/data/gv3
Brick2: server2:/data/gv3
Brick3: server3:/data/gv3
Brick4: server4:/data/gv3
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off挂载
[root@server5 ~]# mkdir /mnt/gv3
[root@server5 ~]# mount.glusterfs server1:gv3 /mnt/gv3
[root@server5 ~]# df -Th
文件系统                类型            容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs        899M     0  899M    0% /dev
tmpfs                   tmpfs           910M     0  910M    0% /dev/shm
tmpfs                   tmpfs           910M  9.6M  901M    2% /run
tmpfs                   tmpfs           910M     0  910M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs              17G  2.1G   15G   12% /
/dev/sda1               xfs            1014M  194M  821M   20% /boot
tmpfs                   tmpfs           182M     0  182M    0% /run/user/0
server1:gv2             fuse.glusterfs   68G  9.8G   59G   15% /mnt/gv2
server1:gv3             fuse.glusterfs   34G  5.4G   29G   16% /mnt/gv3测试
[root@server5 ~]# touch /mnt/gv3/{a..h}
[root@server1 ~]# ls /data/gv3/
a  b  c  e
[root@server2 ~]# ls /data/gv3/
a  b  c  e
[root@server3 ~]# ls /data/gv3/
d  f  g  h
[root@server4 ~]# ls /data/gv3/
d  f  g  h

特点:

  • 4个存储分为两个组,这两个组按照distributed模式随机。但在组内的两个存储会按replica模式镜像复制
  • 磁盘利用率50%(分为2组的情况下)
  • 方便扩容
  • 能够实现HA

dispersed纠删卷

创建
mkdir /data/gv4
[root@server1 ~]# gluster volume create gv4 disperse 4 server1:/data/gv4/ server2:/data/gv4/ server3:/data/gv4/ server4:/data/gv4/ force
There isn't an optimal redundancy value for this configuration. Do you want to create the volume with redundancy 1 ? (y/n) y开启
[root@server1 ~]# gluster volume start gv4
[root@server1 ~]# gluster volume info gv4
Volume Name: gv4
Type: Disperse
Volume ID: 9ecd5a43-c7b5-485f-b593-0974e54cecf4
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x (3 + 1) = 4
Transport-type: tcp
Bricks:
Brick1: server1:/data/gv4
Brick2: server2:/data/gv4
Brick3: server3:/data/gv4
Brick4: server4:/data/gv4
Options Reconfigured:
transport.address-family: inet
nfs.disable: on挂载
[root@server5 ~]# mkdir /mnt/gv4
[root@server5 ~]# mount.glusterfs server1:gv4 /mnt/gv4
[root@server5 ~]# df -Th
文件系统                类型            容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs        899M     0  899M    0% /dev
tmpfs                   tmpfs           910M     0  910M    0% /dev/shm
tmpfs                   tmpfs           910M  9.6M  901M    2% /run
tmpfs                   tmpfs           910M     0  910M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs              17G  2.1G   15G   12% /
/dev/sda1               xfs            1014M  194M  821M   20% /boot
tmpfs                   tmpfs           182M     0  182M    0% /run/user/0
server1:gv2             fuse.glusterfs   68G  9.8G   59G   15% /mnt/gv2
server1:gv3             fuse.glusterfs   34G  5.4G   29G   16% /mnt/gv3
server1:gv4             fuse.glusterfs   51G  9.6G   42G   19% /mnt/gv4测试
[root@server5 ~]# dd if=/dev/zero of=/mnt/gv4/file1 bs=1M count=100
[root@server1 ~]# ll -h /data/gv4/file1
-rw-r--r-- 2 root root 34M 10月 30 21:32 /data/gv4/file1
[root@server2 ~]# ll -h /data/gv4/file1
-rw-r--r-- 2 root root 34M 10月 30 21:32 /data/gv4/file1
[root@server3 ~]# ll -h /data/gv4/file1
-rw-r--r-- 2 root root 34M 10月 30 21:32 /data/gv4/file1
[root@server4 ~]# ll -h /data/gv4/file1
-rw-r--r-- 2 root root 34M 10月 30 21:32 /data/gv4/file1

特点:

  • 类似raid5|raid6
  • 磁盘利用率75%(视情况而定)
  • 能够实现HA

卷的删除

删除客户端挂载的目录及数据
[root@server5 ~]# rm -rf /mnt/gv0/*解挂
[root@server5 ~]# umount /mnt/gv0
[root@server6 ~]# umount /mnt/gv0 停止存储卷
[root@server4 ~]# gluster volume stop gv0
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y删除储存卷
[root@server4 ~]# gluster volume delete gv0
Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y

裁减与扩容

  • 以distributed卷为例来做裁减与扩容

裁减

  • 在线裁减要看是哪一种模式的卷,比如stripe模式就不允许在线裁减
  • 不建议该操作
清空需要裁减的服务器上的数据
[root@server1 ~]# ls /data/gv2
a
[root@server5 ~]# rm -rf /mnt/gv2/a
[root@server1 ~]# ls /data/gv2裁减
[root@server1 ~]# gluster volume remove-brick gv2 server1:/data/gv2 force
Remove-brick force will not migrate files from the removed bricks, so they will no longer be available on the volume.
Do you want to continue? (y/n) y
[root@server1 ~]# gluster volume info gv2Volume Name: gv2
Type: Distribute
Volume ID: 7f21d9ec-6367-4eaf-990f-6eb8dd3003ba
Status: Started
Snapshot Count: 0
Number of Bricks: 3
Transport-type: tcp
Bricks:
Brick1: server2:/data/gv2
Brick2: server3:/data/gv2
Brick3: server4:/data/gv2
Options Reconfigured:
performance.client-io-threads: on
transport.address-family: inet
nfs.disable: on

扩容

域名解析(所有storage节点)
cat >> /etc/hosts <<EOF192.168.139.60 server6EOF安装glusterfs-server软件
[root@server6 ~]# yum install -y glusterfs-server.x86_64
错误:软件包:glusterfs-cli-4.1.10-1.el7.x86_64 (glusterfs)需要:glusterfs-libs = 4.1.10-1.el7已安装: glusterfs-libs-6.0-49.1.el7.x86_64 (@updates)glusterfs-libs = 6.0-49.1.el7可用: glusterfs-libs-4.1.0-0.1.rc0.el7.x86_64 (glusterfs)glusterfs-libs = 4.1.0-0.1.rc0.el7可用: glusterfs-libs-4.1.0-1.el7.x86_64 (glusterfs)glusterfs-libs = 4.1.0-1.el7

原因:版本冲突

解决:yum remove -y glusterf*

[root@server6 ~]# yum remove -y glusterfs*
[root@server6 ~]# yum install -y glusterfs-server.x86_64 启动服务
[root@server6 ~]# systemctl start glusterd
[root@server6 ~]# systemctl enable glusterd
[root@server6 ~]# systemctl status glusterd通过集群原先成员,将server6加入到集群中
[root@server2 ~]# gluster peer probe server6
peer probe: success.
[root@server2 ~]# gluster peer status
Number of Peers: 4Hostname: server4
Uuid: 4660760c-793c-4bb1-9f85-2ab0ad7a142c
State: Peer in Cluster (Connected)Hostname: server3
Uuid: ec3336c8-158a-42bc-a179-b6a6c3f02b2f
State: Peer in Cluster (Connected)Hostname: server1
Uuid: 6baea8e4-e021-400d-b684-d5a1a17ff427
State: Peer in Cluster (Connected)Hostname: server6
Uuid: 60ee3b8a-8842-4f97-b1c9-810424551525
State: Peer in Cluster (Connected)创建数据目录
[root@server6 ~]# mkdir /data/gv2 -p扩容
[root@server6 ~]# gluster volume add-brick gv2 server6:/data/gv2 force
volume add-brick: success

ceph

介绍

概念

  • Ceph是一个能提供的文件存储,块存储对象存储的分布式存储系统。它提供了一个可无限伸缩的Ceph存储集群
  • RedHat及OpenStack 都可与Ceph整合以支持虚拟机镜像的后端存储。
  • 官网:https://docs.ceph.com/docs/master/

优势

  • 高扩展性,使用普通x86服务器,支持10-1000台服务器,支持TB到EB级的扩展
  • 高可靠性没有单点故障,多数据副本,自动管理,自动修复
  • 高性能,数据分布均衡
  • 可用于对象存储,块设备存储和文件系统存储

架构

  • RADOS对象存储系统

    Ceph基于可靠的、自动化的、分布式的对象存储(Reliable,Autonomous,Distributed Object Storage,RADOS)提供了一个可以无限扩展的存储集群。RADOS,顾名思义这一层本身是一个完整的对象存储系统,所有存储在Ceph系统中的用户数据事实上最终都是由这一层来完成的。而Ceph的高可靠、高可扩展、高性能、高自动化等特性本质上也是由这一层提供的。

    物理上,RADOS由大量的存储设备结点组成,每个结点拥有自己的硬件资源(CPU/内存/硬盘/网络), 并运行着操作系统和文件系统。

  • 基础库librados

    Ceph客户端用一定的协议和存储集群进行交互,Ceph把此功能封装进了librados。librados库实际上是对RADOS进行抽象和封装并向上层提供API的,以便可以基于RADOS进行应用开发,支持多种编程语言,如Python,C,C++等.。 简单来说,就是给开发人员使用的接口

  • RADOS GW / RBD / Ceph FS

    RADOS GW:是一个构建在librados库之上的对象存储接口,为应用访问Ceph集群提供了一个restful:风格的网关并且兼容S3和Swift。(对象存储)

    RBD :则提供了一个标准的块设备接口,常用于在虚拟化的场景下为虚拟机创建存储卷。 (块存储)

    Ceph FS:是一个可移植操作系统接口兼容的分布式存储系统,使用Ceph存储集群来存储数据,通过Linux内核客户端和FUSE来提供文件系统。(文件存储)

  • 扩展名词

RESTFUL: RESTFUL是一种架构风格,提供了一组设计原则和约束条件,http就属于这种风格的典型应用。REST最大的几个特点为:资源、统一接口、URI和无状态。

  • 资源: 网络上一个具体的信息: 一个文件,一张图片,一段视频都算是一种资源。
  • 统一接口: 数据的元操作,即CRUD(create, read, update和delete)操作,分别对应于HTTP方法
    • GET(SELECT):从服务器取出资源(一项或多项)。
    • POST(CREATE):在服务器新建一个资源。
    • PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)。
    • PATCH(UPDATE):在服务器更新资源(客户端提供需要修改的资源数据)。
    • DELETE(DELETE):从服务器删除资源。
  • URI(统一资源定位符): 每个URI都对应一个特定的资源。要获取这个资源,访问它的URI就可以。最典型的URI即URL
  • 无状态: 一个资源的定位与其它资源无关,不受其它资源的影响。

S3 (Simple Storage Service 简单存储服务): 可以把S3看作是一个超大的硬盘, 里面存放数据资源(文件,图片,视频等),这些资源统称为对象.这些对象存放在存储段里,在S3叫做bucket.

  • 和硬盘做类比, 存储段(bucket)就相当于目录,对象就相当于文件。

swift: 最初是由Rackspace公司开发的高可用分布式对象存储服务,并于2010年贡献给OpenStack开源社区作为其最初的核心子项目之一.

RADOS存取原理

  • 要实现数据存取需要创建一个pool,创建pool要先分配PG

  • Monitor :一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos同步数据,用来保存OSD的元数据。
  • OSD: OSD全称Object Storage Device,也就是负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD。
  • MDS:MDS全称Ceph· Metadata Server,是CephFS服务依赖的元数据服务。
  • Object :Ceph最底层的存储单元是Object对象,每个Object包含元数据和原始数据。
  • PG :PG全称Placement Grouops,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据。
  • CRUSH:CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。

ceph集群搭建

  • Ceph存储集群至少需要一个Ceph Monitor和两个 OSD 守护进程
  • 环境准备

注意:这里都全改成短主机名,方便后面实验。如果你坚持用类似vm1.cluster.com这种主机名,或者加别名的话,ceph会在后面截取你的主机名vm1.cluster.com为vm1,造成不一致导致出错

虚拟机 IP地址 担当
server1 192.168.139.10 node1
server2 192.168.139.20 node2
server3 192.168.139.30 node3
server4 192.168.139.40 client
所有node节点添加大小为5G的硬盘域名解析
cat >> /etc/hosts <<EOF192.168.139.10 server1192.168.139.20 server2192.168.139.30 server3192.168.139.40 server4EOF关闭防火墙,selinux
systemctl stop firewalld
systemctl disable firewalld
iptables -F
setenforce 0
sed -i 's/SELINUX=enforced/SELINUX=disabled/' /etc/selinux/config时间同步
ntpdate cn.ntp.org.cn
dateyum源配置(centos7默认的公网源+epel源+ceph的aliyun源)
yum install -y epel-release
vim /etc/yum.repos.d/ceph.repo
---------------------------------------------------
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/x86_64/
enabled=1
gpgcheck=0
priority=1[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/
enabled=1
gpgcheck=0
priority=1[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS
enabled=1
gpgcheck=0
priority=1
--------------------------------------------------
yum clean all
yum makecache
yum repolist
  • 配置免密登录(选择server1为部署节点)
[root@server1 ~]# ssh-keygen
[root@server1 ~]# ssh-copy-id server1
[root@server1 ~]# ssh-copy-id server2
[root@server1 ~]# ssh-copy-id server3
[root@server1 ~]# ssh-copy-id server4
  • 在选择的部署节点(server1)上安装部署工具并创建集群
安装ceph-deploy
[root@server1 ~]# yum install -y ceph-deploy创建集群
[root@server1 ~]# mkdir /etc/ceph/
[root@server1 ~]# cd /etc/ceph/
[root@server1 ceph]# ceph-deploy new server1
[root@server1 ceph]# ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring
  • 安装ceph相关软件
所有node节点(1,2,3)安装ceph和ceph-radosgw
yum install ceph ceph-radosgw.x86_64 -y客户端(4)安装ceph-common
[root@server4 ~]# yum install -y ceph-common.x86_64
  • 创建mon(监控)
在部署节点增加public网络用于监控
[root@server1 ceph]# echo 'public network = 192.168.139.0/24' >> /etc/ceph/ceph.conf
[root@server1 ceph]# cat /etc/ceph/ceph.conf
[global]
fsid = 697c2db7-ffa2-4636-b364-532a89b379fa
mon_initial_members = server1
mon_host = 192.168.139.10
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
public network = 192.168.139.0/24创建监控
[root@server1 ceph]# ceph-deploy mon create-initial查看集群
[root@server1 ceph]# ceph health
HEALTH_OK
[root@server1 ceph]# ceph -scluster:id:     697c2db7-ffa2-4636-b364-532a89b379fahealth: HEALTH_OKservices:mon: 1 daemons, quorum server1mgr: no daemons activeosd: 0 osds: 0 up, 0 indata:pools:   0 pools, 0 pgsobjects: 0  objects, 0 Busage:   0 B used, 0 B / 0 B availpgs: 添加多个mon节点,以防单点故障(建议奇数个,因为有quorum仲裁投票)
[root@server1 ceph]# ceph-deploy mon add server2
[root@server1 ceph]# ceph-deploy mon add server3
[root@server1 ceph]# ceph -scluster:id:     697c2db7-ffa2-4636-b364-532a89b379fahealth: HEALTH_OKservices:mon: 3 daemons, quorum server1,server2,server3mgr: no daemons activeosd: 0 osds: 0 up, 0 indata:pools:   0 pools, 0 pgsobjects: 0  objects, 0 Busage:   0 B used, 0 B / 0 B availpgs:
  • 创建mgr(管理)
在部署节点创建一个mgr
[root@server1 ceph]# ceph-deploy mgr create server1
[root@server1 ceph]# ceph -scluster:id:     697c2db7-ffa2-4636-b364-532a89b379fahealth: HEALTH_WARNOSD count 0 < osd_pool_default_size 3services:mon: 3 daemons, quorum server1,server2,server3mgr: server1(active)osd: 0 osds: 0 up, 0 indata:pools:   0 pools, 0 pgsobjects: 0  objects, 0 Busage:   0 B used, 0 B / 0 B availpgs: 添加多个mgr实现HA
[root@server1 ceph]# ceph-deploy mgr create server2
[root@server1 ceph]# ceph-deploy mgr create server3
[root@server1 ceph]# ceph -scluster:id:     697c2db7-ffa2-4636-b364-532a89b379fahealth: HEALTH_WARNOSD count 0 < osd_pool_default_size 3services:mon: 3 daemons, quorum server1,server2,server3mgr: server1(active), standbys: server2, server3osd: 0 osds: 0 up, 0 indata:pools:   0 pools, 0 pgsobjects: 0  objects, 0 Busage:   0 B used, 0 B / 0 B availpgs:     
  • 创建osd(存储盘)
zap表示干掉磁盘上的数据,相当于格式化
[root@server1 ceph]# ceph-deploy disk zap server1 /dev/sdb
[root@server1 ceph]# ceph-deploy disk zap server2 /dev/sdb
[root@server1 ceph]# ceph-deploy disk zap server3 /dev/sdb将磁盘创建为osd
[root@server1 ceph]# ceph-deploy osd create --data /dev/sdb server1
[root@server1 ceph]# ceph-deploy osd create --data /dev/sdb server2
[root@server1 ceph]# ceph-deploy osd create --data /dev/sdb server3[root@server1 ceph]# ceph -scluster:id:     697c2db7-ffa2-4636-b364-532a89b379fahealth: HEALTH_OKservices:mon: 3 daemons, quorum server1,server2,server3mgr: server1(active), standbys: server2, server3osd: 3 osds: 3 up, 3 indata:pools:   0 pools, 0 pgsobjects: 0  objects, 0 Busage:   3.0 GiB used, 12 GiB / 15 GiB availpgs:

在线扩容

以加入node4节点为例

  • 主机名配置和绑定
  • 在node4上yum install ceph ceph-radosgw -y安装软件
  • 在部署节点node1上同步配置文件给node4. ceph-deploy admin node4
  • 按需求选择在node4上添加mon或mgr或osd等

pool

  • 创建pool
创建test_pool,指定pg数为128
[root@server1 ceph]# ceph osd pool create test_pool 128
pool 'test_pool' created查看gv数目
[root@server1 ceph]# ceph osd pool get test_pool pg_num
pg_num: 128
  • 上传数据
这里把本机的/etc/fstab文件上传到test_pool,并取名为newfstab
[root@server1 ceph]# rados put newfstab /etc/fstab --pool=test_pool查看
[root@server1 ceph]# rados -p test_pool ls
newfstab
  • 删除数据
[root@server1 ceph]# rados rm newfstab  -p test_pool
[root@server1 ceph]# rados -p test_pool ls
  • 删除pool
在部署节点node1上增加参数允许ceph删除pool
[root@server1 ceph]# echo 'mon_allow_pool_delete = true' >>/etc/ceph/ceph.conf 将配置文件同步到其他集群节点
[root@server1 ceph]# ceph-deploy --overwrite-conf admin server1 server2 server3重启监控服务
[root@server1 ceph]# systemctl restart ceph-mon.target删除pool(pool名输入两次,后再接--yes-i-really-really-mean-it参数)
[root@server1 ceph]# ceph osd pool delete test_pool test_pool --yes-i-really-really-mean-it
pool 'test_pool' removed

文件存储

  • 要运行Ceph文件系统,需要创建至少带一个mds的Ceph存储集群

  • 创建文件系统

创建多个mds,实现HA
[root@server1 ceph]# ceph-deploy --overwrite-conf admin server1 server2 server3一个Ceph文件系统需要至少两个RADOS存储池,将数据与元数据分开
[root@server1 ceph]# ceph osd pool create cephfs_pool 128
[root@server1 ceph]# ceph osd pool create cephfs_metadata 64
[root@server1 ceph]# ceph osd pool ls
cephfs_pool
cephfs_metadata将两个pool合并
[root@server1 ceph]# ceph fs new cephfs cephfs_metadata cephfs_pool
new fs with metadata pool 3 and data pool 2查看状态
[root@server1 ceph]# ceph mds stat
cephfs-1/1/1 up  {0=server3=up:active}, 2 up:standby
  • 客户端挂载
客户端认证
[root@server1 ceph]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]key = AQCTmH9h8BxfMhAA3rbWaEtqLMEVwzuUUll43Q==caps mds = "allow *"caps mgr = "allow *"caps mon = "allow *"caps osd = "allow *"
#复制key,在客户端上创建一个文件记录密钥字符串
[root@server4 ~]# vim admin.key
[root@server4 ~]# cat admin.key
AQCTmH9h8BxfMhAA3rbWaEtqLMEVwzuUUll43Q==挂载
[root@server4 ~]# mount.ceph server1:6789:/ /mnt -o name=admin,secretfile=/root/admin.key
[root@server4 ~]# df -Th
文件系统                类型        容量    已用  可用 已用% 挂载点
devtmpfs                devtmpfs  899M     0  899M    0% /dev
tmpfs                   tmpfs     910M     0  910M    0% /dev/shm
tmpfs                   tmpfs     910M  9.6M  901M    2% /run
tmpfs                   tmpfs     910M     0  910M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  2.1G   15G   13% /
/dev/sda1               xfs      1014M  194M  821M   20% /boot
tmpfs                   tmpfs     182M     0  182M    0% /run/user/0
192.168.139.10:6789:/   ceph      3.8G     0  3.8G    0% /mnt
  • 删除文件储存系统
客户端删除数据
[root@server4 ~]# rm -rf /mnt/*解挂
[root@server4 ~]# umount /mnt/顶掉所有的mds节点
[root@server1 ~]# systemctl stop ceph-mds.target
[root@server2 ~]# systemctl stop ceph-mds.target
[root@server3 ~]# systemctl stop ceph-mds.target删除文件系统
[root@server1 ~]# ceph fs rm cephfs --yes-i-really-mean-it删pool
[root@server1 ~]# ceph osd pool delete cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it
[root@server1 ~]# ceph osd pool delete cephfs_pool cephfs_pool --yes-i-really-really-mean-it启动ceph-mds.target
[root@server1 ~]# systemctl start ceph-mds.target
[root@server2 ~]# systemctl start ceph-mds.target
[root@server3 ~]# systemctl start ceph-mds.target

块存储

  • 创建块设备
在server1上同步文件到客户端
[root@server1 ~]# cd /etc/ceph/
[root@server1 ceph]# ceph-deploy admin server4建立存储池
[root@server4 ~]# ceph osd pool create rbd_pool 128储存池初始化
[root@server4 ~]# rbd pool init rbd_pool创建镜像
[root@server4 ~]# rbd create image1 -p rbd_pool --size 5000查看
[root@server4 ~]# rbd ls rbd_pool
image1
[root@server4 ~]# rbd info image1 -p rbd_pool
rbd image 'image1':size 4.9 GiB in 1250 objectsorder 22 (4 MiB objects)id: 5eb36b8b4567block_name_prefix: rbd_data.5eb36b8b4567format: 2features: layering, exclusive-lock, object-map, fast-diff, deep-flattenop_features: flags: create_timestamp: Mon Nov  1 22:59:37 2021将image1映射为块设备
[root@server4 ~]# rbd feature disable rbd_pool/image1 object-map fast-diff deep-flatten
[root@server4 ~]# rbd map rbd_pool/image1
/dev/rbd0
[root@server4 ~]# rbd map rbd_pool/image1
rbd: warning: image already mapped as /dev/rbd0
/dev/rbd1
[root@server4 ~]# rbd showmapped
id pool     image  snap device
0  rbd_pool image1 -    /dev/rbd0
1  rbd_pool image1 -    /dev/rbd1分区,格式化,挂载
[root@server4 ~]# fdisk /dev/rbd0
[root@server4 ~]# mkfs.xfs /dev/rbd0p1
[root@server4 ~]# mount /dev/rbd0p1 /mnt
[root@server4 ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  899M     0  899M    0% /dev
tmpfs                   tmpfs     910M     0  910M    0% /dev/shm
tmpfs                   tmpfs     910M  9.6M  901M    2% /run
tmpfs                   tmpfs     910M     0  910M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  2.1G   15G   13% /
/dev/sda1               xfs      1014M  194M  821M   20% /boot
tmpfs                   tmpfs     182M     0  182M    0% /run/user/0
/dev/rbd0p1             xfs       4.9G   33M  4.9G    1% /mnt测试
[root@server4 ~]# dd if=/dev/zero of=/mnt/file1 bs=1M count=1000
[root@server4 ~]# ceph -scluster:id:     697c2db7-ffa2-4636-b364-532a89b379fahealth: HEALTH_OKservices:mon: 3 daemons, quorum server1,server2,server3mgr: server1(active), standbys: server2, server3osd: 3 osds: 3 up, 3 indata:pools:   1 pools, 128 pgsobjects: 239  objects, 900 MiBusage:   5.6 GiB used, 9.4 GiB / 15 GiB availpgs:     128 active+cleanio:client:   28 MiB/s wr, 0 op/s rd, 22 op/s wr
  • 在线扩容

分区后不能在线扩容,选用/dev/rbd1做在线扩容

格式化,挂载
[root@server4 ~]# mkfs.xfs -f /dev/rbd1
[root@server4 ~]# mount /dev/rbd1 /mnt
[root@server4 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part ├─centos-root 253:0    0   17G  0 lvm  /└─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    5G  0 disk
sr0              11:0    1  973M  0 rom
rbd0            252:0    0  4.9G  0 disk
└─rbd0p1        252:1    0  4.9G  0 part
rbd1            252:16   0  4.9G  0 disk /mnt扩容成8.0G
[root@server4 ~]# rbd resize --size 8000 rbd_pool/image1
[root@server4 ~]# rbd info rbd_pool/image1
rbd image 'image1':size 7.8 GiB in 2000 objectsorder 22 (4 MiB objects)id: 5eb36b8b4567block_name_prefix: rbd_data.5eb36b8b4567format: 2features: layering, exclusive-lockop_features: flags: create_timestamp: Mon Nov  1 22:59:37 2021
[root@server4 ~]# df -h |tail -1
/dev/rbd1                4.9G   33M  4.9G    1% /mnt
[root@server4 ~]# xfs_growfs -d /mnt/
[root@server4 ~]# df -h |tail -1
/dev/rbd1                7.9G   33M  7.8G    1% /mnt
  • 裁减
裁减成5G
[root@server4 ~]# rbd resize --size 5000 rbd_pool/image1 --allow-shrink重新格式化挂载
[root@server4 ~]# umount /mnt
[root@server4 ~]# mkfs.xfs -f /dev/rbd0
[root@server4 ~]# mount /dev/rbd0 /mnt/
[root@server4 ~]# df -Th|tail -1
/dev/rbd0               xfs       4.9G   33M  4.9G    1% /mnt
  • 删除块存储
[root@server4 ~]# umount /mnt/
[root@server4 ~]# rbd unmap /dev/rbd0
[root@server4 ~]# ceph osd pool delete rbd_pool rbd_pool --yes-i-really-really-mean-it
pool 'rbd_pool' removed

对象存储

  • 创建对象储存
创建对象存储网关
[root@server1 ~]# cd /etc/ceph/
[root@server1 ceph]# ceph-deploy rgw create server1查看7480端口
[root@server1 ceph]# lsof -i:7480
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
radosgw 7867 ceph   40u  IPv4  34871      0t0  TCP *:7480 (LISTEN)
  • 客户端连接
创建测试用户,并保留密钥
#--uid和 --display-name的内容都需要用双引号引起来,单引号会报错
[root@server4 ~]# radosgw-admin user create --uid="testuser" --display-name="First User"
{"user_id": "testuser","display_name": "First User","email": "","suspended": 0,"max_buckets": 1000,"auid": 0,"subusers": [],"keys": [{"user": "testuser","access_key": "8YXZDWROO1DZ6DIGGU4W","secret_key": "DukiAU8FcRVAHH5leK76l3QH9J4wymxSHcNcJ6kq"}],"swift_keys": [],"caps": [],"op_mask": "read, write, delete","default_placement": "","placement_tags": [],"bucket_quota": {"enabled": false,"check_on_raw": false,"max_size": -1,"max_size_kb": 0,"max_objects": -1},"user_quota": {"enabled": false,"check_on_raw": false,"max_size": -1,"max_size_kb": 0,"max_objects": -1},"temp_url_keys": [],"type": "rgw","mfa_ids": []
}
[root@server4 ~]# radosgw-admin user create --uid="testuser" --display-name="First User"|grep -E 'access_key|secret_key'"access_key": "8YXZDWROO1DZ6DIGGU4W","secret_key": "DukiAU8FcRVAHH5leK76l3QH9J4wymxSHcNcJ6kq"安装s3cmd工具,用于连接
[root@server4 ~]# yum install -y s3cmd编写连接参数,保存到/root/.s3cfg文件中(s3cmd会默认加载)
[root@server4 ~]# vim /root/.s3cfg
[default]
access_key = 8YXZDWROO1DZ6DIGGU4W
secret_key = DukiAU8FcRVAHH5leK76l3QH9J4wymxSHcNcJ6kq
host_base = 192.168.139.10:7480
host_bucket = 192.168.139.10:7480/%(bucket)
cloudfront_host = 192.168.139.10:7480
use_https = False
  • 客户端使用
创建bucket
[root@server4 ~]# s3cmd mb s3://test_bucket
[root@server4 ~]# s3cmd ls
2021-11-01 16:32  s3://test_bucket上传文件
[root@server4 ~]# s3cmd put /etc/fstab s3://test_bucket下载文件
[root@server4 ~]# s3cmd get s3://test_bucket/fstab
download: 's3://test_bucket/fstab' -> './fstab'  [1 of 1]
[root@server4 ~]# ls ./fstab
./fstab

ceph+owncloud打造云盘

在ceph的客户端上准备好bucket和相关的连接key
[root@server4 ~]# s3cmd mb s3://owncloud
Bucket 's3://owncloud/' created
[root@server4 ~]# cat /root/.s3cfg
[default]
access_key = 8YXZDWROO1DZ6DIGGU4W
secret_key = DukiAU8FcRVAHH5leK76l3QH9J4wymxSHcNcJ6kq
host_base = 192.168.139.10:7480
host_bucket = 192.168.139.10:7480/%(bucket)
cloudfront_host = 192.168.139.10:7480
use_https = False安装owncloud运行环境
#owncloud需要web服务器和php支持. 目前最新版本owncloud需要php7.x版本
#这里我们使用老版本的owncloud
[root@server4 ~]# yum install httpd mod_ssl php-mysql php php-gd php-xml php-mbstring -y
[root@server4 ~]# systemctl restart httpd上传owncloud软件包, 并解压到httpd家目录
[root@server4 ~]# yum install -y lrzsz
[root@server4 ~]# rz
[root@server4 ~]# tar -xjf owncloud-9.0.1.tar.bz2
tar (child): bzip2:无法 exec: 没有那个文件或目录
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
[root@server4 ~]# yum install -y bzip2
[root@server4 ~]# tar -xjf owncloud-9.0.1.tar.bz2
[root@server4 ~]# mv owncloud /var/www/html/修改/var/www/html的属主,属组
[root@server4 ~]# chown apache.apache -R /var/www/html/
[root@server4 ~]# ll /var/www/html/
drwxr-xr-x 14 apache apache 4096 4月   7 2016 owncloud
  • 浏览器访问

  • 开启外部存储


  • 上传文件

传入Windows中的文件

liunx命令行传入文件

[root@server4 ~]# s3cmd put /etc/fstab s3://owncloud
upload: '/etc/fstab' -> 's3://owncloud/fstab'  [1 of 1]465 of 465   100% in    0s     8.76 KB/s  done

  • 下载文件

点击文件即可下载

  • 修改owncloud上传文件大小限制(默认不能超过2M)
[root@server4 ~]# vim /var/www/html/owncloud/.htaccess<IfModule mod_php5.c>php_value upload_max_filesize 2000M    修改调大php_value post_max_size 2000M           修改调大[root@client ~]# vim /etc/php.inipost_max_size = 2000M                    修改调大
upload_max_filesize = 2000M                修改调大[root@server4 ~]# systemctl restart httpd

Glusterfs|ceph实现分布式存储相关推荐

  1. 【ceph】分布式存储ceph

    1 块存储,文件存储,对象存储 1.1 简介 文件存储:分层次存储,文件存储在文件夹中:访问文件时系统需要知道文件所在的路径. 举例:企业部门之间运用网络存储器(NAS)进行文件共享. 块存储:将数据 ...

  2. 【ceph】分布式存储一些知识点梳理

    前一段时间由于一些原因工作变动,面了一些分布式存储的相关岗位,感觉市面上相关经验分享较少,因此拿出来和大家分享一下.由于公司隐私政策问题,不会按公司对题目进行罗列,仅仅就一些面试的方向和内容进行简单梳 ...

  3. ceph(分布式存储)

    文章目录 一.ceph的组件和功能 1.简介 2.层次结构和功能 二.ceph的数据读写流程 三.使用ceph-deploy安装一个最少三个节点的ceph集群(推荐3个或以上的磁盘作为专用osd) 1 ...

  4. 智牛股_第4章_Nacos+Ceph分布式存储+Netty通讯

    智牛股_第4章_Nacos+Ceph分布式存储+Netty通讯 文章目录 智牛股_第4章_Nacos+Ceph分布式存储+Netty通讯 学习目标 第1章 Nacos的介绍与使用 1. 目标 2. 分 ...

  5. 分布式存储之 Glusterfs

    分布式存储 分布式存储是一种数据存储技术,通过网络使用企业中的每台机器上的磁盘空间,并将这些分散的存储资源构成一个虚拟的存储设备,数据分散的存储在企业的各个角落. 分布式存储系统 ,是将数据 分散存储 ...

  6. GlusterFS分布式存储

    目录 glusterfs简介 glusterfs部署 glustefs分布式存储优化 glusterfs在企业中应用场景 参考文章地址 一.glusterfs简介 Glusterfs是一个开源的分布式 ...

  7. 最新版本 release版本 ceph分布式存储搭建(rook-1.8.6)

    rook+ceph ceph简介: Rook 是 Kubernetes 的开源云原生存储编排器,为各种存储解决方案提供平台.框架和支持,以与云原生环境进行原生集成. Rook 将存储软件转变为自我管理 ...

  8. Ceph分布式存储实战.

    云计算与虚拟化技术丛书 Ceph分布式存储实战 Ceph中国社区 著 图书在版编目(CIP)数据 Ceph分布式存储实战/Ceph中国社区著. -北京:机械工业出版社,2016.11 (云计算与虚拟化 ...

  9. ceph存储原理_【理论研究】漫谈传统IT基础设施10-存储(04)

    01-按照存储类型分类 01.独享式存储 指由单台存储设备提供服务,且相同的一块存储区域同一时间只能被单台设备访问(读写). 如DAS,块存储,SAN网络下的存储,具体产品包括磁盘阵列,硬盘. 此种存 ...

最新文章

  1. TP 框架实现支付宝接口功能
  2. 加密软件究竟有哪些作用呢?
  3. Waymo无人出租车加州上线一个月,日均156单,还有真·自动驾驶服务
  4. 赠书:全球首本VS Code中文书来了,高效编程秘诀全收录!
  5. java color类 蓝色_java中Color类的简单总结
  6. Altium Designer 10 (PCB design)
  7. ❤️14万字的《微服务开发SpringBoot—从基础高级》(建议收藏)❤️
  8. ECCV2020 | CPNDet:Anchor-free两阶段的目标检测框架,详解
  9. 第十四天linux扩展知识点
  10. lumion自动保存_全是踩过的坑,20条新人必看的Lumion良好操作习惯
  11. html网页如何添加google广告,三步将谷歌广告代码添加到WordPress网站侧边栏 | 老豆国外联盟营销教程指南...
  12. 解决了sql server 用户 sa 登录失败的问题
  13. 73个GitHub高级搜索技巧
  14. 用计算机语言写结婚祝福语,[结婚电子显示屏祝福语]电子显示屏结婚贺词
  15. 被中二病拯救 ——看《中二病也要谈恋爱》第一季
  16. Matlab App Designer自学笔记(九):容器及图窗控件
  17. 团队协作工具--worktile
  18. android gps 火星坐标,高德地图GCJ-02火星坐标系与GPS的WGS-84坐标系转换公式(安卓)...
  19. 概率图模型(PGM)综述-by MIT 林达华博士
  20. R语言-出图时的中英文字体解决方案

热门文章

  1. 机器学习之DBSCAN算法
  2. JavaScript 中 let 的使用
  3. 成都计算机考证培训机构
  4. C#,图像二值化(16)——全局阈值的力矩保持算法(Moment-proserving Thresholding)及其源代码
  5. JavaScript 高级
  6. EventLog Analyzer:高效保护网络安全的强大工具
  7. Vue项目中Echarts流向图迁徙图实现
  8. mongodb关联查询
  9. Python之freshman07 面向对象编程jinjie
  10. 北京市重点区域5G网络实测分析