内容比较杂,个人学习ceph的一些理解。不涉及底层。只是使用过程的理解。
公共网络和集群网络区分
官方建议用两个网络运营 Ceph 存储集群:一个公共网(前端)和一个集群网(后端)。
上面部署 只用了一个网卡 公共网和集群网使用的同一个网络。
测试使用双网络。。。在虚拟机上测试。
三个 ceph 集群节点设置两个就够了,客户端和集群通信还是使用的公共网络。
假设桥接的是公共网络 NAT的是 集群网络,公共网络要不能访问集群网络。
这时 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
查看ceph集群状态
发现集群状态为 WARN 少了一个 osd。看来集群节点之间通信确实使用的集群网。cluster_network 设置是生效的。
这时候再将NAT网络开启。。等了一段时间发现 ceph状态还是没有恢复正常
查看osd 树
keyikandao 编号为1的osd 状态 是down 主机时 ceph-2 也是就刚停止又重启集群网的主机。。。
这时候需要重新启动该节点的osd 服务 在ceph-2主机执行
systemctl start [email protected]
发现状态正常了。。。
mon和mgr的设置
mon 维护集群状态的映射,包括监视器映射、管理器映射、OSD映射、MDS映射和拥挤映射。这些映射是Cephdaemons相互协调所需的关键集群状态。监视器还负责管理守护进程和客户端之间的身份验证。冗余和高可用性通常需要至少三个监视器。
mgr 负责跟踪运行时指标和ceph集群的当前状态,包括存储利用率、当前性能指标和系统负载。cephManager守护进程还宿主基于python的模块来管理和公开集群信息,包括基于web的集群信息。Ceph Dashboard和RESTAPI。高可用性通常至少需要两名manager。一般会在部署mon的节点都部署一个mgr(尽管并不强制要求必须部署在一起)。这个CephManager是版本 luminous版本之后 才推出的,在这个版本后成为必备组件。
**部署额外的管理器守护进程可以确保,如果一个守护进程或主机失败,另一个守护进程可以在不中断服务的情况下接管。**这个意思就是说一个集群中部署了多个mgr 实时起作用的只有一个。
两个准备接手,一个正在活跃。
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在运行
这个错误需要看他人博客。具体应该是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
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存储。不过这是–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
接着设置 /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 节点的硬盘和分区
和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 。
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上。