ceph部署完全手册

ceph部署完全手册

从零开始,一步一步搭建一个ceph集群。介绍并解释了搭建过程中的所有细节。
转载请注明出处:http://xiaqunfeng.cc/2017/07/17/ceph%E9%83%A8%E7%BD%B2%E5%AE%8C%E5%85%A8%E6%89%8B%E5%86%8C/
更多相关原创文章详见个人博客:夏天的风

  • ceph部署完全手册
    • 前言
    • 准备工作
      • 1 硬件资源
      • 2 设置ssh免密登录仅主控节点
      • 3 防火墙及安全设置所有节点
      • 4 添加ceph用户并设置权限所有节点
      • 5 安装ntp服务所有节点
      • 6 添加ceph安装源所有节点
      • 7 安装ceph-deploy部署工具仅主控节点
    • 启动ceph-mon
      • 1 安装ceph
      • 2 创建部署的目录目录内会生成ceph的配置文件
      • 3 配置新节点
      • 4 安装该节点
      • 5 配置并启动ceph-mon
    • 添加ceph-osd节点
      • 1 安装ceph到osd节点
      • 2 设置并启动osd
    • 设置ceph的rbd块存储设备
      • 1 建立主控机器到rbd所在设备的ssh免密登录关系
      • 2 安装ceph环境并授予权限
      • 3 创建ceph块设备
      • 4 映射块设备并初始化
      • 5 测试块设备

前言

这是以前的一个笔记,整理并分享出来,给有需要的人。

环境:

主机系统:ubuntu14.04

ceph版本:ceph jewel

1 准备工作

1.1 硬件资源

硬件配置:5台云主机,4核4G内存,Ubuntu14系统,每台挂载1 块100G 的SSD 和3 块200G 的SATA 盘。

root@ceph0:~# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sr0     11:0    1   436K  0 rom  
vda    253:0    0    20G  0 disk 
├─vda1 253:1    0     2M  0 part 
├─vda2 253:2    0   476M  0 part /boot
└─vda3 253:3    0  19.5G  0 part /
vdb    253:16   0   100G  0 disk 
vdc    253:32   0   200G  0 disk 
vdd    253:48   0   200G  0 disk 
vde    253:64   0   200G  0 disk 

磁盘分区

​ ceph-mon可以和osd节点混布,但要物理隔离。单台机器可以由多个osd进程,每个osd的数据盘和journal盘分别处于独立分区,为了高性能,建议journal放在在ssd盘,分区大小10G即可(更精确的大小计算参见这里, 大致的计算原则是 磁盘的吞吐osd持久化间隔的两倍,默认的持久化间隔是5s,按照磁盘吞吐200M计算,2G空间就够了)。
​ 以上述的推荐举个例子:
​ 某机器上含有4T的sata盘/dev/sdb, /dev/sdc, /dev/sdc。ssd盘480G,/dev/sdd。使用lsscsi可以看到磁盘的类型(sata or ssd),fdisk -l可以查看磁盘容量。

# lsscsi
[0:0:0:0]    disk    SEAGATE  ST300MM0006      0003  /dev/sda
[0:0:1:0]    disk    ATA      ST4000NM0033-9ZM SN06  /dev/sdb
[0:0:2:0]    disk    ATA      ST4000NM0033-9ZM SN06  /dev/sdc
[0:0:3:0]    disk    ATA      ST4000NM0033-9ZM SN06  /dev/sdd
[0:0:4:0]    disk    ATA      ST4000NM0033-9ZM SN06  /dev/sde
[0:0:5:0]    disk    ATA      INTEL SSDSC2BB48 0150  /dev/sdf
[0:0:6:0]    disk    ATA      TOSHIBA MG03ACA4 FL1A  /dev/sdg
[0:0:7:0]    disk    ATA      TOSHIBA MG03ACA4 FL1A  /dev/sdh
[0:0:8:0]    disk    ATA      TOSHIBA MG03ACA4 FL1A  /dev/sdi
[0:0:9:0]    disk    ATA      TOSHIBA MG03ACA4 FL1A  /dev/sdj
[0:0:10:0]   disk    ATA      TOSHIBA MG03ACA4 FL1A  /dev/sdk
[0:0:11:0]   disk    ATA      TOSHIBA MG03ACA4 FL1A  /dev/sdl
[0:0:12:0]   disk    ATA      INTEL SSDSC2BB48 0150  /dev/sdm
[0:0:13:0]   enclosu PMCSIERA SXP 24Sx12G      RevB  -

可以使用parted工具进行分区。

parted  -s  /dev/sdb  mklabel gpt #对/dev/sdb分区
parted /dev/sdb mkpart primary ext4 1 1000000 # 第一个分区占用1M到1000000M。

对于ssd盘,可以创建多个分区

parted  -s  /dev/sdd  mklabel gpt #对/dev/sdb分区
parted /dev/sdb mkpart primary ext4 1 10000 # 第一个分区占用1M到10000M。
parted /dev/sdb mkpart primary ext4 10000 20000# 
第二个分区占用10000M到20000M。
parted /dev/sdb mkpart primary ext4 20000 30000 # 
第三个分区占用20000M到30000M,剩余的分区可以由你自由分配。

实际分区部署操作

​ 分区的时候这里仅针对SSD分3个区,每个区给挂载在该主机上的3个SATA盘使用。

为ceph准备好磁盘分区,仅作分区,不需要挂载和建立文件系统,部署osd节点时,ceph自己会做这个工作。

​ 将SSD分为3个主分区,SATA盘一个分区,独立挂载。

root@ceph0:~# parted -s /dev/vdb mklabel gpt
root@ceph0:~# parted /dev/vdb mkpart primary ext4 0 40G
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Cancel 
#生成的分区没有正确地对齐以实现最佳性能。忽略/取消?

正确对齐分区的快速分步指南:

​ 首先获得你阵列的alignment参数:

root@ceph0:~# cat /sys/block/vdb/queue/optimal_io_size
0
root@ceph0:~# cat /sys/block/vdb/queue/minimum_io_size
512
root@ceph0:~# cat /sys/block/vdb/alignment_offset
0
root@ceph0:~# cat /sys/block/vdb/queue/physical_block_size
512

​ 其次,把optimal_io_size的值与alignment_offset的值相加,之后除以physical_block_size的值。在我的例子中是:(512 + 0) / 512 = 1。这个数值是分区起始的扇区。

​ 最后,新的parted命令应该写成类似下面这样

mkpart primary 1s 100%

​ 字母s是很有意义的:它告诉parted,你的输入是1个扇区,而不是1个字节,也不是1兆字节。

root@ceph0:~# parted /dev/vdb mkpart primary ext4 1 40G
Information: You may need to update /etc/fstab.  

root@ceph0:~# parted /dev/vdb mkpart primary ext4 40G 70G
Information: You may need to update /etc/fstab.                           

root@ceph0:~# parted /dev/vdb mkpart primary ext4 70G 100G
Information: You may need to update /etc/fstab.  

# 不需要update。parted命令是实时生效的,分区命令完成后已经将分区表数据写入了硬盘。
# /etc/fstab文件,是系统的自动挂载分区的配置。目的是让系统重启后,能够自动将某个分区挂载到指定挂载点,而不用再手动mount。

​ SATA盘需要一个主分区,200G大小,分区过程同上。

​ 分区后的磁盘挂载树状结构图:

root@ceph0:~/my-cluster# lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sr0     11:0    1   436K  0 rom  
vda    253:0    0    20G  0 disk 
├─vda1 253:1    0     2M  0 part 
├─vda2 253:2    0   476M  0 part /boot
└─vda3 253:3    0  19.5G  0 part /
vdb    253:16   0   100G  0 disk 
├─vdb1 253:17   0  37.3G  0 part 
├─vdb2 253:18   0    28G  0 part 
└─vdb3 253:19   0    28G  0 part 
vdc    253:32   0   200G  0 disk 
└─vdc1 253:33   0 186.3G  0 part 
vdd    253:48   0   200G  0 disk 
└─vdd1 253:49   0 186.3G  0 part 
vde    253:64   0   200G  0 disk 
└─vde1 253:65   0 186.3G  0 part 

​ 对其他主机上挂载的SSD和SATA盘操作同上。

1.2 设置ssh免密登录(仅主控节点)

​ 选定一个节点作为主控节点(这里选的ceph0主机),建立从主控节点到其他节点的免密登录。主控节点也可以安装ceph。

1 生成秘钥:ssh-keygen

root@ceph0:~# ssh-keygen

2 拷贝密钥:ssh-copy-id your_dst_node

​ 输入密码即可,如果不知道密码,则把~/.ssh/id_rsa.pub加入到目标机器的~/.ssh/authorized_keys中亦可。

root@ceph0:~# ssh-copy-id [email protected]

​ 然后就可以免密登录了,直接 ssh + IP 就可以了。

root@ceph0:~# ssh 172.20.0.197

​ 对其他机台机器的操作同上。注意:也要对本机设置免密登录。

​ 有了免密登录,可以批量的执行命令。

3 设置主控节点通过ssh访问其他节点

127.0.0.1       localhost       ceph0
127.0.1.1       host-192-168-112-190.openstacklocal     host-192-168-112-190

172.20.0.196    ceph0
172.20.0.197    ceph1
172.20.0.198    ceph2
172.20.0.199    ceph3
172.20.0.200    ceph4

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
~                                                                                                                                                      
~                                                                                                                                                   
"/etc/hosts" 14L, 340C  

1.3 防火墙及安全设置(所有节点)

1 防火墙相关

​ Ceph Monitors 之间默认使用 6789 端口通信, OSD 之间默认用 6800:7300 这个范围内的端口通信。

sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent
如果提示命令不存在,则可以批量安装
root@ceph0:~# sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent
sudo: unable to resolve host ceph0
sudo: firewall-cmd: command not found

2 selinux相关
​ 设置selinux,如果报命令不存在,可以忽略这一步。

root@ceph0:~# sudo setenforce 0
sudo: setenforce: command not found

​ 如果命令存在,执行如下操作

sudo setenforce 0

​ 如果希望永久生效,则修改 /etc/selinux/config

This file controls the state of SELinux on the system.
SELINUX= can take one of these three values:
    enforcing - SELinux security policy is enforced.
    permissive - SELinux prints warnings instead of enforcing.
    disabled - No SELinux policy is loaded.
SELINUX=disabled
SELINUXTYPE= can take one of these two values:
    targeted - Targeted processes are protected,
    minimum - Modification of targeted policy. Only selected 
processes are protected.
    mls - Multi Level Security protection.
SELINUXTYPE=targeted

1.4 添加ceph用户,并设置权限(所有节点)

1、在各 Ceph 节点创建新用户

root@ceph0:~# sudo useradd -d /home/ceph -m ceph
sudo: unable to resolve host ceph0

​ 第一条命令执行后的告警没关系,如果想消除,可以参考这里。示例:

vim /etc/hosts
#然后再localhost后面加上当前的主机名,这里是ceph0
127.0.0.1       localhost       ceph0

2、确保各 Ceph 节点上新创建的用户都有 sudo 权限

root@ceph0:~# echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph
ceph ALL = (root) NOPASSWD:ALL
root@ceph0:~# sudo chmod 0440 /etc/sudoers.d/ceph 

1.5 安装ntp服务(所有节点)

​ 主要是用于ceph-mon之间的时间同步。在所有 Ceph 节点上安装 NTP 服务(特别是 Ceph Monitor 节点),以免因时钟漂移导致故障。确保在各 Ceph 节点上启动了 NTP 服务,并且要使用同一个 NTP 服务器。

sudo apt-get install ntp

可以暂时不设置,一般公司的服务器会校准时间,如果需要的话,时间服务器网上百度一下,自行设置即可。

1.6 添加ceph安装源(所有节点)

​ 顺序执行以下命令:

:建议这里的源直接写国内源

wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
echo deb https://download.ceph.com/debian-jewel/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list

​ 国内源

# wget -q -O- 'http://mirrors.163.com/ceph/keys/release.asc' > test.asc
# vim test.asc 
# apt-key add test.asc 
OK
# echo deb http://mirrors.163.com/ceph/debian-jewel/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
deb https://mirrors.163.com/ceph/debian-jewel/ trusty main

实际执行情况

root@ceph0:~# wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
apt-key add: command not found

​ 很诡异,不知道为啥不行,换一种方法:

root@ceph0:~# wget -q -O- 'https://download.ceph.com/keys/release.asc' > test.asc
root@ceph0:~# apt-key add  test.asc 
OK
root@ceph0:~# echo deb https://download.ceph.com/debian-jewel/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
deb https://download.ceph.com/debian-jewel/ trusty main 

1.7 安装ceph-deploy部署工具(仅主控节点)

​ 更新你的仓库,并安装 ceph-deploy:

sudo apt-get update && sudo apt-get install ceph-deploy

实际执行情况

root@ceph0:~# sudo apt-get update && sudo apt-get install ceph-deploy
E: Type 'deb https://download.ceph.com/debian-jewel/ trusty' is not known on line 1 in source list /etc/apt/sources.list.d/ceph.list
E: The list of sources could not be read.

​ 替换ceph国内源

root@ceph0:~# vi /etc/apt/sources.list.d/ceph.list

修改内容如下:
#deb http://download.ceph.com/debian-jewel/ trusty main 
deb http://mirrors.163.com/ceph/debian-jewel trusty main

​ 然后执行命令

sudo apt-get update && sudo apt-get install ceph-deploy

2 启动ceph-mon

2.1 安装ceph

使用国内源加快安装速度

export CEPH_DEPLOY_REPO_URL=http://mirrors.163.com/ceph/debian-jewel 
export CEPH_DEPLOY_GPG_URL=http://mirrors.163.com/ceph/keys/release.asc

2.2 创建部署的目录,目录内会生成ceph的配置文件

mkdir my-cluster && cd my-cluster/

2.3 配置新节点

ceph-deploy new your-node-list

例如:ceph-deploy new ceph-0 ceph-1 ceph-2 [other node…]

此时会在my-cluster目录下生成几个文件,如ceph.conf;ceph.mon.keyring等

设置ceph.conf,增加一行public network = xxx.xxx.xxx.0/24[取决于实际的网络]

实际配置操作

root@ceph0:~/my-cluster# ceph-deploy new ceph0 ceph1 ceph2
root@ceph0:~/my-cluster# ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring  release.asc

​ 看一下网络

root@ceph0:~/my-cluster# ifconfig
eth0      Link encap:Ethernet  HWaddr fa:16:3e:89:b2:7f  
          inet addr:172.20.0.196  Bcast:172.20.255.255  Mask:255.255.0.0

​ 我这里新增加的一行为:public network = xxx.xxx.xxx.0/16

root@ceph0:~/my-cluster# vim ceph.conf
[global]
fsid = 4d7e1b04-2a4c-45aa-b6fe-a98241db0c2f
mon_initial_members = ceph0, ceph1, ceph2
mon_host = 172.20.0.196,172.20.0.197,172.20.0.198
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

public network = 172.20.0.0/16

2.4 安装该节点

ceph-deploy install ceph-0 ceph-2 ceph-2 [other node...]
root@ceph0:~/my-cluster# ceph-deploy install ceph0 ceph1 ceph2
……
……
[ceph2][INFO  ] Running command: ceph --version
[ceph2][DEBUG ] ceph version 10.2.3 (ecc23778eb545d8dd55e2e4735b53cc93f92e65b)
# ceph0,ceph1,ceph2都出现上面这两行输出表示安装完成

2.5 配置并启动ceph-mon

ceph-deploy mon create-initial

​ 然后运行 ceph -s可以看到当前集群的状态,3个mon,暂时没有osd,有个pool,pool的pg数目是64个。

root@ceph0:~/my-cluster# ceph -s
    cluster 4d7e1b04-2a4c-45aa-b6fe-a98241db0c2f
     health HEALTH_ERR
            no osds
     monmap e1: 3 mons at {ceph0=172.20.0.196:6789/0,ceph1=172.20.0.197:6789/0,ceph2=172.20.0.198:6789/0}
            election epoch 4, quorum 0,1,2 ceph0,ceph1,ceph2
     osdmap e1: 0 osds: 0 up, 0 in
            flags sortbitwise
      pgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects
            0 kB used, 0 kB / 0 kB avail
                  64 creating

3 添加ceph-osd节点

3.1 安装ceph到osd节点

ceph-deploy install --release {release-name} node-list

​ 这里把之前装monitor前没装的主机装上,我这里还剩ceph3, ceph4没装,执行如下(其实命令里选择版本号这个可以去掉,因为默认的下载源已经指定了版本):

ceph-deploy install --release jewel ceph3 ceph4

3.2 设置并启动osd

ceph-deploy osd prepare ceph-4:/dev/vdb1:/dev/vde1 ceph-4:/dev/vdc1:/dev/vde2 ceph-4:/dev/vdd1:/dev/vde3 #磁盘准备
ssh ceph-4 'chown ceph:ceph /dev/vdb1 /dev/vdc1 /dev/vdd1 /dev/vde1 /dev/vde2 /dev/vde3' # 设置权限
ceph-deploy osd activate ceph-4:/dev/vdb1:/dev/vde1 ceph-4:/dev/vdc1:/dev/vde2 ceph-4:/dev/vdd1:/dev/vde3 #启动osd

​ 上述代码会在ceph-4机器创建三个osd进程,磁盘组合/dev/vdb1:/dev/vde1的vdb1作为第一个osd的数据盘,vde1作为journal盘。然后运行ceph -s,可以看到osd节点已经加入。

具体执行如下:

1 磁盘准备

root@ceph0:~/my-cluster# ceph-deploy osd prepare ceph0:/dev/vdc1:/dev/vdb1 ceph0:/dev/vdd1:/dev/vdb2 ceph0:/dev/vde1:/dev/vdb3
……
……
[ceph0][INFO  ] checking OSD status...
[ceph0][DEBUG ] find the location of an executable
[ceph0][INFO  ] Running command: /usr/bin/ceph --cluster=ceph osd stat --format=json
[ceph_deploy.osd][DEBUG ] Host ceph0 is now ready for osd use.

2 设置权限

root@ceph0:~/my-cluster# ssh ceph0 'chown ceph:ceph /dev/vdb1 /dev/vdb2 /dev/vdb3 /dev/vdc1 /dev/vdd1 /dev/vde1'

3 启动OSD

root@ceph0:~/my-cluster# ceph-deploy osd activate ceph0:/dev/vdc1:/dev/vdb1 ceph0:/dev/vdd1:/dev/vdb2 ceph0:/dev/vde1:/dev/vdb3
……
……
[ceph0][INFO  ] checking OSD status...
[ceph0][DEBUG ] find the location of an executable
[ceph0][INFO  ] Running command: /usr/bin/ceph --cluster=ceph osd stat --format=json

​ 其他四台主机上的OSD设置同上,注意SSD盘符和SATA盘符的不同。

​ 所有五台机器设置完后,运行ceph -s,可以看到15个osd节点已经加入。

root@ceph0:~/my-cluster# ceph -s
    cluster 4d7e1b04-2a4c-45aa-b6fe-a98241db0c2f
     health HEALTH_WARN
            too few PGs per OSD (12 < min 30)
     monmap e1: 3 mons at {ceph0=172.20.0.196:6789/0,ceph1=172.20.0.197:6789/0,ceph2=172.20.0.198:6789/0}
            election epoch 4, quorum 0,1,2 ceph0,ceph1,ceph2
     osdmap e80: 15 osds: 15 up, 15 in
            flags sortbitwise
      pgmap v181: 64 pgs, 1 pools, 0 bytes data, 0 objects
            525 MB used, 2792 GB / 2792 GB avail
                  64 active+clean

4 设置使集群处于健康状态

注意上面的ceph 处于 HEALTH_WARN 状态

查看副本数

root@ceph0:/etc/ceph# ceph osd dump | grep 'replicated size'
pool 0 'rbd' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 1 flags hashpspool stripe_width 0

查看已经存在的pools

root@ceph0:/etc/ceph# ceph osd lspools
0 rbd,

查看rbd pool中的 pg_num 和 pgp_num 属性

root@ceph0:/etc/ceph# ceph osd pool get rbd pg_num
pg_num: 64
root@ceph0:/etc/ceph# ceph osd pool get rbd pgp_num
pgp_num: 64

健康的 pg_num 和 pgp_num 计算方法:

​ 关于pgmap的数目,osd_num *100 / replica_num向上取2的幂。比如15个osd,三备份,15 *100/3=500,得到pg_num = 512,线上重新设定这个数值时会引起数据迁移,请谨慎处理。

设置

root@ceph0:/etc/ceph# ceph osd pool set rbd pg_num 512
set pool 0 pg_num to 512
root@ceph0:/etc/ceph# ceph osd pool set rbd pgp_num 512
set pool 0 pgp_num to 512
root@ceph0:/etc/ceph# 

再次查看 ceph 集群状态,HEALTH_OK

root@ceph0:/etc/ceph# ceph -s
    cluster 4d7e1b04-2a4c-45aa-b6fe-a98241db0c2f
     health HEALTH_OK
     monmap e1: 3 mons at {ceph0=172.20.0.196:6789/0,ceph1=172.20.0.197:6789/0,ceph2=172.20.0.198:6789/0}
            election epoch 4, quorum 0,1,2 ceph0,ceph1,ceph2
     osdmap e84: 15 osds: 15 up, 15 in
            flags sortbitwise
      pgmap v226: 512 pgs, 1 pools, 0 bytes data, 0 objects
            561 MB used, 2792 GB / 2792 GB avail
                 512 active+clean
root@ceph0:/etc/ceph# 

4 设置ceph的rbd块存储设备

​ 确保ceph存储集群处于 active + clean 的状态,这样才能使用块设备。

4.1 建立主控机器到rbd所在设备的ssh免密登录关系

​ 参见上文:章节1.2。

4.2 安装ceph环境,并授予权限

​ 假设rbd所在机器的hostname为 ceph-cli(这里新建一台主机,名为ceph-cli)。在主控节点上的 /etc/ceph 目录下执行操作。

​ 1 在ceph0上使用ceph-deploy 工具ceph二进制程序安装到ceph-cli上面

​ 注意:在 ceph-cli 主机上将ceph 源改为国内源。

cd /etc/ceph/ # 主控节点
ceph-deploy install ceph-cli

​ 2 将ceph配置文件(ceph.conf)复制到ceph-cli

ceph-deploy config push ceph-cli

​ 3 客户机需要ceph密钥去访问ceph集群。ceph创建了一个默认用户 client.admin,它有足够的权限去访问ceph集群。不建议把client.admin共享到所有其他客户端节点。更好的做法是用分开的密钥创建一个新的ceph用户去访问特定的存储池。

​ 这里,创建了一个ceph用户 client.rbd,它拥有访问rbd存储池的权限

root@ceph0:/etc/ceph# ceph auth get-or-create client.rbd mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=rbd'
[client.rbd]
    key = AQAmVzVYzXDjBhAAWlcdtEnQ6XBscmU58ZljAw==

​ 4 为ceph-cli上的client.rbd用户添加密钥

root@ceph0:/etc/ceph# ceph auth get-or-create client.rbd | ssh ceph-cli 'sudo tee /etc/ceph/ceph.client.rbd.keyring'
sudo: unable to resolve host ceph-cli
[client.rbd]
    key = AQAmVzVYzXDjBhAAWlcdtEnQ6XBscmU58ZljAw==

​ 5 至此,ceph-cli 应该准备好充当ceph客户端了。通过提供用户名和密钥在 ceph-cli 上检查集群的状态

root@ceph0:/etc/ceph# ssh ceph-cli 'cat /etc/ceph/ceph.client.rbd.keyring >> /etc/ceph/keyring'

root@ceph0:/etc/ceph# ssh ceph-cli 'ceph -s --name client.rbd'
    cluster 4d7e1b04-2a4c-45aa-b6fe-a98241db0c2f
     health HEALTH_OK
     monmap e1: 3 mons at {ceph0=172.20.0.196:6789/0,ceph1=172.20.0.197:6789/0,ceph2=172.20.0.198:6789/0}
            election epoch 4, quorum 0,1,2 ceph0,ceph1,ceph2
     osdmap e84: 15 osds: 15 up, 15 in
            flags sortbitwise
      pgmap v232: 512 pgs, 1 pools, 0 bytes data, 0 objects
            547 MB used, 2792 GB / 2792 GB avail
                 512 active+clean

​ 至此,ceph客户端已经配置完毕。接下来在客户端上创建块设备。

4.3 创建ceph块设备

​ 1 创建一个102400M 大小的RADOS 块设备,取名 rbd1

root@ceph-cli:~# rbd create rbd1 --size 102400 --name client.rbd --image-feature layering
# 14.04的内核只支持layering,增加不支持的特性会导致后续的map失败。

​ 2 列出RBD 镜像

root@ceph-cli:~# rbd ls --name client.rbd
rbd1

​ 3 检查rbd 镜像的细节

root@ceph-cli:~# rbd --image rbd1 info --name client.rbd
rbd image 'rbd1':
    size 102400 MB in 25600 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.10912ae8944a
    format: 2
    features: layering
    flags: 

4.4 映射块设备并初始化

​ 1 映射块设备到 ceph-cli

root@ceph-cli:~# rbd map --image rbd1 --name client.rbd
/dev/rbd0

​ 2 检查被映射的块设备

root@ceph-cli:~# rbd showmapped --name client.rbd
id pool image snap device    
0  rbd  rbd1  -    /dev/rbd0

​ 3 要使用这个块设备,我们需要创建并挂载一个文件系统

root@ceph-cli:~# fdisk -l /dev/rbd0

#创建文件系统
root@ceph-cli:~# mkfs.ext4 /dev/rbd0

#创建文件夹 ceph-disk1,并将块设备 rbd0 挂载在该目录下
root@ceph-cli:~# mkdir /mnt/ceph-disk1 && mount /dev/rbd0 /mnt/ceph-disk1

root@ceph-cli:~# df -h /mnt/ceph-disk1
Filesystem      Size  Used Avail Use% Mounted on
/dev/rbd0        99G   60M   94G   1% /mnt/ceph-disk1

4.5 测试块设备

​ 接下来就可以开始对这个块存储进行任意读写了。可以使用dd或者fio进行性能测试,注意fio是破坏性测试,会毁坏数据甚至文件系统。不过破坏了也没关系,删除rbd设备后,重新添加rbd设备,格式化即可。

root@ceph-cli:~# 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, 0.12931 s, 811 MB/s

你可能感兴趣的:(【Distribute】)