ceph集群部署
最近在学习 kubernetes 过程中,想实现 pod 数据的持久化。在调研的过程中,发现 ceph 在最近几年发展火热,也有很多案例落地企业。在选型方面,个人更加倾向于社区火热的项目,GlusterFS、Ceph 都在考虑的范围之内,但是由于 GlusterFS 只提供对象存储和文件系统存储,而 Ceph 则提供对象存储、块存储以及文件系统存储。怀着对新事物的向往,果断选择 Ceph 来实现 Ceph 块存储对接 kubernetes 来实现 pod 的数据持久化。
Red Hat Ceph所具备的强大功能可以改变您公司(或组织)的IT基础架构和管理海量数据的能力,特别是对于像RHEL OSP这样的云计算平台。Red Hat Ceph具有非常好的可扩展性——数以千计的客户端可以访问PB级到EB级甚至更多的数据。
http://docs.ceph.com/docs/master/start/quick-ceph-deploy/#starting-over
1 Ceph基础介绍
Ceph是一个可靠地、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务。在虚拟化领域里,比较常用到的是Ceph的块设备存储,比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的cinder后端存储、Glance的镜像存储和虚拟机的数据存储,比较直观的是Ceph集群可以提供一个raw格式的块存储来作为虚拟机实例的硬盘。
Ceph相比其它存储的优势点在于它不单单是存储,同时还充分利用了存储节点上的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡,同时由于Ceph的良好设计,采用了CRUSH算法、HASH环等方法,使得它不存在传统的单点故障的问题,且随着规模的扩大性能并不会受到影响。
一、初始 Ceph
1.1 了解什么是块存储/对象存储/文件系统存储?
直接进入主题,ceph 目前提供对象存储(RADOSGW)、块存储RDB以及 CephFS 文件系统这 3 种功能。对于这3种功能介绍,分别如下:
1.对象存储,也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL 和其他扩展,代表主要有 Swift 、S3 以及 Gluster 等;
2.块存储,这种接口通常以 QEMU Driver 或者 Kernel Module 的方式存在,这种接口需要实现 Linux 的 Block Device 的接口或者 QEMU 提供的 Block Driver 接口,如 Sheepdog,AWS 的 EBS,×××的云硬盘和阿里云的盘古系统,还有 Ceph 的 RBD(RBD是Ceph面向块存储的接口)。在常见的存储中 DAS、SAN 提供的也是块存储;
3.文件存储,通常意义是支持 POSIX 接口,它跟传统的文件系统如 Ext4 是一个类型的,但区别在于分布式存储提供了并行化的能力,如 Ceph 的 CephFS (CephFS是Ceph面向文件存储的接口),但是有时候又会把 GlusterFS ,HDFS 这种非POSIX接口的类文件存储接口归入此类。当然 NFS、NAS也是属于文件系统存储;
2 Ceph的核心组件
Ceph的核心组件包括Ceph OSD、Ceph Monitor和Ceph MDS。
Ceph是一个分布式存储,可以提供对象存储、块存储和文件存储,其中对象存储和块存储可以很好地和各大云平台集成。一个Ceph集群中有Monitor节点、MDS节点(可选,用于文件存储)、至少两个OSD守护进程。
Ceph OSD:OSD守护进程,用于存储数据、处理数据拷贝、恢复、回滚、均衡,并通过心跳程序向Monitor提供部分监控信息。一个Ceph集群中至少需要两个OSD守护进程。
Monitor:维护集群的状态映射信息,包括monitor、OSD、Placement Group(PG)。还维护了Monitor、OSD和PG的状态改变历史信息。
MDS:存储Ceph文件系统的元数据。
表 1. Ceph 术语
名词 |
解释 |
RADOSGW |
对象网关守护进程。 |
RBD |
块存储。 |
CEPHFS |
文件存储。 |
LIBRADOS |
和 RADOS 交互的基本库 librados。Ceph 通过原生协议和 RADOS 交互,Ceph 把这种功能封装进了 librados 库,这样你就能定制自己的客户端。 |
RADOS |
存储集群 |
OSD |
Object Storage Device。RADOS 的组件,用于存储资源 |
Monitor |
监视器。RADOS 的组件,维护整个 Ceph 集群的全局状态。 |
MDS |
Ceph 元数据服务器。为 Ceph 文件系统存储元数据。 |
Ceph 常用命令
Ceph 客户端提供了非常丰富的命令用来操作块设备。在与容器对接过程中,我们需要创建块设备,删除块设备等功能,并且后续也需要针对这些功能提供相应的 REST API,方便通过 HTTP 请求的方式来操作块设备。所以这里对一些常用的命令进行说明,如表 2 所示。
表 2. Ceph 常用命令
命令 |
功能 |
rbd create |
创建块设备映像 |
rbd ls |
列出 rbd 存储池中的块设备 |
rbd info |
查看块设备信息 |
rbd diff |
可以统计 rbd 使用量 |
rbd feature disable |
禁止掉块设备的某些特性 |
rbd map |
映射块设备 |
rbd remove |
删除块设备 |
rbd resize |
更改块设备的大小 |
查看各种Map的信息可以通过如下命令:ceph osd(mon、pg) dump
环境说明
主机名 IP地址 角色
node1 192.168.110.59 MON1+OSD1+MDS1+Deploy
node2 192.168.110.62 MON2+OSD2
node3 192.168.110.64 MON3+OSD3
修改hosts(所有主机)
vim /etc/hosts
192.168.110.59 node1
192.168.110.62 node2
192.168.110.64 node3
如果不写后面创建ceph会报错如下:(解析名一定要和主机名相同)
关闭SeLinux(所有主机)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
关闭防火墙(所有主机)
systemctl disable firewalld
systemctl stop firewalld
配置NTP(所有主机)
yum -y install ntp
systemctl enable ntpd
systemctl start ntpd
systemctl disable chronyd
ntpq -p
添加Ceph的yum源(所有主机)
yum clean all
rm -rf /etc/yum.repos.d/*.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
vim /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
yum makecache
yum -y update
配置免密登陆(node1主机)
ssh-keygen -t rsa -P ""
ssh-copy-id 192.168.110.59
ssh-copy-id 192.168.110.62
ssh-copy-id 192.168.110.64
在管理节点安装 ceph-deploy(node1)
yum -y install ceph-deploy
查看版本
ceph-deploy --version
在管理节点创建集群(node1)
mkdir /etc/ceph
cd /etc/ceph
ceph-deploy new node1 node2 node3(hosts里的解析名和主机名一定要想相同,否则报错)
在管理节点上(node1),更改生成的 ceph 配置文件,添加以下内容
vim ceph.conf
#设置osd节点个数
osd pool default size = 3
#允许 ceph 集群删除 pool
[mon]
mon_allow_pool_delete = true
在管理节点给所有节点安装ceph(node1)
ceph-deploy install node1 node2 node3
配置初始monitor监视器,并收集秘钥(node1)
ceph-deploy mon create-initial
完成此过程后,您的本地目录应具有以下密钥环:
ceph.client.admin.keyring
ceph.bootstrap-mgr.keyring
ceph.bootstrap-osd.keyring
ceph.bootstrap-mds.keyring
ceph.bootstrap-rgw.keyring
ceph.bootstrap-rbd.keyring
ceph.bootstrap-rbd-mirror.keyring
注意 如果此过程失败并显示类似于“无法找到/etc/ceph/ceph.client.admin.keyring”的消息,请确保ceph.conf中为监控节点列出的IP是公共IP,而不是私有IP 。
(node1)使用ceph-deploy将配置文件和管理密钥复制到您的管理节点和Ceph节点,这样您就可以使用ceph CLI而无需在每次执行命令时指定监视器地址和ceph.client.admin.keyring
ceph-deploy admin node1 node2 node3
部署管理器守护程序: 仅适用于luminous+版本
安装ceph-mgr(node1)
ceph-deploy mgr create node1
配置OSD(node1)
创建OSD(node1)
ceph-deploy osd create --data /dev/sdb node1
ceph-deploy osd create --data /dev/sdb node2
ceph-deploy osd create --data /dev/sdb node3
注意 如果要在LVM卷上创建OSD,则参数 --data 必须是volume_group/lv_name,而不是卷的块设备的路径。
检查集群健康(node1)
ceph health
#返回简单信息
ceph -s = ceph status
返回完整信息
扩展群集
启动并运行基本群集后,下一步是展开群集。添加Ceph元数据服务器node1。然后添加Ceph Monitor和Ceph Manager node2,node3以提高可靠性和可用性。
添加元数据服务器:配置MDS服务(node1)
要使用CephFS,您至少需要一个元数据服务器。执行以下操作以创建元数据服务器:
ceph-deploy mds create node1
添加监视器
Ceph存储集群需要至少运行一个Ceph Monitor和Ceph Manager。为了实现高可用性,Ceph存储集群通常运行多个Ceph监视器,因此单个Ceph监视器的故障不会导致Ceph存储集群崩溃。Ceph使用Paxos算法,该算法需要大多数监视器(即,大于N / 2,其中N是监视器的数量)才能形成法定人数。虽然这不是必需的,但监视器的数量往往更好。
将两个Ceph监视器添加到您的群集:
ceph-deploy mon add node2 node3
一旦你添加了新的Ceph监视器,Ceph将开始同步监视器并形成一个法定人数。您可以通过执行以下操作来检查仲裁状态:
ceph quorum_status --format json-pretty
注意: 当您使用多个监视器运行Ceph时,您应该在每个监视器主机上安装和配置NTP, 确保监视器是NTP对等方。
添加管理员
Ceph Manager守护进程以活动/备用模式运行。部署其他管理器守护程序可确保在一个守护程序或主机发生故障时,另一个守护程序或主机可以在不中断服务的情况下接管。
要部署其他管理器守护程序:
ceph-deploy mgr create node2 node3
删除OSD(node1)
ceph auth del osd.0
ceph osd rm 0
配置DashBoard
创建域管理秘钥(node1)
ceph auth get-or-create mgr.node1 mon 'allow profile mgr' osd 'allow *' mds 'allow *'
开启ceph-mgr管理域(node1)
ceph-mgr -i node1
打开dashboard模块(node1)
ceph mgr module enable dashboard
绑定开启dashboard模块的ceph-mgr节点的ip地址(node1主机)
ceph config-key set mgr/dashboard/node1/server_addr 192.168.110.59
访问Dashboard (任意主机)
http://192.168.110.59:7000
ceph集群部署的更多相关文章
- ceph集群部署(基于jewel版)
环境 两个节点:ceph1.ceph2 ceph1: mon.mds.osd.0.osd.1 ceph2: osd.2.osd.3 网络配置: ceph1: 管理网络,eth0,10.0.0.20 存 ...
- 分布式存储系统之Ceph集群部署
前文我们了解了Ceph的基础架构和相关组件的介绍,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16720234.html:今天我们来部署一个ceph集群: 部 ...
- Ceph集群部署(基于Luminous版)
环境 两个节点:ceph0.ceph1 ceph0: mon.a.mds.mgr.osd.0.osd.1 ceph1: mon.b.osd.2.osd.3 操作系统:ubuntu14.04 网络配置: ...
- 理解 OpenStack + Ceph (1):Ceph + OpenStack 集群部署和配置
本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...
- 基于Ubuntu 18.04.5 LTS 部署Ceph集群测试及Ceph RDB的使用。
1.ceph简介 Ceph在一个统一的系统中独特地提供对象.块和文件存储 1.1 ceph官网架构图 1.2 架构解释 CEPH 对象存储 CEPH 块设备 CEPH 文件系统 RESTful 接 ...
- 2.Ceph 基础篇 - 集群部署及故障排查
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485243&idx=1&sn=e425c31a ...
- openstack(pike 版)集群部署(一)----基础环境部署
一.环境 1.系统: a.CentOS Linux release 7.4.1708 (Core) b.更新yum源和安装常用软件 # yum -y install epel-release ba ...
- 分布式存储ceph集群实践
1.环境规划,三台主机 10.213.14.51/24 10.213.14.52/24 10.213.14.53/24 集群网络 172.140.140.11. ...
- ceph集群
ceph集群部署 ceph理解: Ceph是一个分布式存储,可以提供对象存储.块存储和文件存储,其中对象存储和块存储可以很好地和各大云平台集成.其他具体介绍可见官网简介:http://docs.cep ...
随机推荐
- echarts更改折线图区域颜色、折线颜色、折点颜色
series : [ { name:'订单流入总数', type:'line', stack: '总量', areaStyle: { normal: { color: '#8cd5c2' //改变区域 ...
- Scala与Mongodb实践4-----数据库操具体应用
目的:在实践3中搭建了运算环境,这里学会如何使用该环境进行具体的运算和相关的排序组合等. 由数据库mongodb操作如find,aggregate等可知它们的返回类型是FindObservable.A ...
- BFC 是什么东西?
以下是本人理解的 BFC 和 官方文档BFC资料 . BFC 是页面元素的隐藏属性,全称 : Block Formatting Context 作用: 可以清除子元素浮动后不良效果在线效果地址:ht ...
- 小程序的<label>标签
用来改进表单组件的可用性. 使用for属性找到对应的id,或者将控件放在该标签下,当点击时,就会触发对应的控件. for优先级高于内部控件,内部有多个控件的时候默认触发第一个控件. 目前可以绑定的控件 ...
- JSON的学习与使用
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- spark storm 反压
因特殊业务场景,如大促.秒杀活动与突发热点事情等业务流量在短时间内剧增,形成巨大的流量毛刺,数据流入的速度远高于数据处理的速度,对流处理系统构成巨大的负载压力,如果不能正确处理,可能导致集群资源耗尽最 ...
- Spring(二)核心容器 - 简介 、BeanFactory、ApplicationContext
目录 前言 1.容器简介 2.容器的结构 2.1 BeanFactory 2.2 ApplicationContext 2.2.1 ConfigurableApplicationContext 2.2 ...
- 跨源请求cors和jsonp
0.产生跨域的原因 浏览器的同源策略 什么是浏览器的同源策略? src开发 ajax禁止 解决方法 jsonp 通过src绕过浏览器的同源策略 缺点:只发送GET请求 cors 通过设置相应头 分类 ...
- [bzoj4824][洛谷P3757][Cqoi2017]老C的键盘
Description 老 C 是个程序员. 作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序 在某种神奇力量的驱使之下跑得非常快.小 Q 也 ...
- ugui制作伸缩菜单
制作一个类似与这种格式的菜单,可以伸缩滑动的.今天正好项目需要用到类似功能,所以尝试了一下,做出如下的效果 虽然只是一个思路,但是可以扩展.声明一个object物体,为but,通过GetCompone ...