1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
块设备(rbd)
     1 、块设备可以应用为:
         1 、作为额外的磁盘使用
         2 、可以作为裸设备使用
         3 、可以格式化成文件系统,然后挂载给虚拟机或者物理服务器使用
     
     2 、创建块设备(可以在任意一台ceph节点上创建)
     下面的命令创建一个名为ceph - client1 - rbd1、大小为 10G 的RBD设备
     [root@ceph - node1 ~] # rbd create ceph-client1-rbd1 --size 10240
     注意:默认情况下rbd镜像会保存在ceph集群的rbd池中,可以使用 - p参数改变池
     
     3 、列出rbd设备镜像(可在任意一台节点上列出)
     [root@ceph - node3 ~] # rbd ls
     ceph - client1 - rbd1
 
     
     4 、查看创建后的块设备的信息(可以在任意一台ceph节点上查看)
     [root@ceph - node1 ~] # rbd --image ceph-client1-rbd1 info
     rbd image  'ceph-client1-rbd1' :
     size  10240  MB  in  2560  objects
     order  22  ( 4096  kB objects)
     block_name_prefix: rbd_data. 857a238e1f29
     format 2
     features: layering, exclusive - lock,  object - map , fast - diff, deep - flatten
     flags: 
 
     5 、创建ceph客户端
     安装一台虚拟机或者用一台物理机来作为cpeh客户端进行测试,操作系统需要是linux(我的环境是centos7)
     
     需要注意:
         1 、linux内核从 2.6 . 32 版本开始支持ceph
         2 、建议使用 2.6 . 34 以及以上的内核版本
     
     查看内核版本命令:uname  - rbd
     检查是否支持rbd命令: modprobe rbd
     
     安装完客户端的操作系统之后,记得将ceph集群的IP地址和主机名添加到hosts文件中:
     192.168 . 89.101  ceph - node1
     192.168 . 89.102  ceph - node2
     192.168 . 89.103  ceph - node3
     192.168 . 89.139  ceph - client1
 
     
     6 、映射rados块设备给客户端
         在映射之前,需要授权给客户端访问ceph集群的权限,需要下面两个步骤,添加秘钥环(客户端与ceph集群之间的身份验证就是基于这个秘钥环)和添加ceph配置文件
     
         1 、在管理节点(ceph - deploy)上通过ceph - deploy工具给ceph - client1安装ceph包
         deploy install ceph - client1 - rbd1
         
         2 、在管理节点上(ceph - deploy)上通过ceph - deploy工具给ceph - client1客户端下发秘钥环和ceph配置文件
         用于授予客户端访问ceph集群的权限
         ceph - deploy admin ceph - client1
         
         3 、登录ceph - client1客户端检查秘钥文件和配置文件是否下发成功
         进入 / ect / ceph / 目录
         [root@ceph - client1 ceph] # ls -l
         - rw - - - - - - -  1  root root  129  Jan   6  22 : 51  ceph.client.admin.keyring  #这是下发后的秘钥文件
         - rw - r - - r - -  1  root root  234  Jan   6  22 : 51  ceph.conf  #这是下发后的配置文件
         - rw - r - - r - -  1  root root   92  Oct   4  10 : 50  rbdmap
         - rw - - - - - - -  1  root root    0  Jan   6  22 : 51  tmpUcImw6
         
         4 、在ceph - client1客户端上查询ceph集群的RBD镜像
         [root@ceph - client1 ~] # rbd ls #列出rbd列表
         ceph - client1 - rbd1
         [root@ceph - client1 ~] # rbd info --image ceph-client1-rbd1 #查看rbd镜像详细信息
         rbd image  'ceph-client1-rbd1' :
             size  10240  MB  in  2560  objects
             order  22  ( 4096  kB objects)
             block_name_prefix: rbd_data. 857a238e1f29
             format 2
             features: layering, exclusive - lock,  object - map , fast - diff, deep - flatten
             flags: 
         
         5 、授权之后,就在ceph - client1客户端上映射名为 'ceph-client1-rbd1' 的rbd镜像:
         rbd  map  - - image ceph - client1 - rbd1
         
         执行上述映射命令后发生如下错误:
         [root@ceph - client1 log] # rbd map --image ceph-client1-rbd1
         rbd: sysfs write failed
         RBD image feature  set  mismatch. You can disable features unsupported by the kernel with  "rbd feature disable" .
         In some cases useful info  is  found  in  syslog  -  try  "dmesg | tail"  or  so.
         rbd:  map  failed: ( 6 ) No such device  or  address
         遇到问题:rbd镜像的一些特性,OS kernel并不支持,所以映射失败
         
         查看下该镜像支持了哪些特性
         [root@ceph - client1 ~] # rbd info ceph-client1-rbd1
         rbd image  'ceph-client1-rbd1' :
         size  10240  MB  in  2560  objects
         order  22  ( 4096  kB objects)
         block_name_prefix: rbd_data. 857a238e1f29
         format 2
         features: layering, exclusive - lock,  object - map , fast - diff, deep - flatten
         flags: 
         可以看到特性feature一栏,由于我OS的kernel只支持layering,其他都不支持,所以需要把部分不支持的特性disable掉。
         
         以下方法根据实际情况选其一即可!(我这里使用的是方式二)
         
         【方法一:】直接diable这个rbd镜像的不支持的特性:
         [root@ceph - client1 ~] # rbd feature disable ceph-client1-rbd1 exclusive-lock object-map fast-diff deep-flatten
         [root@ceph - client1 ~] # rbd info ceph-client1-rbd1 #关闭后查看
         rbd image  'ceph-client1-rbd1' :
             size  10240  MB  in  2560  objects
             order  22  ( 4096  kB objects)
             block_name_prefix: rbd_data. 857a238e1f29
             format 2
             features: layering  #仅剩一个特性
             flags: 
 
         【方法二:】在ceph集群中任意节点上创建rbd镜像时就指明需要的特性,如:
         $ rbd create  - - size  10240  ceph - client1 - rbd1  - - image - feature layering
         rbd create  - - size  10240  ceph - client1 - rbd1  - - image - feature layering exclusive - lock  object - map  fast - diff deep - flatten
 
         【方法三:】修改Ceph配置文件 / etc / ceph / ceph.conf,在 global  section下,增加
         rbd_default_features  =  1
         再创建rdb镜像。
         rbd create ceph - client1 - rbd1  - - size  10240
         
         
         6 、解决上述问题之后,再次尝试映射
         [root@ceph - client1 ~] # rbd map --image ceph-client1-rbd1
         / dev / rbd0
         此刻,映射成功
         
         7 、查看映射信息
         [root@ceph - client1 ~] # rbd showmapped
         id  pool image             snap device    
         0   rbd  ceph - client1 - rbd1  -     / dev / rbd0 
 
         8 、如需指定RBD镜像所属池的名称(这是可选的操作)可以执行以下命令:
         rbd  map  rbd / ceph - client1 - rbd1
         
         10 、映射之后,格式化RBD块设备,并创建文件系统
         [root@ceph - client1 ~] # 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@ceph - client1 ~] # mkfs.xfs /dev/rbd0
         [root@ceph - client1 ~] # mkdir /mnt/ceph-vol1
         [root@ceph - client1 ~] # mount /dev/rbd0 /mnt/ceph-vol1/
         
         [root@ceph - client1 ~] # df -H
         Filesystem           Size  Used Avail Use %  Mounted on
         devtmpfs              494M      0   494M    0 %  / dev
         tmpfs                 507M      0   507M    0 %  / dev / shm
         tmpfs                 507M   6.9M   500M    2 %  / run
         tmpfs                 507M      0   507M    0 %  / sys / fs / cgroup
         / dev / mapper / cl - root   8.6G   1.6G   7.0G   19 %  /
         / dev / sda1             1.1G   195M   869M   19 %  / boot
         tmpfs                 102M      0   102M    0 %  / run / user / 0
         / dev / rbd0              11G    35M    11G    1 %  / mnt / ceph - vol1  #这个是挂载后的
         
         11 、取消映射块设备
         [root@ceph - client1 ~] # umount /mnt/ceph-vol1/ #取消挂载
         [root@ceph - client1 ~] # rbd unmap /dev/rbd/rbd/ceph-client1-rbd1 #取消映射
         [root@ceph - client1 ~] # rbd showmapped #查看是否取消成功,如没有任何输出则表示取消映射成功
         
         12 、如下删除块设备,执行以下命令
         [root@ceph - node1 ~] # rbd rm ceph-client1-rbd1
         Removing image:  100 %  complete...done.
         [root@ceph - node1 ~] # rbd ls