Ceph集群部署

  • Post author:
  • Post category:其他




Ceph集群部署

环境准备

系统: CentOS7

配置: 1核1G内存,每台node角色的机器至少挂载1块为osd准备的空闲盘

IP hostname role service

192.168.10.11 admin    admin, mon ceph-mon@admin.service

192.168.10.12 node1    osd,mds ceph-osd@0.service

192.168.10.13 node2    osd,mds ceph-osd@1.service

192.168.10.14 node3    osd,mds ceph-osd@2.service ceph-mds@osd3

所有机器关闭防火墙, selinux

集群配置好时间同步

所有节点做好互相解析

保证所有节点都能上网

配置过程

  1. 在node节点上准备osd
[root@node1 ~]# mkfs.xfs /dev/sdb
[root@node1 ~]# mkdir /mnt/osd1
[root@node1 ~]# mount /dev/sdb /mnt/osd1/

[root@node2 ~]# mkfs.xfs /dev/sdb
[root@node2 ~]# mkdir /mnt/osd2
[root@node2 ~]# mount /dev/sdb /mnt/osd2/

[root@node3 ~]# mkfs.xfs /dev/sdb
[root@node3 ~]# mkdir /mnt/osd3
[root@node3 ~]# mount /dev/sdb /mnt/osd3/
  1. 在管理节点上配置对其他节点免密登录
[root@server-27 ~]# ssh-keygen
[root@server-27 ~]# ssh-copy-id osd1
[root@server-27 ~]# ssh-copy-id osd2
[root@server-27 ~]# ssh-copy-id osd3
  1. 在管理节点上安装ceph部署工具ceph-deploy

    3.1 配置yum源(所有节点), 因种种原因, 官方源速度很慢, 甚至不能访问, 我们在此配置阿里的镜像源
[root@admin ~]# vim /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
enabled=1
gpgcheck=0
type=rpm-md
priority=1

[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
enabled=1
gpgcheck=0
type=rpm-md
priority=1

[Ceph-source]
name=Ceph source packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS/
enabled=1
gpgcheck=0
type=rpm-md
priority=1

[Ceph-aarch64]
name=Ceph aarch64 packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-jewel/el7/aarch64/
enabled=1
gpgcheck=0
type=rpm-md

[root@admin ~]# scp /etc/yum.repos.d/ceph.repo node1:/etc/yum.repos.d/  
[root@admin ~]# scp /etc/yum.repos.d/ceph.repo node2:/etc/yum.repos.d/ 
[root@admin ~]# scp /etc/yum.repos.d/ceph.repo node3:/etc/yum.repos.d/

3.2 安装ceph-deploy(仅管理节点)

[root@admin ~]# yum install -y ceph-deploy
  1. 创建monitor服务(仅管理节点)
[root@admin ~]# mkdir /etc/ceph
[root@admin ~]# cd /etc/ceph
[root@admin ceph]#  ceph-deploy new admin                   # mon安装在admin节点上,admin为主机名
[root@admin ceph]# ls                                       # 生成Ceph配置文件、一个monitor密钥环和一个日志文件
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring
  1. 查看配置文件
[root@admin ceph]# vim ceph.conf
[global]
fsid = ff9b5a73-dab8-4d53-ac77-8378efd11502
mon_initial_members = admin
mon_host = 192.168.10.11
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 2                   # 配置文件的默认副本数从3改成2,这样只有两个osd也能达到active+clean状态
  1. 在所有节点安装ceph(在管理节点操作) ********
[root@admin ceph]# ceph-deploy install admin node{1..3}
### 这一步会自动在指定的所有节点上安装epel源及ceph源,然后安装 ceph ###
### 因国内网络原因,自动安装一般会出错,我们可以手动配置上述源并安装 ceph ###
# ceph -v           # 安装完成后, 在所有节点上执行, 看看版本是否正确
ceph version 10.2.11 (e4b061b47f07f583c92a050d9e84b1813a35671e)
  1. 配置初始 monitor(s)、并收集所有密钥(仅管理节点)
[root@admin ceph]# ceph-deploy mon create-initial
[root@admin ceph]# ls
ceph.bootstrap-mds.keyring  ceph.bootstrap-rgw.keyring  ceph-deploy-ceph.log
ceph.bootstrap-mgr.keyring  ceph.client.admin.keyring   ceph.mon.keyring
ceph.bootstrap-osd.keyring  ceph.conf                   rbdmap
  1. 激活第1步中的OSD

    8.1 准备OSD(管理节点操作)


    [root@admin ceph]# ceph-deploy osd prepare node1:/mnt/osd1

    node2:/mnt/osd2 node3:/mnt/osd3

    8.2 修改OSD属主属组(所有OSD节点)
[root@node1 ceph]# chown -R ceph.ceph /mnt/osd1
[root@node2 ceph]# chown -R ceph.ceph /mnt/osd2
[root@node3 ceph]# chown -R ceph.ceph /mnt/osd3

8.3 激活OSD(管理节点操作)

[root@admin ceph]# ceph-deploy osd activate node1:/mnt/osd1 node2:/mnt/osd2 node3:/mnt/osd3

========================================

ceph-deploy在osd上的操作(不需要手动操作):

/usr/bin/systemctl start ceph-osd@0
/usr/bin/systemctl start ceph-osd@1
/usr/bin/systemctl start ceph-osd@2

========================================

8.4 查看状态(管理节点操作)

[root@admin ceph]# ceph-deploy osd list node{1..3}         #观察是不是所有的OSD状态都OK
  1. 统一配置

    ###用 ceph-deploy 把配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点

    ###这样每次执行 Ceph 命令行时就无需指定 monitor 地址和
ceph.client.admin.keyring 了
[root@admin ceph]# ceph-deploy admin node1 node2 node3      # admin为命令

修改ceph.client.admin.keyring权限

[root@admin ceph]# chmod +r ceph.client.admin.keyring
  1. 检查集群的健康状况
[root@admin ceph]# ceph health
HEALTH_OK

至此, 基本完成了ceph集群的部署



Ceph 块设备

Ceph 块设备靠无限伸缩性提供了高性能,如向内核模块、或向 abbr:KVM (kernel virtual machines) (如 Qemu 、 OpenStack 和 CloudStack 等云计算系统通过 libvirt 和 Qemu 可与 Ceph 块设备集成)。你可以用同一个集群同时运行 Ceph RADOS 网关、 Ceph FS 文件系统、和 Ceph 块设备。

  • 要使用 Ceph 块设备,你必须有一个在运行的 Ceph 集群



要使用 Ceph 块设备命令,你必须有对应集群的访问权限

  1. 在管理节点上将 配置文件和密钥环拷贝到client
[root@admin ceph]# ceph-deploy admin client
  1. 修改密钥文件的权限
[root@client ceph]# chmod +r ceph.client.admin.keyring

使用块存储

在 client 节点上操作

3. 创建存储池

语法: ceph osd pool create {pool-name} {pg-num}

参数说明:

pool-name : 存储池名称,必须唯一。

pg-num : 存储池拥有的归置组总数。

下面是pg-num几个常用的值:

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

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

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

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

• 自己计算 pg_num 取值时可借助 pgcalc 工具. 随着OSD数量的增加,正确的 pg_num 取值变得更加重要,

因为它显著地影响着集群的行为、以及出错时的数据持久性(即灾难事件导致数据丢失的概率)。

[root@client ceph]# ceph osd pool create mypool 128
  1. 创建块设备映像 {pool-name}/{image-name}



指定 features: layering,否则 map 可能出错



也可以将 rbd_default_features = 1 添加到 /etc/ceph/ceph.conf 的 [global]



如果创建映像时不指定存储池,它将使用默认的 rbd 存储池

[root@client ceph]# rbd create --size 1024 mypool/myimage --image-feature layering      
[root@client ceph]# rbd ls mypool

myimage

[root@client ceph]# rbd info mypool/myimage

rbd image ‘myimage’:

size 1024 MB in 256 objects

order 22 (4096 kB objects)

block_name_prefix: rbd_data.5e446b8b4567

format: 2

features: layering

flags:



3. 映射块设备 {pool-name}/{image-name} 必须在client上操作

[root@client ceph]# rbd map mypool/myimage –id admin

/dev/rbd0 # 注:rbd0 说明这是映射的第一个块设备

[root@client ceph]# rbd showmapped

id pool image snap device

0 mypool myimage – /dev/rbd0

[root@client ceph]# ll /dev/rbd/mypool/

lrwxrwxrwx 1 root root 10 Nov 6 10:04 myimage -> …/…/rbd0



4. 使用块设备 /dev/rbd/{pool-name}/{image-name} 创建文件系统

[root@client ceph]# mkfs.xfs /dev/rbd/mypool/myimage



5. 挂载

[root@client ceph]# mkdir /mnt/ceph-block
[root@client ceph]# mount /dev/rbd/mypool/myimage /mnt/ceph-block/

在这里插入图片描述

在线扩容

块设备扩容

[root@client ceph]# rbd resize --size 2048 mypool/myimage             # 调整块设备大小为2G
Resizing image: 100% complete...done.​

文件系统级别在线扩容

[root@client ceph]# xfs_growfs /mnt/ceph-block/

在这里插入图片描述

删除块设备

[root@client ~]# umount /mnt/ceph-block/

在这里插入图片描述

[root@client ~]# rbd unmap /dev/rbd/mypool/myimage #

解除设备映射 [root@client ~]# rbd showmapped



再次查看,发现/dev/rbd0已经没有了 [root@client ~]# rbd rm mypool/myimage # 删除块设备 Removing image: 100% complete…done.

总结使用块设备的步骤:

1.客户端安装ceph,将密钥环文件传到客户端

2.创建存储池

3.在存储池中创建镜像 ——– 类似于创建一块磁盘

4.rbd映射 ——– 相当于将磁盘插入本机,这一步及后面的步骤一定要在客户端操作

5.格式化

6.挂载

在线扩容:

1.设备级别扩容

2.文件系统级别扩容



ceph文件系统

部署MDS服务

[root@admin ceph]# ceph-deploy mds create node{1…3}

查看状态

[root@admin ceph]# ceph mds stat

e4:, 3 up:standby

查看集群状态

在这里插入图片描述



创建ceph文件系统

官方文档: http://docs.ceph.org.cn/cephfs/

一个 Ceph 文件系统需要至少两个 RADOS 存储池,一个用于数据、一个用于元数据。配置这些存储池时需考虑:

• 为元数据存储池设置较高的副本水平,因为此存储池丢失任何数据都会导致整个文件系统失效。

• 为元数据存储池分配低延时存储器(像 SSD ),因为它会直接影响到客户端的操作延时。

创建存储池

[root@admin ceph]# ceph osd pool create cephfs_data 128

pool ‘cephfs_data’ created

[root@admin ceph]# ceph osd pool create cephfs_metadata 128

pool ‘cephfs_metadata’ created

查看存储池

[root@admin ceph]# ceph osd lspools



0 rbd,1 cephfs_data,2 cephfs_metadata, #系统默认有一个名称为 rbd

的存储池

————————————————————————————————————————– 关于存储池: 官方文档: http://docs.ceph.org.cn/rados/operations/pools/

创建文件系统

创建前

[root@admin ceph]# ceph fs ls

No filesystems enabled

创建文件系统

语法: ceph fs new <fs_name>


[root@admin ceph]# ceph fs new cephfs cephfs_metadata cephfs_data

查看

在这里插入图片描述

挂载文件系统

有两种不同挂载方式

A. 内核驱动挂载Ceph文件系统

  1. 安装ceph
  2. 创建挂载点

[root@client ceph]# mkdir /mnt/cephfs

3. 创建密钥文件

3.1 在admin节点查看密钥内容

[root@admin ceph]# cat ceph.client.admin.keyring

[client.admin]

key = AQBLR7xdckUIFhAA2G05Hidq5aoSse0nxGNdJQ==

3.2 在client节点创建密钥文件

[root@client ceph]# vim /etc/ceph/admin.secret #复制上面文件中的内容,注意不是全部内容

AQBLR7xdckUIFhAA2G05Hidq5aoSse0nxGNdJQ==

  1. 挂载

    [root@client ceph]# mount.ceph 192.168.10.11:6789:/ /mnt/cephfs/ -o name=admin,secretfile=/etc/ceph/admin.secret



    B. 用户空间文件系统(FUSE)

    先卸载前面挂载的

  2. 安装ceph-fuse

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

  3. 从admin节点拷贝密钥环(ceph.client.admin.keyring文件)

    [root@admin ceph]# scp ceph.client.admin.keyring 192.168.10.15:/etc/ceph/

  4. 挂载

    [root@client ~]# ceph-fuse -m 192.168.10.11:6789 /mnt/cephfs/



——————————————————————————— 卸载: fusermount -u

  • 注: 从管理节点而非服务器节点挂载 Ceph FS 文件系统

    为了安全, 请将密钥文件设置合适的权限



ceph对象存储

官方文档: http://docs.ceph.org.cn/rados/operations/pools/

如果你开始部署集群时没有创建存储池, Ceph 会用默认存储池存数据。存储池提供的功能:

• 自恢复力: 你可以设置在不丢数据的前提下允许多少 OSD 失效,对多副本存储池来说,此值是一对象应达到的副本数。典型配置存储一个对象和它的一个副本(即 size = 2 ),但你可以更改副本数;对纠删编码的存储池来说,此值是编码块数(即纠删码配置里的 m=2 )。

• 归置组: 你可以设置一个存储池的归置组数量。典型配置给每个 OSD 分配大约 100 个归置组,这样,不用过多计算资源就能得到较优的均衡。配置了多个存储池时,要考虑到这些存储池和整个集群的归置组数量要合理。

• CRUSH 规则: 当你在存储池里存数据的时候,与此存储池相关联的 CRUSH 规则集可控制 CRUSH 算法,并以此操纵集群内对象及其副本的复制(或纠删码编码的存储池里的数据块)。你可以自定义存储池的 CRUSH 规则。

• 快照: 用 ceph osd pool mksnap 创建快照的时候,实际上创建了某一特定存储池的快照。

• 设置所有者: 你可以设置一个用户 ID 为一个存储池的所有者。

要把数据组织到存储池里,你可以列出、创建、删除存储池,也可以查看每个存储池的利用率

列出存储池

[guo@node1 ceph-cluster]$ rados lspools #默认情况下只有一个rbd存储池

rbd

[guo@node1 ceph-cluster]$ ceph osd lspools

0 rbd,

创建存储池

[guo@node1 ceph-cluster]$ ceph osd pool create data 128

pool ‘data’ created

[guo@node1 ceph-cluster]$ rados lspools

rbd

data

设置存储池配额

存储池配额可设置最大字节数或每存储池最大对象数

语法:

ceph osd pool set-quota {pool-name} [max_objects {obj-count}] [max_bytes {bytes}]

例:将data存储池设置只能存储10000个对象

[guo@node1 ceph-cluster]$ ceph osd pool set-quota data max_objects 10000

set-quota max_objects = 10000 for pool data

要取消配额,设置为0

重命名存储池 ceph osd pool rename {current-pool-name} {new-pool-name}

删除存储池 ceph osd pool delete {pool-name} [{pool-name} –yes-i-really-really-mean-it]

查看存储池统计信息 rados df

创建存储池快照 ceph osd pool mksnap {pool-name} {snap-name}

删除存储池快照 ceph osd pool rmsnap {pool-name} {snap-name}

调整存储池选项值 ceph osd pool set {pool-name} {key} {value}

获取存储池选项值 ceph osd pool get {pool-name} {key}

设置对象副本数 ceph osd pool set {poolname} size {num-replicas} #{num-replicas} 包括对象本身,默认为2

获取对象副本数 ceph osd dump | grep ‘replicated size’

查看对象 rados ls -p poolname

存储对象 rados put -p poolname

获取对象 rados get -p poolname

删除对象 rados rm -p poolname

复制对象 rados cp [target-obj] -p poolname

截断对象 rados truncate length -p poolname 把对象内容保留多少长度

例:

  1. 在管理端将配置文件和密钥环发送到客户端

    [root@admin ~]# cd /etc/ceph/

    [root@admin ceph]# ceph-deploy admin client client2

  2. 在任意节点创建存储池cephobj

    [root@client2 ceph]# ceph osd pool create cephobj 128

  3. 在其中一个客户端存入一个对象到cephobj

    [root@client2 ceph]# echo “this file upload by client2” > /tmp/a.txt

    [root@client2 ceph]# rados put test-file /tmp/a.txt -p cephobj # 存储对象

  4. 在另外的客户端获取对象

    [root@client ~]# rados ls -p cephobj

    test-file

    [root@client ~]# rados get test-file /opt/a.txt -p cephobj # 取出对象

    [root@client ~]# cat /opt/a.txt

    this file upload by client2



版权声明:本文为wenqing_ruyu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。