zoukankan      html  css  js  c++  java
  • ceph概述

                                                                            ceph概述

     

    基础知识

    • 什么是分布式文件系统

    •  分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定 直接连接在本地节点上,而是通过计算机网络与节点相连

    •  分布式文件系统的设计基于客户机/服务器模式

    • 常用分布式文件系统

    •  Lustre

    •  Hadoop

    •  FastDFS

    •  Ceph

    •  GlusterFS

    • 什么是ceph

    •  ceph是一个分布式文件系统

    •  具有高扩展、高可用、高性能的特点

    •  ceph可以提供对象存储、块存储、文件系统存储

    •  ceph可以提供PB级别的存储空间(PBàTBàGB)

    –  1024G*1024G=1048576G

    •  软件定义存储(Software Defined Storage)作为存储行业的一大发展趋势,已经越来越     受到市场的认

    • ceph组件

    OSDs:存储设备,ceph对象存储设备,它是唯一的真正存储数据的设备,只由OSD存储设备,它是一个进程,一般来说OSD关联到集群中的每块物理硬盘,所以集群中由多少块硬盘就有多少个OSD进程

    MonitorsMON):集群监控组件,ceph通过一系列的映射表来监控集群状态,一般来说MON是奇数个

    MDSs:存放文件系统的元数据服务器(对象存储和块存储不需要该组件),元数据是描述数据的数据,MDScephFS维护文件系统结构,存储元数据

    Clientceph客户端,需要单独安装组件

    Ceph块存储

    • 什么是块存储

    单机块设备:光盘,磁盘

    分布式块存储:CephCinder

    Ceph块设备也叫做RADOS块设备:RADOS block device:RBD

    RBD驱动已经很好的集成在了Linux内核中

    RBD提供了企业功能,如快照、COW克隆等等

    RBD还支持内存缓存,从而能够大大提高性能

    Linux内核可用直接访问Ceph块存储

    KVM可用借助于librbd访问

    实验环境准备

    实验拓扑图

    •  1台客户端虚拟机

    •  3台存储集群虚拟机

                                  

    部署ceph集群

    一,准备6台虚拟机

    1.初始化

    node1.tedu.cn  192.168.4.11

    node2.tedu.cn  192.168.4.12

    node3.tedu.cn  192.168.4.13

    node4.tedu.cn  192.168.4.14

    node5.tedu.cn  192.168.4.15

    client.tedu.cn  192.168.4.10

    2.ceph光盘挂载到物理主机,以便将其作为yum

    2.1创建工作目录

    client上配置yum

    [root@client ~]# yum  -y install  httpd

    [root@client ~]# systemctl  restart  httpd

    [root@client ~]# systemctl  enable  httpd

    [root@client ~]# mkdir  /var/www/html/ceph

    2.2永久将光盘挂载到工作目录

    [root@room9pc01~]#scp -r ceph 挂载镜像目录/*   192.168.4.10:/var/www/html/ceph

    [root@room9pc01~]#scp -r cluster相关软件 /ceph/rhcs2.0-rhosp9-20161113-x86_64.iso  192.168.4.10:/root

    [root@client~]#vim /etc/fstab/root/rhcs2.0-rhosp9-20161113-x86_64.iso    /var/www/html/ceph  iso9660   defaults  0 0

    [root@client ~]# mount  -a

    再修改clientyum源,本地http://var/www/html/ceph

    2.3 yum源需要系统和ceph光盘两个源,注意:ceph光盘/var/www/html/ceph/rhceph-2.0-rhel-7-x86_64/目录4.10作为客户端yum

    [root@node1 ~]# vim  /etc/yum.repos.d/dvd.repo

    [dvd]

    name=123

    baseurl=http://192.168.4.254/rh7dvd  真机yum

    enable=1

    gpgcheck=0

    以下全部是4.10作为客户端yum

    [mon]

    name=mon

    baseurl=http://192.168.4.10/ceph/rhceph-2.0-rhel-7-x86_64/MON

    enable=1

    gpgcheck=0

    [osd]

    name=osd

    baseurl=http://192.168.4.10/ceph/rhceph-2.0-rhel-7-x86_64/OSD

    enable=1

    gpgcheck=0

    [Tools]

    name=Tools

    baseurl=http://192.168.4.10/ceph/rhceph-2.0-rhel-7-x86_64/Tools

    enable=1

    gpgcheck=0

    3.脚本拷贝yum

    [root@node1 ~]# for  i  in  {10..15}

    > do

    > scp  /etc/yum.repos.d/dvd.repo  192.168.4.$i:/etc/yum.repos.d/

    > done

    4.node1作为管理节点,为其生成SSH密钥,可以免密登录其他节点

    [root@node1 ~]# ssh-keygen  -f  /root/.ssh/id_rsa  -N  ''

    [root@node1 ~]# for  i  in {10..15}

    > do

    > ssh-copy-id  192.168.4.$i

    > done

    5.通过hosts文件配置名称解析只写进本机的循环

    [root@node1 ~]# for  i  in  {1..5}

    > do

    > echo -e  "192.168.4.1$i node$i.tedu.cn node$i"  >>  /etc/hosts

    > done

    [root@node1 ~]#echo -e "192.168.4.10 client.tedu.cn client" >>  /etc/hosts

    [root@node1 ~]# for  i  in  {10..15}

    > do

    > scp  /etc/hosts  192.168.4.$i:/etc/

    > done

    配置192.168.4.10NTP服务器

    1).安装时间软件

    [root@client ~]# yum  -y   install   chrony

    [root@client ~]# vim  /etc/chrony.conf

    #server 0.rhel.pool.ntp.org iburst

    #server 1.rhel.pool.ntp.org iburst

    #server 2.rhel.pool.ntp.org iburst

    server 3.rhel.pool.ntp.org iburst

    26 allow 192.168.4.0/24

    29 local stratum 10  第几层的时间服务器

    2).重起服务

    [root@client ~]# systemctl   restart   chronyd

    3).配置node1--node5 NTP客户端

    [root@client ~]# for  i  in  {1..5}

    > do

    > ssh  node$i  yum  -y  install  chrony

    > done

    4).配置文件

    [root@node1 ~]# vim  /etc/chrony.conf

    server 192.168.4.10 iburst    //其他三行注释,只留此行

    [root@node1 ~]# systemctl   restart   chronyd

    [root@node1 ~]# for  i  in  {2..5}

    > do

    > scp  /etc/chrony.conf   node$i:/etc/

    > done

    [root@node1 ~]# for  i  in  {2..5}

    > do

    > ssh  node$i  systemctl  restart  chronyd

    > done

    5).node1/node2/node3为共享存储提供硬盘,每个节点加三个硬盘,每个硬盘大小

    10GB

    •  物理机上为每个虚拟机创建3个磁盘

    [root@root9pc01~]#cd /var/lib/libvirt/images

    [root@root9pc01~]#qemu-img create -f qcow2 node1-vdb.vol 10G

    [root@root9pc01~]#qemu-img create -f qcow2 node1-vdc.vol 10G

    [root@root9pc01~]#qemu-img create -f qcow2 node1-vdd.vol 10G

    [root@root9pc01~]#qemu-img create -f qcow2 node2-vdb.vol 10G

    [root@root9pc01~]#qemu-img create -f qcow2 node2-vdc.vol 10G

    [root@root9pc01~]#qemu-img create -f qcow2 node2-vdd.vol 10G

    [root@root9pc01~]#qemu-img create -f qcow2 node3-vdb.vol 10G

    [root@root9pc01~]#qemu-img create -f qcow2 node3-vdc.vol 10G

    [root@root9pc01~]#qemu-img create -f qcow2 node3-vdd.vol 10G

    •  在图形环境中为虚拟机添加磁盘

    [root@root9pc01~]#virt-manager

    6).node1上安装ceph管理软件ceph-deploy

    [root@node1 ~]# yum  -y  install   ceph-deploy准备存储磁盘

    7).创建ceph-deploy的工作目录

    [root@node1 ~]# mkdir  ceph-cluster

    [root@node1 ~]# cd  ceph-cluster

    8).生成管理集群的配置文件和密钥文件

    [root@node1 ceph-cluster]# ceph-deploy  new  node{1,2,3}

    [root@node1 ceph-cluster]# ls

    ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring

    9).为所有节点安装ceph软件包

    [root@node1 ceph-cluster]# ceph-deploy  install  node{1,2,3}

    10).初始化mon服务(主机名解析必须对)

    [root@node1 ceph-cluster]# ceph-deploy  mon  create-initial

    这里没有指定主机,是因为第一步创建的配置文件中已经有了,所以要求主机名解析必须对,否则连接不到对应的主机

    11).为所有节点准备磁盘分区,用来做存储服务器的日志盘

    [root@node1 ceph-cluster]# for  i  in  {1..3}

    > do

    > ssh  node$i  parted  /dev/vdb  mklabel  gpt

    > ssh  node$i  parted  /dev/vdb  mkpart  primary  1M  50%

    > ssh  node$i  parted  /dev/vdb  mkpart  primary  50%  100%

    > done

    [root@node1 ceph-cluster]# for  i  in  {1..3}

    > do

    > ssh  node$i  lsblk

    > done

    [root@node1 ceph-cluster]# for  i  in  {1..3} 属主属组必须是ceph

    > do

    > ssh  node$i  chown   ceph.ceph   /dev/vdb1

    > ssh  node$i  chown   ceph.ceph   /dev/vdb2

    > done

    [root@node1 ceph-cluster]# for  i  in  {1..3}

    > do

    > ssh  node$i   ls  -lh  /dev/vdb?

    > done

    12).查看磁盘

    [root@node1 ceph-cluster]# ls  -ld  /dev/vdb?

    brw-rw----. 1 ceph ceph 252, 17 5月  21 14:54 /dev/vdb1

    brw-rw----. 1 ceph ceph 252, 18 5月  21 14:54 /dev/vdb2

    这两个分区用来做存储服务器的日志journal

    13).配置OSD,初始化磁盘

    [root@node1 ceph-cluster]# for  i   in  {1..3}

    > do

    > ceph-deploy   disk zap  node$i:vdc  node$i:vdd

    > done

    14).创建OSD存储空间,在node1上做

    [root@node1 ceph-cluster]# for  i  in  {1..3}

    > do

    > ceph-deploy  osd  create  node$i:vdc:/dev/vdb1  node$i:vdd:/dev/vdb2

    > done

    15).查看ceph状态

    [root@node1 ceph-cluster]# ceph  -s

    cluster 7e157181-1c02-4607-92f4-38ee9e36ca54

         health HEALTH_OK

    如果正常的话,可以看到health  HEALTH_OK

    1.如果是HEALTH_ERR,可以重启服务

    [root@node1 ceph-cluster]# for  i  in  {1..3}

    > do

    > ssh  node$i  systemctl  restart  ceph*.service  ceph*.target

    > done

    在所有节点,或仅在失败的节点重启服务

    2.可能出现的错误

    osd create创建OSD存储空间,如提示run  'gatherkeys

    [root@node1 ~]#  ceph-deploy  gatherkeys  node1  node2  node3

    排错:如果ceph节点关机重启,/dev/vdb1,/dev/vdb2属主属组又变成了rootdiskceph-osd*服务就起不来,可以先chown  cephceph  /dev/vdb1chown  cephceph  /dev/vdb2,然后systemctl  start  ceph-osd*,将有报错信息,最后一行提示先执行systemctl  reset  XXX,再执行systemctl  start  ceph-osd*,

    重启系统,还希望vdb1/vdb2属主是ceph,则

    [root@node1 ceph-cluster]# vim   /etc/udev/rules.d/10-chowndis.rules

    ACTION=="add",KERNEL=="vdb[12]",OWNER="ceph",GROUP="ceph"

     


    部署Ceph集群

    • 使用ceph块设备

    1.块设备存在于存储池中,默认ceph集群已有有一个名为rdb

    [root@node1 ceph-cluster]#  ceph  osd  lspools

    0 rbd,

    2.在默认池里创建一个名为demo-image的镜像,镜像可以当成远程主机的硬盘

    [root@node1 ceph-cluster]# rbd  create  demo-image  --image-feature  layering --size  10G

    3.指定在rdb池中创建一个名为image镜像

    [root@node1 ceph-cluster]# rbd create  rbd/image --image-feature  layering --size  10G

    4.查看镜像信息

    [root@node1 ceph-cluster]# rbd  ls

    demo-image

    image

    [root@node1 ceph-cluster]# rbd  info  image

    rbd image 'image':

    size 10240 MB in 2560 objects

    order 22 (4096 kB objects)

    block_name_prefix: rbd_data.16fa0238e1f29

    format: 2

    features: layering

    flags:

    5.缩减/增容镜像

    [root@node1 ceph-cluster]# rbd  resize  --size  7G  image --allow-shrink  缩小镜像

    [root@node1 ceph-cluster]# rbd  info  image

    rbd image 'image':

    size 7168 MB in 1792 objects

    order 22 (4096 kB objects)

    block_name_prefix: rbd_data.16fa0238e1f29

    format: 2

    features: layering

    flags:

    [root@node1 ceph-cluster]# rbd  resize  --size  15G image  增大镜像

    [root@node1 ceph-cluster]# rbd  info  image

    rbd image 'image':

    size 15360 MB in 3840 objects

    order 22 (4096 kB objects)

    block_name_prefix: rbd_data.16fa0238e1f29

    format: 2

    features: layering

    flags:

    6.如果需要使用ceph的块存储,那么首先要把ceph镜像映射到本地

    [root@node1 ceph-cluster]# lsblk    //此时还没有ceph存储

    [root@node1 ceph-cluster]# rbd map demo-image

    /dev/rbd0

    [root@node1 ceph-cluster]# lsblk    //此时多了一个10GB/dev/rbd0

    rbd0          251:0    0   10G  0 disk

    [root@node1 ceph-cluster]# mkfs.xfs /dev/rbd0

    [root@node1 ceph-cluster]# mount /dev/rbd0 /mnt/

    [root@node1 ceph-cluster]# df -h /mnt/

    文件系统          容量    已用     可用    已用% 挂载点

    /dev/rbd0          10G      33M      10G       1%      /mnt

    [root@node1 ceph-cluster]# cp /etc/hosts /mnt/   //此步骤只是测试共享存储可用

    [root@node1 ceph-cluster]# cat /mnt/hosts

    配置ceph客户端

    1、安装软件包

    [root@client ~]# yum install -y ceph-common

    2、为了让客户端能够找到集群,需要集群配置文件

    [root@node1 ceph-cluster]# scp /etc/ceph/ceph.conf  192.168.4.10:/etc/ceph/

    3、客户端访问集群,需要授权,可以为客户端创建用户,也可以使用默认创建的admin帐户

    [root@node1ceph-cluster]#scp /etc/ceph/ceph.client.admin.keyring 192.168.4.10:/etc/ceph/

    4、使用ceph块设备

    [root@client ~]# rbd ls

    demo-image

    Image

    [root@client ~]# rbd map image

    /dev/rbd0

    [root@client ceph]# lsblk

    loop0           7:0    0 935.4M  0 loop /var/www/html/ceph

    [root@client ~]# mkfs.xfs  /dev/rbd0

    [root@client ~]# rbd showmapped    查看ceph块设备信息

    id pool image snap device    

    0  rbd  image -    /dev/rbd0

    [root@client ~]# mount /dev/rbd0 /mnt/

    [root@client ~]# echo 'Hello ceph' > /mnt/mytest.txt  # 只是测试查看ceph存储的大小

    [root@node1 ceph-cluster]# rados df

    管理快照

    快照:某一状态点的镜像,将来有任何误操作,都可以通过还原快照来恢复

    1、查看image的快照

    [root@client ~]# rbd snap ls image

    2、为image创建名为image-snap1的快照

    [root@client ~]# rbd snap create image --snap image-snap1

    [root@client ~]# rbd snap ls image

    SNAPID  NAME           SIZE

      4      image-snap1    15360 MB

    快照使用COW技术,对大数据快照速度会很快!

    3、模拟误删除操作

    1)删除文件

    [root@client ~]# cat /mnt/mytest.txt

    Hello ceph

    [root@client ~]# rm -f /mnt/mytest.txt

    2)卸载存储并还原快照

    [root@client ~]# umount /mnt/

    [root@client ~]# rbd snap rollback image --snap image-snap1

    3)挂载存储,检查数据是否恢复

    [root@client ~]# mount /dev/rbd0 /mnt/

    [root@client ~]# ll /mnt/

    [root@client ~]# cat /mnt/mytest.txt

    克隆镜像

    如果想从快照恢复出来一个新的镜像,则可以使用克隆

    注意,克隆前,需要对快照进行<保护>操作,被保护的快照无法删除,取消保护(unprotect)

    1、通过快照进行镜像克隆,首先保护快照

    [root@client ~]# rbd snap protect image --snap image-snap1

    2、创建名为image-clone的克隆镜像

    [root@client ~]# rbd clone image --snap image-snap1 image-clone --image-feature layering

    3、查看克隆镜像与父镜像关系

    [root@client ~]# rbd  info image-clone

    rbd image 'image-clone':

    size 15360 MB in 3840 objects

    order 22 (4096 kB objects)

    block_name_prefix: rbd_data.1218d238e1f29

    format: 2

    features: layering

    flags:

    parent: rbd/image@image-snap1

    overlap: 15360 MB

    4、合并克隆镜像,使之成为一个整体

    克隆镜像很多数据都来自于快照链

    如果希望克隆镜像可以独立工作,就需要将父快照中的数据,全部拷贝一份,但比较耗时!!!

    [root@client ~]# rbd flatten image-clone

    [root@client ~]# rbd  info image-clone   已经没有父镜像了

    rbd image 'image-clone':

    size 15360 MB in 3840 objects

    order 22 (4096 kB objects)

    block_name_prefix: rbd_data.1218d238e1f29

    format: 2

    features: layering

    flags:

    删除操作

    1、取消RBD映射

    [root@client ~]# umount /mnt/

    [root@client ~]# rbd unmap /dev/rbd/rbd/image

    [root@client ~]# lsblk   没有rbd0

    NAME          MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT

    sr0            11:0    1  1024M  0 rom  

    vda           252:0    0    20G  0 disk

    ├─vda1        252:1    0     1G  0 part /boot

    └─vda2        252:2    0    19G  0 part

      ├─rhel-root 253:0    0    17G  0 lvm  /

      └─rhel-swap 253:1    0     2G  0 lvm  [SWAP]

    loop0           7:0    0 935.4M  0 loop /var/www/html/ceph

    2、删除快照

    [root@client ~]# rbd snap unprotect image --snap image-snap1  取消保护

    [root@client ~]# rbd snap rm image --snap image-snap1

    3、删除镜像

    [root@client ~]# rbd list

    demo-image

    image

    image-clone

    [root@client ~]# rbd rm image

    [root@node1 ceph-cluster]# rbd list

    demo-image

    image-clone

  • 相关阅读:
    词频统计
    第二周每周例行报告
    事务管理(ACID)
    Redis
    jar包和war包的区别
    CSS实现Loading加载动画
    如何实现“返回顶部”的页面效果
    PHP页面跳转-常见方法
    局域网络调试方式
    Thinkphp 统计数据库字段总值
  • 原文地址:https://www.cnblogs.com/qingbai/p/11951200.html
Copyright © 2011-2022 走看看