zoukankan      html  css  js  c++  java
  • ceph 块存储

    次文档是和上一篇ceph-deploy部署ceph文档链接写的,环境都是一个环境

    1       Ceph 客户端配置

    1.1   安装ceph包

    1.1.1  检查内核是否支撑RBC(10.0.23.130 用于安装客户端)

     

    1.1.2  安装ceph客户端

    Cat /etc/yum.repos.d/ceph.repo

    [ceph]

    name=ceph

    baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/x86_64/

    gpgcheck=0

    priority=0

    [ceph-noarch]

    name=cephnoarch

    baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch/

    gpgcheck=0

    priority=0

    [ceph-source]

    name=Ceph source packages

    baseurl=https://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS

    enabled=0

    gpgcheck=1

    type=rpm-md

    gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc

    priority=1

    [root@k8s-master ~]# yum install -y ceph  #装ceph为的是装rbd命令

    1.1.3  创建用户(在ceph服务端创建10.0.23.133)

    1.1.3.1        创建ceph块客户端用户名和认证密钥

    [cephadmin@ceph-1 my-cluster]$ ceph auth get-or-create client.rbd mon 'allow r' osd 'allow class-read object_prefix rbd_children,allow rwx pool=rbd'|tee ./ceph.client.rbd.keyring

     

    1.1.4  客户端配置

    1.1.4.1.1       拷贝密钥文件和配置文件到客户端

    [cephadmin@ceph-1 my-cluster]$ scp ceph.client.rbd.keyring /etc/ceph/ceph.conf  root@10.0.23.130:/etc/ceph

    到客户端10.0.23.130上查看:

     

    在客户端执行ceph –s报错需要执行用户名

    [root@k8s-master ~]# ceph -s --name client.rbd

     

    1.2   创建块设备及客户端映射

    1.2.1  创建块设备(ceph server上操作)

    默认创建块设备,会直接创建在rbd  池中,但使用deploy安装后,该rbd池并没有创建。

     

    1.2.2  创建块设备默认池(ceph server上操作)

      $ ceph osd lspools                      //查看集群存储池

    $ ceph osd pool create rbd 64 #创建 名为rbd的池 指定pg为64

     

    确定pg_num  取值是强制性的,因为不能自动计算。下面是几个常用的值(总的pg):

    •       少于5个OSD 时可把pg_num设置为 128

    •       OSD 数量在5 到10个时,可把   pg_num   设置为512

    •       OSD 数量在10到   50个时,可把pg_num 设置为4096

    •       OSD 数量大于50时,你得理解权衡方法、以及如何自己计算pg_num 取值

    1.2.3  创建块设备(客户端操作)

    可以在服务端创建也可以在客户端创建,已经给客户端权限,我这里在客户端操作

    rbd create rbd1 --size 2048 --name client.rbd #创建大小3G的 rbd1块设备

     

    查看创建的块设备

    rbd ls --name client.rbd

     

    也可以指定池查看

    rbd ls -p rbd -n client.rbd

     

    列表形式查看

    rbd list -n client.rbd

     

    查看块设备的详细信息

    rbd --image rbd1 info --name client.rbd

     

    1.2.4  映射块设备(客户端操作)

    1.2.4.1        映射介绍

    映射到客户端,会报错

    rbd map --image rbd1 --name client.rbd

     

    • layering:  分层支持
    • exclusive-lock: 排它锁定支持
    • object-map:     对象映射支持(需要排它锁定(exclusive-lock))
    • deep-flatten:   快照扁平化支持(snapshot     flatten      support)
    • fast-diff:   快速差异计算(需要        object-map)

         使用krbd(内核rbd)的客户端进行快速diff计算(需要对象映射),我们将无法在CentOS内核3.10上 映射块设备映像,因为该内核不支持对象映射(object-map)、深平(deep-flatten)和快速diff(fastdiff)(在内核4.9中引入了支持)。为了解决这个问题,我们将禁用不支持的特性,有几个选项可以 做到这一点

    禁用的三种方法:

    ²  动态禁用

    rbd feature  disable rbd1 exclusive-lock object-map deep-flatten fast-diff  --name client.rbd

    ²  创建RBD镜像时,之启用分层特性

    Rbd create rbd1 –size 2048 –image-feature Layering –name client.rbd

    ²  Ceph配置文件中禁用

    Rbd_default_reatures = 1

    因我们已经创建了池 rbd1 所以使用动态禁用

    1.2.4.2        动态禁用块设备的特性

    [root@k8s-master ~]# rbd feature  disable rbd1 exclusive-lock object-map deep-flatten fast-diff --name client.rbd

    再次映射,看到映射的设备

    [root@k8s-master ~]# rbd map --image rbd1 --name client.rbd

     

     查看映射关系

    [root@k8s-master ~]# rbd showmapped --name client.rbd

     

     1.2.4.3        创建文件系统并挂载

    格式化:

    [root@k8s-master ~]# mkfs.xfs /dev/rbd0

     

    创建挂载点:

    [root@k8s-master ~]# mkdir  /ceph-dsik1

    Mount挂载:

    [root@k8s-master ~]# mkdir  /ceph-dsik1

    [root@k8s-master ~]# mount /dev/rbd0 /ceph-dsik1

     

    写数据测试

    [root@k8s-master ~]# dd if=/dev/zero of=/ceph-dsik1/testfiel count=100 bs=1M

     

    1.2.4.4        做成服务,开机自动挂载

    vim /usr/local/bin/rbd-mount

    #!/bin/bash

    #池名称存储块设备映射的位置

    #!/bin/bash

    #池名称存储块设备映射的位置

    export poolname=rbd

    #磁盘映射名称

    export rbdimage=rbd1

    #mount directory

    export mountpoint=/ceph-dsik1

    #image mount  / umount 和pool作为参数从systemd服务传递

    if [ "$1" == "m" ];then

      modprobe rbd

      rbd feature  disable $rbdimage  object-map deep-flatten fast-diff

      rbd map  $rbdimage --id  rbd --keyring /etc/ceph/ceph.client.rbd.keyring

      mkdir -p $mountpoint

      mount /dev/rbd/$poolname/$rbdimage $mountpoint

    fi

    if [ "$1" == "u" ]; then

      umount $mountpoint

      rbd unmap /dev/rbd/$poolname/$rbdname

    fi

    ~   

    [root@k8s-master ceph-dsik1]# chmod  +x /usr/local/bin/rbd-mount

    配置服务脚本

    [root@k8s-master ceph-dsik1]# vim /usr/lib/systemd/system/rbd-mount.service

    [Unit]

    Description=RADOS block device mapping for $rbdimage in pool $poolname

    Conflicts=shutdown.target

    Wants=network-online.target

    After=NetworkManager-wait-online.service

    [Service]

    Type=oneshot

    RemainAfterExit=yes

    ExecStart=/usr/local/bin/rdb-mount m

    ExecStop=/usr/local/bin/rdb-mount u

    [Install]

    [root@k8s-master ceph-dsik1]# systemctl daemon-reload

    [root@k8s-master ceph-dsik1]# systemctl enable rdb-mount.service

    注意: 先测试一下服务是否可用,不要冒然的重启主机测试

  • 相关阅读:
    Session丢失问题解决方案
    SQL 将txt文件导入sql数据库
    Ajax的应用实例解析
    ViewState与Session
    .net动态创建DataTable
    TSQL查询进阶数据集之间的运算
    【朝夕Net社区技术专刊】Core3.1 WebApi集群实战专题WebApi环境搭建运行发布部署篇
    经典SQL语句大全
    “存储过程”的定义及优点
    搜索关键词
  • 原文地址:https://www.cnblogs.com/houchaoying/p/14440762.html
Copyright © 2011-2022 走看看