ceph的一些学习过程

内容比较杂,个人学习ceph的一些理解。不涉及底层。只是使用过程的理解。

公共网络和集群网络区分

官方建议用两个网络运营 Ceph 存储集群:一个公共网(前端)和一个集群网(后端)。
上面部署 只用了一个网卡 公共网和集群网使用的同一个网络。

测试使用双网络。。。在虚拟机上测试。
虚拟机设置两个网络适配器
三个 ceph 集群节点设置两个就够了,客户端和集群通信还是使用的公共网络。
假设桥接的是公共网络 NAT的是 集群网络,公共网络要不能访问集群网络。
ip addr
这时 ceph的配置文件应该是类似于

mon_initial_members = ceph-1
mon_host = 192.168.199.81
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

public_network = 192.168.199.0/24
cluster_network = 192.168.136.0/24

public_network 表示公共网络网段
cluster_network 表示集群网络网段
mon_host 表示 监视器 所在主机。客户端与集群通信也是通过这个监视器完成的(应该吧)。

完成后查看,发现状态正常(我这个是重新把ceph 集群安装了一遍。中间修改cluster_network和public_network 还需要更改 map 这个还不太明白)
集群状态正常

现在把其中一个节点的 NAT网络关掉,也就是集群网络。 测试ceph-2
网络正常
修改 ens34 网卡

vi /etc/sysconfig/network-scripts/ifcfg-ens34

修改ONBOOT 为 no

ONBOOT=no

重启网络

systemctl restart network

NAT网络失效

查看ceph集群状态
ceph 集群

发现集群状态为 WARN 少了一个 osd。看来集群节点之间通信确实使用的集群网。cluster_network 设置是生效的。

这时候再将NAT网络开启。。等了一段时间发现 ceph状态还是没有恢复正常
状态WARN
查看osd 树
ceph osd tree
keyikandao 编号为1的osd 状态 是down 主机时 ceph-2 也是就刚停止又重启集群网的主机。。。
这时候需要重新启动该节点的osd 服务 在ceph-2主机执行

 systemctl start [email protected]

重新启动osd服务
发现状态正常了。。。

mon和mgr的设置

mon 维护集群状态的映射,包括监视器映射、管理器映射、OSD映射、MDS映射和拥挤映射。这些映射是Cephdaemons相互协调所需的关键集群状态。监视器还负责管理守护进程和客户端之间的身份验证。冗余和高可用性通常需要至少三个监视器。
mgr 负责跟踪运行时指标和ceph集群的当前状态,包括存储利用率、当前性能指标和系统负载。cephManager守护进程还宿主基于python的模块来管理和公开集群信息,包括基于web的集群信息。Ceph Dashboard和RESTAPI。高可用性通常至少需要两名manager。一般会在部署mon的节点都部署一个mgr(尽管并不强制要求必须部署在一起)。这个CephManager是版本 luminous版本之后 才推出的,在这个版本后成为必备组件。
**部署额外的管理器守护进程可以确保,如果一个守护进程或主机失败,另一个守护进程可以在不中断服务的情况下接管。**这个意思就是说一个集群中部署了多个mgr 实时起作用的只有一个。
只有一个状态位active
两个准备接手,一个正在活跃。

ceph建议的是mon 节点最好不要少于三个 然后保证在ceph集群节点数的半数以上。对于只有三个节点的。测试环境。可以三个节点都安装mon。(另,看到有些文档建议模拟节点的个数应该是单数,这个不太明白原因)

创建集群时加入

mon的创建,使用ceph-deploy部署ceph集群时。
设置

ceph-deploy new host1,... 

可将mon节点写入ceph.conf配置文件。
然后再使用 命令

ceph-deploy admin host1 ...

可将配置文件 放入到ceph集群主机的对应位置。在ceph集群未启动时,这样设置的mon就加入了ceph集群。但是,当ceph集群已经启动,更改配置文件是没用的。最重要的是要将新的mon 加入 ceph集群的映射 map。

集群创建完成后新增mon

新增mon需要设置 配置文件public_network
修改配置文件

vi ceph.conf
public_network = 192.168.199.0/24

将配置文件设置到所有集群主机

ceph-deploy --overwrite-conf admin ceph-1 ceph-2 ceph-3

使用ceph-deploy新增mon节点的方法手动添加 还是看官方文档吧。

ceph-deploy mon add host1

使用该方法一次只能添加一个mon

ceph-deploy mon create host1 [host2 host3]

create可以一次创建多个mon节点

将ceph-2,ceph-3也作为mon节点

ceph-deploy mon create ceph-2 ceph-3

如果未添加配置文件的public_network。创建完毕。可能提示

[ceph-3][WARNIN] ceph-3 is not defined in `mon initial members`
[ceph-3][WARNIN] monitor ceph-3 does not exist in monmap

查看 ceph 集群状态,发现并没有新增的mon在运行
ceph -mon
这个错误需要看他人博客。具体应该是mon 的keyring 不一致。
https://blog.csdn.net/weixin_33924220/article/details/92602783
enmmmm 试了好久,还是没有加进去。这个我也不知道如何解决。最好先设置public_network 再添加mon 节点。有那么一点可能是时间同步问题。
设置一下 chronyd 或者ntp

添加mon节点后 可以将新建的mon节点写到配置文件中。

新增mgr

ceph-deploy mgr create ceph-2 ceph-3

3mon3mgr

mon和mgr的移除

在移除mon之前要确保移除后ceph集群可以形成新的法定人数。
mon移除

ceph-deploy mon destroy host1 [host2]
ceph-deploy mon destroy ceph-1

移除一个后 2个mon似乎难以形成法定人数。。再重新将ceph-1的mon加上去。然后移除两个。。。重点是ceph.conf 配置文件中mon只有 ceph-1。所以在添加ceph-2和ceph-3的mon后,最好也写入配置文件。 host和host之间要,隔开

如果移除了"quorum_leader_name" 再重新选定法定人的过程比较艰难。感觉很难成功。。可能是因为集群太小 mon 太少的缘故。

使用ceph-deploy new 建立的mon不要去移除,因为写在了配置文件,移除可能有意外的结果。。一般只要停止该节点的mon 服务就会导致mon集群失败。。。别说移除了。
对于三节点的ceph集群。。。如果只使用new创建了 一个mon ,那么是可以运行的,但是如果后续增加了,如果有两个了,那么删除掉一个会导致,无法形成法定人数。。。。

如果一个节点本来有mon 使用ceph-deploy destroy 命令删除后。再添加使用指令

ceph-deploy mon create 

才有可能成功。。。不过一旦低于法定人数。。。再创建一个mon 也是很难再次恢复ceoh-mon的健康状态,可能有各种意想不到的问题

Ceph 用 Paxos 算法,要求法定人数里的大多数达成一致。可以只用一个监视器形成法定人数,然而你不能用两个监视器确定大多数。大多数监视器的比例必须像: 1:1 、 2:3 、 3:4 、 3:5 、 4:6 等等。
这个过程我们大多是情况下是不能控制的。还有,并不是说有四个mon监视器的话,就只有三个监视器是一致的,大多情况下,四个监视器都是一致的,3:4 只是说 有一个监视器意外情况坏掉了,那么mon依靠3个还是可以形成法定人数。。但是当有2个mon坏掉了。比如手动停止了服务,2个mon是无法形成法定人数的。
我之前一直理解构成ceph节点中设置mon的节点数:总结点数。。。偏差的有点大。

未找到 ceph-deploy移除mgr的指令。

查看mon状态的指令

可以查看监视器

ceph quorum_status --format json-pretty

查看详细状态

ceph mon_status --format json-pretty

osd的一些指令。

osd的移除。直接看官方文档翻译吧。http://docs.ceph.org.cn/rados/operations/add-or-rm-osds/
https://ceph.readthedocs.io/en/latest/rados/operations/add-or-rm-osds/#removing-osds-manual

osd的创建。有filestore 和bluestore 的区别。这个概念,有点大。。还不是很了解。filestore存在写放大的问题,要写到journal一次,data一次且存储通过xfs等文件系统,维护文件系统多了开销,,,bluestore直接使用裸盘存储,上面没有文件系统。。。相比较在使用ssd 等新存储设备bluestore更占优势。
转自http://www.itworld123.com/2019/06/04/storage/ceph/Ceph%E5%AD%98%E5%82%A8%E5%BC%95%E6%93%8EBlueStore%E7%AE%80%E6%9E%90/
bluestore
filestore

创建osd,bluestore是默认格式

ceph-deploy osd create --data /dev/sdb ceph-3

等同于

ceph-deploy osd create --data /dev/sdb --bluestore ceph-3

如果osd 格式为 filestore 要指定–journal,日志文件的位置

[root@ceph-admin my-cluster]# ceph-deploy osd create -h
usage: ceph-deploy osd create [-h] [--data DATA] [--journal JOURNAL]
                              [--zap-disk] [--fs-type FS_TYPE] [--dmcrypt]
                              [--dmcrypt-key-dir KEYDIR] [--filestore]
                              [--bluestore] [--block-db BLOCK_DB]
                              [--block-wal BLOCK_WAL] [--debug]
                              [HOST]

positional arguments:
  HOST                  Remote host to connect

optional arguments:
  -h, --help            show this help message and exit
  --data DATA           The OSD data logical volume (vg/lv) or absolute path
                        to device
  --journal JOURNAL     Logical Volume (vg/lv) or path to GPT partition
  --zap-disk            DEPRECATED - cannot zap when creating an OSD
  --fs-type FS_TYPE     filesystem to use to format DEVICE (xfs, btrfs)
  --dmcrypt             use dm-crypt on DEVICE
  --dmcrypt-key-dir KEYDIR
                        directory where dm-crypt keys are stored
  --filestore           filestore objectstore
  --bluestore           bluestore objectstore
  --block-db BLOCK_DB   bluestore block.db path
  --block-wal BLOCK_WAL
                        bluestore block.wal path
  --debug               Enable debug mode on remote ceph-volume calls
[root@ceph-admin my-cluster]# 

–journal JOURNAL Logical Volume (vg/lv) or path to GPT partition
日志文件位置一定是一个gpt 分区或者 逻辑卷 lvm卷管理。
官方建议data 数据盘和 journal日志最好不要放在一个盘中。另,日志放在ssd硬盘上更有效率。
使用/dev/sdb 作为osd data /dev/sdc1 分区作为osd journal
使用fdisk 工具创建一个 gpt 分区,大小2G。

fdisk /dev/sdc

设置gpt 格式分区

g

设置分区

n

设置完成。大致如下

Command (m for help): p

Disk /dev/sdc: 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): 512 bytes / 512 bytes
Disk label type: gpt
Disk identifier: A8B68C02-E822-4A2A-89FE-3DC512113DE5


#         Start          End    Size  Type            Name
 1         2048      4196351      2G  Linux filesyste 

创建osd指令,再安装ceph-deploy 的节点设置

ceph-deploy osd create --data /dev/sdb --journal /dev/sdc1 --filestore ceph-1

/dev/sdb 是一个裸硬盘。ceph-deploy 自动部署工具创建osd时会将其先设置成一个 lvm 卷组,再创建一个逻辑卷作为osd存储点。
osd的逻辑卷
无非就是卷组名和逻辑卷的名字长了一点。。。

我们也可以直接 设置一个 逻辑卷 。当作osd存储。不过这是–data 应该是
–data 卷组名/逻辑卷名。

比如 在 ceph-2 节点设置。
设置一个卷组 使用 /dev/sdb 卷组名为 vg_osd1(这里省略了将/dev/sdb设置成lvm物理卷的步骤,因为在创建lvm卷组时会自动设置/dev/sdb)

vgcreate vg_osd1 /dev/sdb

创建一个逻辑卷 使用卷组全部空间 逻辑卷卷名 lv_osd1

lvcreate -l 100%FREE vg_osd1 -n lv_osd1

lvs
接着设置 /dev/sdc 设置一个GPT格式的分区。(只是为了统一osd的类型,bluestore 类型同样可以这样设置作为osd存储)

fdisk /dev/sdc
g
n

w

不再多说。。。
测试 创建osd

ceph-deploy osd create --data vg_osd1/lv_osd1 --journal /dev/sdc1 --filestore ceph-2

创建完成 查看 ceph-2 节点的硬盘和分区
lsblk
和ceph-1 差不多只不过vg卷组和lv卷名是自己设置的。
前面 说 不建议把数据和日志放在一个硬盘,会影响速率。
这说明是可以放在一个硬盘上的。
可以测试在一个硬盘生成的卷组中创建两个逻辑卷,一个作为data 一个作为journal
在ceph-3 节点测试
创建卷组vg_osd1

vgcreate vg_osd1 /dev/sdb

创建作为data 的逻辑卷lv_osd1

lvcreate -L 8G vg_osd1 -n lv_osd1

剩余空间创建作为journal的逻辑卷lv_osd1_journal

lvcreate -l 100%FREE vg_osd1 -n lv_osd1_journal

创建osd

ceph-deploy osd create --data vg_osd1/lv_osd1 --journal vg_osd1/lv_osd1_journal --filestore ceph-3 

journal 这次也是一个 vg/lv 。

ceph-3的硬盘情况
sdb 下有两个lvm 逻辑卷。一个作为data 一个作为journal。

其它指令

查看法定人数状态

ceph quorum_status --format json-pretty

ceph的卸载

附,一些ceph的理解。属于转载

转自https://www.cnblogs.com/me115/p/6366374.html

Pool 、PG和OSD
Pool是存储对象的逻辑分区,它规定了数据冗余的类型和对应的副本分布策略;支持两种类型:副本(replicated)和 纠删码( Erasure Code)。

PG( placement group)是一个放置策略组,它是对象的集合,该集合里的所有对象都具有相同的放置策略;简单点说就是相同PG内的对象都会放到相同的硬盘上; PG是 ceph的核心概念, 服务端数据均衡和恢复的最小粒度就是PG;

OSD是负责物理存储的进程,一般配置成和磁盘一一对应,一块磁盘启动一个OSD进程;

下面这张图形象的描绘了它们之间的关系:

  • 一个Pool里有很多PG,
  • 一个PG里包含一堆对象;一个对象只能属于一个PG;
  • PG有主从之分,一个PG会有主副本和从副本,主从PG分布在不同的osd上。

传说中的经典图
这个图其实我是觉得不是特别形象的。。。
首先搞清楚了一个概念,存储池算一个逻辑分区,和osd算是同一级。(不能这么说,只是类比一下)一个存储池有许多的PG 构成,这些PG会分布在不同的OSD上,且由于一般存储池都是副本池,所以一个PG可能有副本。由主副本构成的就是一个完整的存储池。

网上找来的一个关系图,我感觉更清晰明了一点。
三副本存储池
一个对象只能存储在一个PG里,一个PG里可以许多不同的对象。一个PG属于一个存储池,一个存储池中很多个PG,一个存储池中的PG可能分布在不同的OSD上,且在三副本存储池中,一个PG会有三个副本,分布在不同的OSD上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章