任何普通的linux主机都可以充当ceph客户机,客户机通过网络与ceph存储集群交互以存储或检索用户数据。Ceph RBD支持已经添加到linux主线内核中,从2.6.34以及以后版本开始。

===================在管理端192.168.20.181操作================================

su - ceph-admin

cd my-cluster

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

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

===================在客户端192.168.20.184操作================================

修改hosts文件:

cat /etc/hosts

192.168.20.181 c720181

192.168.20.182 c720182

192.168.20.183 c720183

192.168.20.184 c720184

创建存放密钥和配置文件目录:

mkdir -p /etc/ceph

===================在管理端192.168.20.181操作================================

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

scp ceph.client.rbd.keyring /etc/ceph/ceph.conf root@192.168.20.184:/etc/ceph/

===================在客户端192.168.20.184操作================================

检查客户端是否符合块设备环境要求

[root@c720184 ~]# uname -r

3.10.0-957.el7.x86_64                 #高于2.6.34就可以

[root@c720184 ~]# modprobe rbd

[root@c720184 ~]# echo $?

0                                            #说明执行成功

安装ceph客户端

yum -y install ceph   (如果没有配置ceph.repo 和 epel.repo 要先配置,否则安装不成功)

连接ceph集群:

ceph -s --name client.rbd

(1)集群创建存储池

默认创建块设备,会直接创建在rbd池中,但使用ceph-deploy安装(L版ceph)后,该rbd池并没有创建

#创建池

===================在管理端192.168.20.181操作================================

[ceph-admin@c720181 my-cluster]$ ceph osd lspools   #查看集群池存储池

[ceph-admin@c720181 my-cluster]$ ceph osd pool create rbd 128   #128为place group 数量

pool 'rbd' created

[ceph-admin@c720181 my-cluster]$ ceph osd lspools

1 rbd,

(2)客户端创建块设备

[root@c720184 ~]# rbd create rbd1 --size 10240 --name client.rbd

[root@c720184 ~]# rbd ls -p rbd --name client.rbd

rbd1

[root@c720184 ~]# rbd list --name client.rbd

rbd1

[root@c720184 ~]# rbd --image rbd1 info --name client.rbd

rbd image 'rbd1':

size 10GiB in 2560 objects

order 22 (4MiB objects)

block_name_prefix: rbd_data.106b6b8b4567

format: 2

features: layering, exclusive-lock, object-map, fast-diff, deep-flatten

flags:

create_timestamp: Sun Aug 18 18:56:02 2019

(3)客户端映射块设备

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

直接映射会报如下错误,是因为创建的块设备属性对于该内核版本不支持。

features: layering, exclusive-lock, object-map, fast-diff, deep-flatten

解决方式有如下三种:

a.动态禁用 (建议)

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

b.创建RBD块设备时,只启用分层特性

rbd create rbd1 --size 10240 --image-feature layering --name client.rbd

c.ceph配置文件中禁用

rbd_default_features = 1

比如这里使用动态禁用:(截图里面少了--name client.rbd,不然会报错)

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

重新映射块设备:

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

(4)创建文件系统并挂载

[root@c720184 ~]# fdisk -l /dev/rbd0

Disk /dev/rbd0: 10.7 GB, 10737418240 bytes, 20971520 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 4194304 bytes / 4194304 bytes

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

meta-data=/dev/rbd0              isize=512    agcount=16, agsize=163840 blks

=                       sectsz=512   attr=2, projid32bit=1

=                       crc=1        finobt=0, sparse=0

data     =                       bsize=4096   blocks=2621440, imaxpct=25

=                       sunit=1024   swidth=1024 blks

naming   =version 2              bsize=4096   ascii-ci=0 ftype=1

log      =internal log           bsize=4096   blocks=2560, version=2

=                       sectsz=512   sunit=8 blks, lazy-count=1

realtime =none                   extsz=4096   blocks=0, rtextents=0

[root@c720184 ~]# mkdir /mnt/ceph-disk1

[root@c720184 ~]# mount /dev/rbd0 /mnt/ceph-disk1

[root@c720184 ~]# df -h

Filesystem               Size  Used Avail Use% Mounted on

/dev/mapper/centos-root   17G  1.5G   16G   9% /

devtmpfs                 908M     0  908M   0% /dev

tmpfs                    920M     0  920M   0% /dev/shm

tmpfs                    920M  8.5M  911M   1% /run

tmpfs                    920M     0  920M   0% /sys/fs/cgroup

/dev/sda1               1014M  145M  870M  15% /boot

tmpfs                    184M     0  184M   0% /run/user/0

/dev/rbd0                 10G   33M   10G   1% /mnt/ceph-disk1

(5)写入数据测试

[root@c720184 ~]# dd if=/dev/zero of=/mnt/ceph-disk1/file1 count=100 bs=1M

100+0 records in

100+0 records out

104857600 bytes (105 MB) copied, 1.04015 s, 101 MB/s

[root@c720184 ~]# ll -h /mnt/ceph-disk1/

total 100M

-rw-r--r--. 1 root root 100M Aug 18 19:11 file1

(6)做成服务,设置开机自动挂载

wget -O /usr/local/bin/rbd-mount https://raw.githubusercontent.com/aishangwei/ceph-demo/master/client/rbd-mount

#注意需要修改里面的配置参数

#!/bin/bash

# Pool name where block device image is stored
export poolname=rbd

# Disk image name
export rbdimage=rbd1

# Mounted Directory
export mountpoint=/mnt/ceph-disk1

# Image mount/unmount and pool are passed from the systemd service as arguments
# Are we are mounting or unmounting
if [ "$1" == "m" ]; then
   modprobe rbd
   rbd feature disable $rbdimage object-map fast-diff deep-flatten
   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/$rbdimage
fi

#添加可执行权限

chmod +x /usr/local/bin/rbd-mount

wget -O /etc/systemd/system/rbd-mount.service https://raw.githubusercontent.com/aishangwei/ceph-demo/master/client/rbd-mount.service

[root@c720184 ~]# systemctl daemon-reload

[root@c720184 ~]# systemctl enable rbd-mount.service

测试重启是否自动挂载:

reboot -f

df -h

这里为了节省时间,没有重启,而是先取消挂载,启动挂载服务看是否挂载上。

[root@c720184 ~]# umount /mnt/ceph-disk1/

[root@c720184 ~]# systemctl start rbd-mount.service

[root@client ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/cl_-root   50G  1.8G   49G   4% /
devtmpfs              910M     0  910M   0% /dev
tmpfs                 920M     0  920M   0% /dev/shm
tmpfs                 920M   17M  904M   2% /run
tmpfs                 920M     0  920M   0% /sys/fs/cgroup
/dev/sda1            1014M  184M  831M  19% /boot
/dev/mapper/cl_-home  196G   33M  195G   1% /home
tmpfs                 184M     0  184M   0% /run/user/0
ceph-fuse              54G  1.0G   53G   2% /mnt/cephfs
c720182:/              54G  1.0G   53G   2% /mnt/cephnfs
/dev/rbd1              20G   33M   20G   1% /mnt/ceph-disk1

Ceph 块存储的更多相关文章

  1. 二十八. Ceph概述 部署Ceph集群 Ceph块存储

    client   :192.168.4.10 node1 :192.168.4.11 ndoe2 :192.168.4.12 node3 :192.168.4.13   1.实验环境 准备四台KVM虚 ...

  2. Ceph块存储介绍

    1. 块存储是什么 块存储简称RBD(RADOS Block Device),是一种有序的字节序块,也是在Ceph三大存储类型中最为常用的存储方式 ,Ceph的块存储是基于RADOS的,因此它也借助R ...

  3. ceph块存储场景

    1.创建rbd使用的存储池. admin节点需要安装ceph才能使用该命令,如果没有,也可以切换到ceph-node1节点去操作. [cephfsd@ceph-admin ceph]$ ceph os ...

  4. Ceph 块存储 创建的image 映射成块设备

    将创建的volume1映射成块设备 [root@mysql-server ceph]# rbd map rbd_pool/volume1 rbd: sysfs write failed RBD ima ...

  5. ceph rbd块存储挂载及文件存储建立

    一.rbd块存储挂载 1 创建一个OSD pool # ceph osd pool create rbd1 128 查询存储空间使用 # ceph df GLOBAL: SIZE AVAIL RAW ...

  6. 我们为什么选择Ceph来建立块存储

    我们为什么选择Ceph来建立块存储?国内知名黑客组织东方联盟是这样回答的,卷管理器的大小和增长受到管理程序的驱动器补充的限制,与其他Droplet共享.一旦Droplet被摧毁,储存就会被释放.术语“ ...

  7. 3.Ceph 基础篇 - RBD 块存储使用

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485253&idx=1&sn=24d9b06a ...

  8. Ceph分层存储分析

    最近弄Ceph集群考虑要不要加入分层存储 因此花了点时间研究了下 1,首先肯定要弄清Ceph分层存储的结构 ,结构图大概就是下图所示 缓存层(A cache tier)为Ceph客户端提供更好的I/O ...

  9. 探索 OpenStack 之(9):深入块存储服务Cinder (功能篇)

    继研究了Neutron之后,继续Nova的外围研究之旅.本站是研究块存储服务Cinder. 0.验证环境 环境包括: 1.一个controller节点,运行nova-api, nova-schedul ...

随机推荐

  1. MySQL数据库之MyISAM与InnoDB的区别

    MySQL数据库之MyISAM与InnoDB的区别 从以下几个方面: 1.存储结构 每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型. .frm文件存储表定义 ...

  2. C++中对C的扩展学习新增内容———面向对象(封装)

    面向对象(封装) 1.对封装的理解: 1.封装就是把变量和函数放在一起统一表示某一个食物. class 2.给类内部的成员增加访问控制权限. 3.封装的语法就是class定义一个类. 2.给对象成员增 ...

  3. Java :一文掌握 Lambda 表达式

    本文将介绍 Java 8 新增的 Lambda 表达式,包括 Lambda 表达式的常见用法以及方法引用的用法,并对 Lambda 表达式的原理进行分析,最后对 Lambda 表达式的优缺点进行一个总 ...

  4. 标准库bufio个人详解

    本文是我有通俗的语言写的如果有误请指出. 先看bufio官方文档 https://studygolang.com/pkgdoc文档地址 主要分三部分Reader.Writer.Scanner 分别是读 ...

  5. java的回调和C#的委托

    曾经有人对我说java的回调很巧妙. 今天我自己看了一下,回调的关键就是一个接口的事情. 也许是因为用了一定的手法,一开始不好懂吧,所以看懂了会感觉巧妙. 但是我心里的想法却是,真啰嗦! 回调的实例 ...

  6. 探索 IPv6 网络

    目录 0x00 前言 0x01 探索 服务器配置 IPv6 地址 服务器部署网络代理 客户端配置网络代理 测试访问 IPv6 地址 给博客添加 IPv6 地址 0x00 前言 IPv4 地址枯竭的事情 ...

  7. scikit-learn_cookbook1: 高性能机器学习-NumPy

    源码下载 在本章主要内容: NumPy基础知识 加载iris数据集 查看iris数据集 用pandas查看iris数据集 用NumPy和matplotlib绘图 最小机器学习配方 - SVM分类 介绍 ...

  8. T1110-计算线段长度

    原题链接: https://nanti.jisuanke.com/t/T1010 题目简述: 已知线段的两个端点的坐标A(Xa,Ya),B(Xb,Yb)A(X_a,Y_a),B(X_b,Y_b)A(X ...

  9. Spring源码分析之AOP

    1.AOP简介 AOP即面向切面编程(Aspect Oriented Programming),通过预编译方式及运行期动态代理实现程序功能的统一维护的一种技术.使用aop对业务逻辑的各个部分进行隔离, ...

  10. python字符串的特性及相关应用

    一.字符串定义 字符串是 Python 中最常用的数据类型.用单引号(' '),双引号(" ")或者三引号(''' ''')括起来的数据称为字符串(其中,使用三引号的字符串可以横跨 ...