赞
踩
内容比较杂,个人学习ceph的一些理解。
Ceph 依赖于 Ceph 客户端和 OSD ,因为它们知道集群的拓扑,这个拓扑由 5 张图共同描述,统称为“集群运行图”:
Ceph 监视器维护着集群运行图的主副本。一个监视器集群确保了当某个监视器失效时的高可用性。存储集群客户端向 Ceph 监视器索取集群运行图的最新副本。
Ceph OSD 守护进程检查自身状态、以及其它 OSD 的状态,并报告给监视器们。
存储集群的客户端和各个 Ceph OSD 守护进程使用 CRUSH 算法高效地计算数据位置,而不是依赖于一个中心化的查询表。它的高级功能包括:基于 librados的原生存储接口、和多种基于 librados 的服务接口。
也就是说一个OSD守护进程 创建完成后还要加入 集群运行图,才算是加入集群。监视器才能监听OSD的状态。
官方建议用两个网络运营 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 表示 监视器 所在主机。客户端与集群通信也是通过这个监视器完成的(应该吧)。
mon_host 主机IP应该在public_network 网段
完成后查看,发现状态正常(我这个是重新把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 树
可以看到编号为1的osd 状态 是down 主机时 ceph-2 也是就刚停止又重启集群网的主机。。。
这时候需要重新启动该节点的osd 服务 在ceph-2主机执行
systemctl start ceph-osd@1.service
发现状态正常了。。。
mon 维护集群状态的映射,包括监视器映射、管理器映射、OSD映射、MDS映射和拥挤映射。这些映射是Cephdaemons相互协调所需的关键集群状态。监视器还负责管理守护进程和客户端之间的身份验证。冗余和高可用性通常需要至少三个监视器。
mgr 负责跟踪运行时指标和ceph集群的当前状态,包括存储利用率、当前性能指标和系统负载。cephManager守护进程还宿主基于python的模块来管理和公开集群信息,包括基于web的集群信息。Ceph Dashboard和RESTAPI。高可用性通常至少需要两名manager。一般会在部署mon的节点都部署一个mgr(尽管并不强制要求必须部署在一起)。这个CephManager是版本 luminous版本之后 才推出的,在这个版本后成为必备组件。
**部署额外的管理器守护进程可以确保,如果一个守护进程或主机失败,另一个守护进程可以在不中断服务的情况下接管。**这个意思就是说一个集群中部署了多个mgr 实时起作用的只有一个。
两个准备接手,一个正在活跃。
ceph建议的是mon 节点最好不要少于三个 然后保证在ceph集群节点数的半数以上。对于只有三个节点的。测试环境。可以三个节点都安装mon。(另,看到有些文档建议模拟节点的个数应该是单数)
ceph-mon, ceph-mgr 也是服务(守护进程),不同于一个ceph集群的主机上可能有多个osd服务,一个主机最多只有一个mon或mgr服务。因此集群的osd 服务id都是唯一的数字,mon/mgr服务后缀 是主机名。
systemctl status ceph-mon@ceph-1
systemctl status ceph-mgr@ceph-1
mon的创建,使用ceph-deploy部署ceph集群时。
设置
ceph-deploy new host1,...
可将mon节点写入ceph.conf配置文件。
然后再使用 命令
ceph-deploy admin host1 ...
可将配置文件 放入到ceph集群主机的对应位置。在ceph集群未启动时,这样设置的mon就加入了ceph集群。但是,当ceph集群已经启动,更改配置文件是没用的。最重要的是要将新的mon 加入 ceph集群的映射 map。
新增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
使用add 命令方法一次只能添加一个mon
ceph-deploy mon create host1 [host2 host3]
create可以一次创建多个mon节点
将ceph-2,ceph-3也作为mon节点
ceph-deploy mon create ceph-2 ceph-3
Ceph 用 Paxos 算法,要求法定人数里的大多数达成一致。可以只用一个监视器形成法定人数,然而你不能用两个监视器确定大多数。大多数监视器的比例必须像: 1:1 、 2:3 、 3:4 、 3:5 、 4:6 等等。
这个过程我们大多是情况下是不能控制的。还有,并不是说有四个mon监视器的话,就只有三个监视器是一致的,大多情况下,四个监视器都是一致的,3:4 只是说 有一个监视器意外情况坏掉了,那么mon依靠3个还是可以形成法定人数。。但是当有2个mon坏掉了。比如手动停止了服务,2个mon是无法形成法定人数的。
我之前一直理解构成ceph节点中设置mon的节点数:总节点数,并不是这样,上面的比例意指最低一致mon节点数:总mon节点数,一半以上即可。。。偏差的有点大。
另,一般建议 mon 节点是是奇数。
查看法定人数状态
ceph quorum_status --format json-pretty
添加mon节点后 可以将新建的mon节点写到配置文件中。mon_host中IP用 , 隔开
ceph-deploy mgr create ceph-2 ceph-3
luminous
Ceph 的监控可视化界面方案。原生的Dashboard功能需要mgr组件。
luminous版本之后才有原生的Dashboard功能。
在mon节点设置安装mgr
ceph-deploy mgr create ceph-1
可在ceph-1 节点查看当前mgr 启用的模块。
ceph mgr module ls
1.设置启用dashboard
ceph mgr module enable dashboard
2.设置dashboard的ip和端口。IP需要设置为mgr所在IP(且luminous版本的mgr 功能模块可能还存在选举问题,如果多mgr 节点都开启,可能会出现web页面取不到数据,建议只开启一个mgr节点服务,然后关闭其他节点mgr服务)。端口可不用设置,默认为7000。
ceph config-key set mgr/dashboard/server_addr 192.168.199.81
ceph config-key set mgr/dashboard/server_port 7000
3.设置完成重启mgr服务并查看mgr服务。
systemctl restart ceph-mgr@ceph-1
ceph mgr services
4.网页查看
在更高版本中(如nautilus版)使用原生dashboard 需要设置证书等。
需要安装ceph-mgr-dashboard
yum install -y ceph-mgr-dashboard
1、添加mgr 功能
ceph-deploy mgr create ceph-1 ceph-2 ceph-3
2、启用dashboard
ceph mgr module enable dashboard
3、生成并安装一个 自签名证书
ceph dashboard create-self-signed-cert
4、生成密钥,会生成两个文件----dashboard.crt dashboard.key (不确定这一步是不是必须的),可能并不是必需的,只是登录使用密钥方便。
mkdir mgr-dashboard
cd mgr-dashboard
openssl req -new -nodes -x509 -subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650 -keyout dashboard.key -out dashboard.crt -extensions v3_ca
5、配置服务地址、端口,nautilus版默认的端口是8443
这一步可省,默认端口8443,而IP则会由 ceph 自动选出。
ceph config set mgr mgr/dashboard/server_addr 192.168.199.81
ceph config set mgr mgr/dashboard/server_port 8443
6、创建一个web登录用的用户密码
ceph dashboard set-login-credentials user-name password
7、查看mgr服务
ceph mgr services
在移除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之间要使用,隔开。 在移除mon 之前或之后 也要将配置稳健的mon去除。
如果移除了"quorum_leader_name" 再重新选定法定人的过程比较艰难。感觉很难成功。。可能是因为集群太小 mon 太少的缘故。
mgr移除
官方文档并没有找到移除mgr 的方式。但是只用将mgr对应守护进程关闭,该mgr就不会再被集群使用了。再启动时仍可以重新加入集群。
systemctl stop ceph-mgr@ceph-node1
可以查看监视器
ceph quorum_status --format json-pretty
查看详细状态
ceph mon_status --format json-pretty
运行状态
systemctl status ceph-mon@ceph-1
systemctl status ceph-mgr@ceph-1
OSD也是一个守护进程/服务,可以使用systemctl 查看控制运行状态。一个主机上可能有多个osd服务
systemctl status ceph-osd@osd-num
osd-num 就是ceph集群中 osd 的唯一ID,当然该OSD需要运行在该主机上时才可查看。使用命令
ceph osd tree
查看OSD 分布状况。
Ceph 的 OSD 使用日志的原因有二:速度和一致性。
filestore min sync interval
之间的时间, OSD 停止写入、把日志同步到文件系统,这样允许 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
Luminous 版本之前和之后 移除不太一样。只简述Luminous 之后移除方式。
1.将osd移出集群
ceph osd out {osd-num}
osd-num 就是 集群中osd的唯一编号。
移除集群时会发生数据迁移,要保证数据迁移成功
ceph -w
观察迁移过程,归置组状态从 active+clean 变为 active, some degraded objects 、迁移完成后最终回到 active+clean 状态。
附: 有时候,(通常是只有几台主机的“小”集群,比如小型测试集群)移除( out )某个 OSD 可能会使 CRUSH 进入临界状态,这时某些 PG 一直卡在 active+remapped 状态。
如果遇到了这种情况,你应该重新把此 OSD 标记为 in
ceph osd in {osd-num}
回到最初的状态后,把它的权重设置为 0 ,而不是标记为 out
ceph osd crush reweight osd.{osd-num} 0
把某一 OSD 标记为 out 和权重改为 0 的区别在于,前者,包含此 OSD 的桶、其权重没变;而后一种情况下,桶的权重变了(降低了此 OSD 的权重)。某些情况下, reweight 命令更适合“小”集群。
2.停止OSD 服务。
将OSD状态设置为out后,对应的OSD服务仍在运行。OSD其状态为 up 且 out。 需要先停止服务才能移除该OSD。
在该OSD对应主机上执行
systemctl stop ceph-osd@{osd-num}
停止服务后 OSD状态变为 down
3.删除OSD
ceph osd purge {id} --yes-i-really-mean-it
这一步会删除CRUSH 图的对应 OSD 条目( OSD map、CRUSH map)、 OSD 认证密钥。
如果在配置文件设置了该OSD ,将ceph管理节点配置文件对应OSD配置删除 然后覆盖ceph集群所有主机配置文件。
有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/
OSD日志文件
创建osd,bluestore是默认格式
ceph-deploy osd create --data /dev/sdb ceph-3
等同于
ceph-deploy osd create --data /dev/sdb --bluestore ceph-3
如果osd 格式为 filestore 要指定–journal,日志文件的位置。并不是说bluestore不需要日志文件,而是bluestore格式的话会有默认位置。
[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 部署中,经常创建存储池作为逻辑分区、用以归类相似的数据。例如,用 Ceph 作为 OpenStack 的后端时,典型的部署通常会创建多个存储池,分别用于存储卷宗、映像、备份和虚拟机,以及用户(如 client.glance 、 client.cinder 等)。
创建pool,pool是ceph存储数据时的逻辑分区,它起到namespace的作用。
创建两个存储池。存储池设置涉及到了归置组的设置。
用此命令创建存储池时:
ceph osd pool create {pool-name} pg_num
pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:
PG( placement group)是一个放置策略组,它是对象的集合,该集合里的所有对象都具有相同的放置策略;简单点说就是相同PG内的对象都会放到相同的硬盘上; PG是 ceph的核心概念, 服务端数据均衡和恢复的最小粒度就是PG;
每个存储池都有很多归置组, CRUSH 动态的把它们映射到 OSD 。 Ceph 客户端要存对象时, CRUSH 将把各对象映射到某个归置组。
要设置某存储池的归置组数量,你必须在创建它时就指定好,详情见创建存储池。一存储池的归置组数量设置好之后,还可以增加(但不可以减少),下列命令可增加归置组数量:
ceph osd pool set {pool-name} pg_num {pg_num}
你增加归置组数量后、还必须增加用于归置的归置组( pgp_num )数量,这样才会开始重均衡。 pgp_num 数值才是 CRUSH 算法采用的用于归置的归置组数量。虽然 pg_num 的增加引起了归置组的分割,但是只有当用于归置的归置组(即 pgp_num )增加以后,数据才会被迁移到新归置组里。 pgp_num 的数值应等于 pg_num 。可用下列命令增加用于归置的归置组数量:
ceph osd pool set {pool-name} pgp_num {pgp_num}
其结果汇总后应该接近 2 的幂。汇总并非强制的,如果你想确保所有归置组内的对象数大致相等,最好检查下。
比如,一个配置了 200 个 OSD 且副本数为 3 的集群,你可以这样估算归置组数量:
(200 * 100)
----------- = 6667. Nearest power of 2: 8192
3
注,这是单个存储池的计算方法。。。
当用了多个数据存储池来存储数据时,你得确保均衡每个存储池的归置组数量、且归置组数量分摊到每个 OSD ,这样才能达到较合理的归置组总量,并因此使得每个 OSD 无需耗费过多系统资源或拖慢连接进程就能实现较小变迁。
这个不是很懂。也就只把官方文档内容抄下来了。有一点注意。可以根据设置的归置组数量和池数量计算出每个osd上归置组的大约数量。。。比如三个存储池,存储池默认副本数为2(osd_pool_default_size = 2)。设置存储池是每个存储池pg_num 都是 128。这时每个osd 上归置组数量大约是 128 * 3 * 2 / 3 = 256 。。。
官方建议 每个OSD上大约100个归置组。。。这个建议可以帮助我们计算。默认的每个osd上最大归置组数量是250 当然是可以修改的。
mon_max_pg_per_osd 250
这样 设置多个存储池时,我们可以做一下数学题。把归置组数量作为要求的值?。尽量保证每个osd上归置组数量在50-250 之间。尽量往100靠近(最好大于100)。。。最后选择一个接近2的幂的值。
比如。三个osds 副本数量是3(默认为3),准备设置三个存储池(每个存储池设置的归置组数量一致)。
50 * 3(3个osd) <? * 3 * 3(三个存储池,每个存储池还有两个副本)<250 * 3(三个osd)
约 27< ? < 84
选择一个 2的幂。。。那就是32 或者64。然后算一下哪个值 下osd上归置组数量更接近 100
32 的话 32 * 3 * 3 / 3 = 96
64 的话 64 * 3 * 3 / 3 = 192
尽管 96 更接近 100 但是 感觉应该 归置组数量是32和64 都可以。。。另,单个节点osd数量少的情况下mon_max_pg_per_osd 建议可以调大一点。
附,如果一个节点上有许多osd 那么每个osd上的归置组数量尽量少一点。
所以设置ceph集群前,最好先确定准备设置多少存储池,然后确定设置每个存储池的归置组的数量。不同存储池的归置组数量可以不一致,但是这些归置组数量加起来 假设平均分布到每个 osd 最好保证每个osd上归置组数量为100。
默认设置存储池是无法删除的。需要修改配置文件。
vi ceph.conf
[mon]
mon_allow_pool_delete = true
设置完成 分发到各个ceph主机
ceph-deploy --overwrite-conf config push {host-name [host-name]...}
需要重启mon服务才可删除pool
systemctl restart ceph-mon@ceph-1
删除存储池 rbd。需要写两次 存储池名
ceph osd pool rm rbd rbd --yes-i-really-really-mean-it
http://docs.ceph.org.cn/rados/operations/user-management/
无论Ceph客户端的类型(例如,块设备、对象存储、文件系统、本机API等),Ceph都将所有数据存储为池中的对象。Ceph用户必须有权访问池才能读取和写入数据。此外,Ceph用户必须具有使用Ceph管理命令的执行权限。
Ceph 用能力( capabilities, caps )这个术语来描述给认证用户的授权,这样才能使用监视器、 OSD 、和元数据服务器的功能。能力也用于限制对一存储池内的数据或某个名字空间的访问。 Ceph 的管理用户可在创建或更新某用户时赋予他能力。
能力的语法符合下面的形式:
{daemon-type} 'allow {capability}' [{daemon-type} 'allow {capability}']
同一个 daemon-type 的设置 allow之间可以用,隔开。。。
mon 'allow rwx'
mon 'allow profile osd'
可以设置成
mon 'allow rwx, allow profile osd'
osd 'allow {capability} [pool={poolname}] [namespace={namespace-name}]'
mds 'allow'
allow
描述:
在守护进程的访问设置之前,仅对 MDS 隐含 rw 。
r
描述:
授予用户读权限,监视器需要它才能搜刮 CRUSH 图。
w
描述:
授予用户写对象的权限。
x
描述:
授予用户调用类方法的能力,即同时有读和写,且能在监视器上执行 auth 操作。
class-read
描述:
授予用户调用类读取方法的能力, x 的子集。
class-write
描述:
授予用户调用类写入方法的能力, x 的子集。
*
描述:
授权此用户读、写和执行某守护进程/存储池,且允许执行管理命令。
profile osd
描述:
授权一个用户以 OSD 身份连接其它 OSD 或监视器。授予 OSD 们允许其它 OSD 处理复制、心跳流量和状态报告。
profile mds
描述:
授权一个用户以 MDS 身份连接其它 MDS 或监视器。
profile bootstrap-osd
描述:
授权一用户自举引导一 OSD 。授予部署工具,像 ceph-disk 、 ceph-deploy 等等,这样它们在自举引导 OSD 时就有权限增加密钥了。
profile bootstrap-mds
描述:
授权一用户自举引导一元数据服务器。授予像 ceph-deploy 一样的部署工具,这样它们在自举引导元数据服务器时就有权限增加密钥了。
罗列用户
ceph auth list
[root@ceph-1 ~]# ceph auth list installed auth entries: osd.0 key: AQASyaBfA3GMERAAm0wuaNfzEq1ZkB+2yX6+MQ== caps: [mgr] allow profile osd caps: [mon] allow profile osd caps: [osd] allow * osd.1 key: AQBiyaBfEKNNCBAA9Lr2kbiZC8Zb9Pg7bXFpww== caps: [mgr] allow profile osd caps: [mon] allow profile osd caps: [osd] allow * osd.2 key: AQC3yaBfLNDHABAAvAxf6tAyJ9J9kFzzYbuN3g== caps: [mgr] allow profile osd caps: [mon] allow profile osd caps: [osd] allow * client.admin key: AQDCyKBf4EaOJBAA30totF0nzidt0VsafbTfMQ== caps: [mds] allow * caps: [mgr] allow * caps: [mon] allow * caps: [osd] allow * client.bootstrap-mds key: AQDDyKBfBNFCGhAAeKnV7SIAS4v/IrZZSx/ESQ== caps: [mon] allow profile bootstrap-mds client.bootstrap-mgr key: AQDEyKBf/SpjERAAon4r+ffUXQe8EyysNkpbDA== caps: [mon] allow profile bootstrap-mgr client.bootstrap-osd key: AQDFyKBfNBDXCRAA7cLlh3cUqyg8b66u7qQxwg== caps: [mon] allow profile bootstrap-osd client.bootstrap-rgw key: AQDGyKBfukJDABAAizCg47klS1TxdbURLUG9GQ== caps: [mon] allow profile bootstrap-rgw mgr.ceph-1 key: AQADyaBfsfcxLhAASZ8wkOXAZsDlj+Bg/SMj3g== caps: [mds] allow * caps: [mon] allow profile mgr caps: [osd] allow * [root@ceph-1 ~]#
获取某用户信息
ceph auth get {TYPE.ID}
如
ceph auth get client.admin
[root@ceph-1 ~]# ceph auth get client.admin
exported keyring for client.admin
[client.admin]
key = AQDCyKBf4EaOJBAA30totF0nzidt0VsafbTfMQ==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
有多种方法,一般会使用
ceph auth get-or-create
如果用户不存在就创建用户 如果用户已存在就显示该用户的密钥
如
ceph auth get-or-create client.cloudstack mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=cloudstack'
甚至设置的存储池 命名空间等可以不存在
ceph auth del {TYPE}.{ID}
其中 {TYPE} 是 client 、 osd 、 mon 或 mds 之一, {ID} 是用户名或守护进程的 ID 。
ceph auth del client.cloudstack
查看用户密钥
ceph auth print-key {TYPE}.{ID}
ceph auth print-key client.cloudstack
把用户加入密钥环。好像只是把用户相关设置写到一个文件中而已
ceph auth get client.admin -o /etc/ceph/ceph.client.admin.keyring
[root@ceph-1 ~]# ceph auth get client.cloudstack -o /etc/ceph/ceph.client.cloudstack.keyring
exported keyring for client.cloudstack
[root@ceph-1 ~]# cat /etc/ceph/client.cloudstack.keyring
[client.cloudstack]
key = AQDs+KBfSjJ/OxAAdCUcTr255feHb6/ebYLnzg==
caps mon = "allow r"
caps osd = "allow class-read object_prefix rbd_children, allow rwx pool=cloudstack"
[root@ceph-1 ~]#
从密钥环中导入用户。。。
ceph auth import -i /etc/ceph/ceph.keyring
如
ceph auth import -i /etc/ceph/ceph.client.cloudstack.keyring
[root@ceph-1 ceph]# ceph auth get client.cloudstack
Error ENOENT: failed to find client.cloudstack in keyring
[root@ceph-1 ceph]# ceph auth import -i /etc/ceph/ceph.client.cloudstack.keyring
imported keyring
[root@ceph-1 ceph]# ceph auth get client.cloudstack
exported keyring for client.cloudstack
[client.cloudstack]
key = AQDs+KBfSjJ/OxAAdCUcTr255feHb6/ebYLnzg==
caps mon = "allow r"
caps osd = "allow class-read object_prefix rbd_children, allow rwx pool=cloudstack"
[root@ceph-1 ceph]#
ceph --id foo --keyring /path/to/keyring health
ceph --user foo --keyring /path/to/keyring health
ceph --id cloudstack --keyring /etc/ceph/ceph.client.cloudstack.keyring health
ceph --name client.foo --keyring /path/to/keyring health
ceph -n client.foo --keyring /path/to/keyring health
ceph --id client.cloudstack --keyring /etc/ceph/ceph.client.cloudstack.keyring health
sudo rbd map --id foo --keyring /path/to/keyring mypool/myimage
如
ceph health --keyring /etc/ceph/ceph.client.admin.keyring
如果指定用户的权限不足。。。那么命令也是会执行失败的。
如果在某些地方碰到麻烦,想从头再来,可以用下列命令清除配置:
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
用下列命令可以连 Ceph 安装包一起清除:
ceph-deploy purge {ceph-node} [{ceph-node}]
如果执行了 purge ,你必须重新安装 Ceph 。
上面已经对配置文件做出各种修改并设置应用了。这里把翻译的官方文档复制过来做总结。
ceph节点的配置文件位置是
/etc/ceph/ceph.conf
使用ceph-deploy 不是ceph时,一般会在部署节点设置ceph配置文件后再分发到所有节点。
以下内容就是把官网的复制了一遍。。。
启动 Ceph 存储集群时,各守护进程都从同一个配置文件(即默认的 ceph.conf )里查找它自己的配置。
配置文件定义了(没有定义的就是设置了默认值):
[global]
描述:
[global] 下的配置影响 Ceph 集群里的所有守护进程。
实例:
auth supported = cephx
[osd]
描述:
[osd] 下的配置影响存储集群里的所有 ceph-osd 进程,并且会覆盖 [global] 下的同一选项。
实例:
osd journal size = 1000
[mon]
描述:
[mon] 下的配置影响集群里的所有 ceph-mon 进程,并且会覆盖 [global] 下的同一选项。
实例:
mon addr = 10.0.0.101:6789
[mds]
描述:
[mds] 下的配置影响集群里的所有 ceph-mds 进程,并且会覆盖 [global] 下的同一选项。
实例:
host = myserver01
[client]
描述:
[client] 下的配置影响所有客户端(如挂载的 Ceph 文件系统、挂载的块设备等等)。
实例:
log file = /var/log/ceph/radosgw.log
1.在 [osd] 、 [mon] 、 [mds] 下更改某一类进程的配置。
2.更改特定进程的设置,如 [osd.1] 。
典型的类范畴配置包括日志尺寸、 filestore 选项等,如:
[osd]
osd journal size = 1000
[osd.1]
# 设置只影响osd.1
[mon.a]
# 设置只影响mon.a
[mds.b]
# 设置只影响mds.b
元变量大大简化了集群配置。 Ceph 会把配置的元变量展开为具体值;元变量功能很强大,可以用在配置文件的 [global] 、 [osd] 、 [mon] 、 [mds] 段里,类似于 Bash 的 shell 扩展。
Ceph 支持下列元变量:
$cluster
描述:
展开为存储集群名字,在同一套硬件上运行多个集群时有用。
实例:
/etc/ceph/$cluster.keyring
默认值:
ceph
$type
描述:
可展开为 mds 、 osd 、 mon 中的一个,有赖于当前守护进程的类型。
实例:
/var/lib/ceph/$type
$id
描述:
展开为守护进程标识符; osd.0 应为 0 , mds.a 是 a 。
实例:
/var/lib/ceph/$type/$cluster-$id
$host
描述:
展开为当前守护进程的主机名。
$name
描述:
展开为 $type.$id 。
实例:
/var/run/ceph/$cluster-$name.asok
http://docs.ceph.org.cn/rados/configuration/
初次安装ceph后,将配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点。会保存在ceph节点的/etc/ceph/目录
ceph-deploy admin {admin-node} {ceph-node}
要把改过的配置文件分发给集群内各主机,可用 config push 命令。
ceph-deploy config push {host-name [host-name]...}
配置文件不一致 需要加上 --overwrite-conf 参数 覆盖源主机配置
ceph-deploy --overwrite-conf config push {host-name [host-name]...}
要从集群内的一主机检索配置文件,用 config pull 命令。
ceph-deploy config pull host-name
就是将 主机上的配置文件传到本地。设置多个主机也只会把第一个主机的配置文件传到本地。
转自https://www.cnblogs.com/me115/p/6366374.html
Pool 、PG和OSD
Pool是存储对象的逻辑分区,它规定了数据冗余的类型和对应的副本分布策略;支持两种类型:副本(replicated)和 纠删码( Erasure Code)。
PG( placement group)是一个放置策略组,它是对象的集合,该集合里的所有对象都具有相同的放置策略;简单点说就是相同PG内的对象都会放到相同的硬盘上; PG是 ceph的核心概念, 服务端数据均衡和恢复的最小粒度就是PG;
OSD是负责物理存储的进程,一般配置成和磁盘一一对应,一块磁盘启动一个OSD进程;
下面这张图形象的描绘了它们之间的关系:
这个图其实我是觉得不是特别形象的。。。
首先搞清楚了一个概念,存储池算一个逻辑分区,和osd算是同一级。(不能这么说,只是类比一下)一个存储池有许多的PG 构成,这些PG会分布在不同的OSD上,且由于一般存储池都是副本池,所以一个PG可能有副本。由主副本构成的就是一个完整的存储池。
网上找来的一个关系图,我感觉更清晰明了一点。
一个对象只能存储在一个PG里,一个PG里可以许多不同的对象。一个PG属于一个存储池,一个存储池中很多个PG,一个存储池中的PG可能分布在不同的OSD上,且在三副本存储池中,一个PG会有两个副本,分布在不同的OSD上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。