Ceph基础
一、ceph起源
Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。
随着OpenStack的快速发展,越来越多的人使用Ceph作为OpenStack的底层共享存储,Ceph借助于云原生尤其是Kubernetes技术的发展,作为底层存储的基石,Ceph再次发力,为Kubernets有状态化业务提供了存储机制的实现。
二、ceph基础
ceph是一个开源的分布式存储系统,支持对象存储,块存储,文件系统。
ceph把每一个待管理的数据流切分为一个到多个固定大小(默认4M)的对象数据,并以原子单元完成数据的读写
对象数据的底层存储服务是有多个主机组成的存储集群,该集群为RADOS,该集群的librados是存储集群的API,支持c/c++/java/python/ruby/php/go
三、ceph组件
1)cephmon
cephmon用于维护集群状态,如集群有多少个存储池有多少个pg,及存储池和pg的映射关系,这些信息是集群互相协调的关键信息,同时还负责管理客户端到管理守护进程之间身份认证,cephmon通常需要有多个节点实现高可用架构。
2)cephmgr
cephmgr负责监控集群运行指标和集群状态,如存储使用率,系统负载,cephmgr内有多种组件如ceph-dashboard仪表盘组件。
3)cephosd
cephosd是ceph集群提供存储数据,一个磁盘就是一个osd守护进程,ceph集群中的数据存储,平衡,恢复都是有osd实现,cephosd通过向cephmon上报心跳信息告知ceph集群此osd是否可用。cephosd是ceph集群存储数据组件需要多个节点实现高可用性。
4)cephmds
提供ceph集群文件系统,对象存储和块存储不需要cephmds.
5)cephdeploy
通过cephdeploy执行各种命令行工具:rados,ceph,rbd,该节点有admin账户只对管理员开放。
四、ceph数据存储架构
Ceph中一切皆对象,不管是RBD块存储接口,RGW对象存储接口还是文件存储CephFS接口,其存储如到Ceph中的数据均可以看作是一个对象,一个文件需要切割为多个对象(object),然后将object存储到OSD中。
这些切割后的对象怎么选择到对应的OSD存储节点呢,这需要依赖于Ceph的智能调度算法CRUSH,通过CRUSH算法将对象调度到合适的OSD节点上,不管是客户端还是OSD,均使用CRUSH算法来计算对象在集群中OSD的位置信息,同时保障object的副本能落到合适的OSD节点上。
1)文件切割成4M大小的数据对象
2)数据对象通过hash算法找到存储池中的pg
3)在通过crush算法找到pg映射的osd
4)pg中的主osd将对象写入到磁盘
5)主osd将数据同步给备份osd,并等到备份osd写完后返回确认消息
6)主osd将写完信息告知客户端
ceph集群搭建
一:环境要求
服务器系统:centos7.9_x86_64
ceph版本: octopus
二:搭建架构
三: 各节点服务器资源分配详情
节点类型 | 主机IP | 主机名 | 系统盘 | 数据盘1 | 数据盘2 |
mgr节点 | 10.19.14.10 | cephmgr | sda | sdb | sdc |
mon节点 | 10.19.14.23 | cephstore2 | sda | sdb | sdc |
10.19.14.25 | cephstore3 | sda | sdb | sdc | |
10.19.14.27 | cephstore1 | sda | sdb | sdc | |
store节点 | 10.19.14.23 | cephstore2 | sda | sdb | sdc |
10.19.14.25 | cephstore3 | sda | sdb | sdc | |
10.19.14.27 | cephstore1 | sda | sdb | sdc | |
四:ceph集群搭建之基础工作
1)各节点创建ceph用户
#创建ceph用户
useradd ceph
#创建ceph用户密码
passwd ceph
2)在mgr节点上切换到ceph用户,生成ssh-pub秘钥
#切换到ceph用户执行下面命令,一直敲回车即可
su - ceph
ssh-keygen
3)同步mgr节点的ceph用户公钥到osd节点
#在mgr节点同步ceph用户公钥到个节点
ssh-copy-id ceph@10.19.14.10
ssh-copy-id ceph@10.19.14.27
ssh-copy-id ceph@10.19.14.25
ssh-copy-id ceph@10.19.14.23
4)在各节点修改/etc/hosts文件添加主机名和IP对应解析
#在hosts文件里写入以下映射信息
vim /etc/hosts
10.19.14.10 cephmgr
10.19.14.27 cephstore1
10.19.14.23 cephstore2
10.19.14.25 cephstore3
5)在各节点配置ceph 的yum源
centos7的base源和epel源都改为阿里云镜像源此处不做介绍,详情参考:阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区
#配置ceph.repo文件
vim /etc/yum.repos.d/ceph.repo
[ceph]
name=ceph
baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=cephnoarch
baseurl=https://mirrors.aliyun.com/ceph/rpm-octopus/el7/noarch/
gpgcheck=0
6)在各个节点安装ceph依赖文件
#各个节点安装依赖文件
yum install -y python2-subprocess32 python36-werkzeug
pip3 install pecan -i https://pypi.douban.com/simple
7)在每个节点上添加ceph用户免密执行root权限
#在每个节点上添加ceph用户免密执行root权限
vim /etc/sudoers
ceph ALL=(ALL) NOPASSWD: ALL
8)在mgr节点创建ceph集群配置文件
#安装ceph-deploy
yum install -y ceph-deploy
#切换到ceph用户
su - ceph
#--cluster-network 为集群内部地址, --public-network 为外部可以调用地址
ceph-deploy new --cluster-network 10.19.14.10/24 --public-network 10.19.14.10/24 cephmgr
9)在mgr节点上修改ceph.conf配置
#在ceph用户家目录下修改ceph.conf配置文件
vim ceph.conf
[global]
fsid = 3ef172a8-147b-442d-a24a-1cd17ae2357e
public_network = 10.19.14.10/24
cluster_network = 10.19.14.10/24
mon_initial_members = cephstore1 #修改此处mon的主机名称
mon_host = 10.19.14.27 #修改此处mon的IP地址
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
五:ceph集群搭建之ceph-mon节点安装
1)在所有mon节点上安装ceph-mon服务
yum install -y ceph-mon
2)在mgr节点ceph用户下初始化ceph-mon主节点
#在mgr节点ceph用户下初始化mon节点
ceph-deploy mon create-initial
#在cephstore1节点验证是否安装mon成功
ps aux | grep mon
六:ceph集群搭建之ceph-mgr节点安装
1)在mgr节点上执行安装ceph-mgr服务
yum install -y ceph-mgr
2)在mgr节点ceph用户下执行创建mgr
ceph-deploy mgr create cephmgr
#验证mgr是否安装成功
ps aux | grep mgr
七:ceph集群搭建之ceph-osd节点安装(即cephstore节点)
1)在mgr节点ceph用户下初始化每个storge节点
#在mgr节点ceph用户下执行初始化每个storge节点命令
ceph-deploy install --no-adjust-repos --nogpgcheck cephstore1
ceph-deploy install --no-adjust-repos --nogpgcheck cephstore2
ceph-deploy install --no-adjust-repos --nogpgcheck cephstore3
2)在mgr节点ceph用户下依次执行擦除磁盘数据
ceph-deploy disk zap cephstore1 /dev/sdb # 节点名称 #磁盘名称
ceph-deploy disk zap cephstore1 /dev/sdc
ceph-deploy disk zap cephstore2 /dev/sdb
ceph-deploy disk zap cephstore2 /dev/sdc
ceph-deploy disk zap cephstore3 /dev/sdb
ceph-deploy disk zap cephstore3 /dev/sdc
3)在mgr节点ceph用户下添加磁盘为OSD
ceph-deploy osd create cephstore1 --data /dev/sdb
ceph-deploy osd create cephstore1 --data /dev/sdc
ceph-deploy osd create cephstore2 --data /dev/sdb
ceph-deploy osd create cephstore2 --data /dev/sdc
ceph-deploy osd create cephstore3 --data /dev/sdb
ceph-deploy osd create cephstore3 --data /dev/sdc
八:查看集群信息
把ceph家用户下的 ceph.conf 和 ceph.client.admin.keyring 文件移动到/etc/ceph/ 目录下
切换到root用户下,执行ceph -s
处理 mon is allowing insecure global_id reclaim 警告
执行以下命令即可
ceph config set mon auth_allow_insecure_global_id_reclaim false
但是没有对ceph-mon节点和ceph-mgr节点进行高可用扩展,那如何实现ceph-mon 和ceph-mgr的高可用呢?
上篇规划的集群架构
本篇规划新添加14.23为新增ceph-mon, 14.27为新增的ceph-mgr
一:添加ceph-mon节点到ceph集群
1)上一篇已经介绍了在节点上如何安装ceph-mon, 在需要添加到ceph集群的mon节点上安装cepn-mon服务
yum install -y ceph-mon
2)在mgr节点ceph用户下把新增加的ceph-mon节点添加到ceph集群
#在mgr节点ceph用户下执行
ceph-deploy mon add cephstore2
3)在mgr节点上切换到root用户下查看集群状态
#切换到root用户下查看集群状态
ceph -s
可以看到services下mon下有2daemons, 分别为cephstore1,cephstore2
二:添加ceph-mgr节点到ceph集群
1)上一篇已经介绍了在节点上如何安装ceph-mgr, 在需要添加到ceph集群的mgr节点上安装cepn-mon服务
#在cephstore1上安装ceph-mgr服务
yum install -y ceph-mgr
2)在mgr节点ceph用户下把新增加的ceph-mgr节点添加到ceph集群
#在mgr节点ceph用户下执行
ceph-deploy mgr create cephstore1
3)在mgr节点上切换到root用户下查看集群状态
# 在mgr节点切换到root用户下执行
ceph -s
可以看到services下 mgr节点信息,cephmgr为active状态,cephstore1为standbys状态
4)验证测试:把cephmgr节点上的mgr服务停掉查看集群状态
systemctl stop ceph-mgr.target
可以看到mgr节点状态之前的cephstore1有standbys变为acive
以上内容为扩展ceph集群的ceph-mon 和 ceph-mgr 为高可用架构,接下来准备写写ceph集群的维护和管理。
————————————————
版权声明:本文为CSDN博主「Mr.Lilh」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_64417032/article/details/123610051
————————————————
版权声明:本文为CSDN博主「Mr.Lilh」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_64417032/article/details/123603291