Glusterfs|ceph实现分布式存储

分布式存储

存储概述

存储介绍

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

  • 在这里插入图片描述

  • 如果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 modulePOSIXRestful API
典型技术SANHDFS、GFSSwift、Amazon S3
适合场景数据中心,虚拟化平台办公网络网络媒体文件存储

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

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

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

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

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

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

SAN

分类

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

IP-SAN之iscsi实现

虚拟机IP地址作用
server1192.168.139.10储存服务器(导出)
server2192.168.139.20业务服务器(导入)
  • 环境准备
systemctl stop NetworkManager
systemctl disable NetworkManager

systemctl stop firewalld
systemctl disable firewalld

setenforce 0
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config

cat >> /etc/hosts <<EOF
	192.168.139.10 server10
	192.168.139.20 server20
	EOF

ntpdate 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_file
	incominguser tgt-user tgt-pass
</target>

导入端添加用户及密码
[root@server2 ~]# vim /etc/iscsi/iscsid.conf
 57 node.session.auth.authmethod = CHAP

 68 node.session.auth.username = tgt-user
 69 node.session.auth.password = tgt-pass
 
 78 discovery.sendtargets.auth.authmethod = CHAP
 
 82 discovery.sendtargets.auth.username = tgt-user
 83 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云计算系统导入数据。

开源软件比较

存储系统CephGlusterFSHDFSMooseFSFastDFS
开发语言C++CJavaCC
开源协议LGPLGPL V3ApacheGPL V3GPL V3
数据存储方式对象/文件/块文件/块文件文件/块
集群节点通信协议私有协议(TCP)TCP/RDAMTCPTCPTCP
专用元数据存储点占用MDS占用MDS占用MFS
在线扩容支持支持支持支持支持
冗余备份支持支持支持支持支持
单点故障不存在不存在存在存在不存在
跨集群同步不支持支持不支持不支持部分支持
适用场景单集群的大中小文件跨集群云存储Mapreduce使用的文件存储单集群的大中文件单集群的中小文件
FUSE挂载支持支持支持支持不支持
访问接口POSIXPOSIX不支持POSIXPOSIX不支持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地址
server1storage1192.168.139.10
server2storage2192.168.139.20
server3storage3192.168.139.30
server4storage4192.168.139.40
server5client192.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 <<EOF
	192.168.139.10 server1
	192.168.139.20 server2
	192.168.139.30 server3
	192.168.139.40 server4
	192.168.139.50 server5
	EOF

关闭防火墙,selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforced/SELINUX=disabled/' /etc/selinux/config

时间同步
ntpdate cn.ntp.org.cn

yum源配置(需要加上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/gv0

df -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 gv3
 Volume 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 gv2
 
Volume 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 <<EOF
	192.168.139.60 server6
	EOF

安装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: 4

Hostname: 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地址担当
server1192.168.139.10node1
server2192.168.139.20node2
server3192.168.139.30node3
server4192.168.139.40client
所有node节点添加大小为5G的硬盘

域名解析
cat >> /etc/hosts <<EOF
	192.168.139.10 server1
	192.168.139.20 server2
	192.168.139.30 server3
	192.168.139.40 server4
	EOF

关闭防火墙,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
date

yum源配置(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 -s
  cluster:
    id:     697c2db7-ffa2-4636-b364-532a89b379fa
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum server1
    mgr: no daemons active
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs: 
    
添加多个mon节点,以防单点故障(建议奇数个,因为有quorum仲裁投票)
[root@server1 ceph]# ceph-deploy mon add server2
[root@server1 ceph]# ceph-deploy mon add server3
[root@server1 ceph]# ceph -s
  cluster:
    id:     697c2db7-ffa2-4636-b364-532a89b379fa
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum server1,server2,server3
    mgr: no daemons active
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:     
  • 创建mgr(管理)
在部署节点创建一个mgr
[root@server1 ceph]# ceph-deploy mgr create server1
[root@server1 ceph]# ceph -s
  cluster:
    id:     697c2db7-ffa2-4636-b364-532a89b379fa
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 3 daemons, quorum server1,server2,server3
    mgr: server1(active)
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs: 

添加多个mgr实现HA
[root@server1 ceph]# ceph-deploy mgr create server2
[root@server1 ceph]# ceph-deploy mgr create server3
[root@server1 ceph]# ceph -s
  cluster:
    id:     697c2db7-ffa2-4636-b364-532a89b379fa
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3
 
  services:
    mon: 3 daemons, quorum server1,server2,server3
    mgr: server1(active), standbys: server2, server3
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:     

  • 创建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 -s
  cluster:
    id:     697c2db7-ffa2-4636-b364-532a89b379fa
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum server1,server2,server3
    mgr: server1(active), standbys: server2, server3
    osd: 3 osds: 3 up, 3 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0  objects, 0 B
    usage:   3.0 GiB used, 12 GiB / 15 GiB avail
    pgs:     

在线扩容

以加入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 objects
	order 22 (4 MiB objects)
	id: 5eb36b8b4567
	block_name_prefix: rbd_data.5eb36b8b4567
	format: 2
	features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
	op_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 -s
  cluster:
    id:     697c2db7-ffa2-4636-b364-532a89b379fa
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum server1,server2,server3
    mgr: server1(active), standbys: server2, server3
    osd: 3 osds: 3 up, 3 in
 
  data:
    pools:   1 pools, 128 pgs
    objects: 239  objects, 900 MiB
    usage:   5.6 GiB used, 9.4 GiB / 15 GiB avail
    pgs:     128 active+clean
 
  io:
    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 objects
	order 22 (4 MiB objects)
	id: 5eb36b8b4567
	block_name_prefix: rbd_data.5eb36b8b4567
	format: 2
	features: layering, exclusive-lock
	op_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.ini

post_max_size = 2000M					修改调大		
upload_max_filesize = 2000M				修改调大

[root@server4 ~]# systemctl restart httpd
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值