ceph高可用集群部署

ceph高可用集群部署

前言:为即将在生产环境搭建ceph高可用集群做准备,测试环境搭建ceph高可用集群进行性能和高可用测试,本次ceph集群版本为15.2.9 octopus;

  • 官网:https://ceph.com/
  • GitHub:https://github.com/ceph/ceph

一、Ceph简介

​ (1)在学习Ceph之前,需要了解元数据的概念。元数据又称为中介数据、中继数据,为描述数据的数据。主要描述数据属性的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。通俗地说,就 是用于描述一个文件的特征的系统数据,比如访问权限、文件拥有者以及文件数据库的分布信息(inode)等等。在集群文件系统中,分布信息包括文件在磁盘上的位置以 及磁盘在集群中的位置。用户需要操作一个文件就必须首先得到它的元数据,才能定位到文件的位置并且得到文件的内容或相关属性。

​ (2)元数据管理

​ 元数据的管理方式有2种方式:集中式管理和分布式管理。

集中式管理是指在系统中有一个节点专门司职元数据管理,所有元数据都存储在该节点的存储设备上。所有客户端对文件的请求前,都要先对该元数据管理器请求元数据。

分布式管理是指将元数据存放在系统的任意节点并且能动态的迁移。对元数据管理的职责也分布到各个不同的节点上。大多数集群文件系统都采用集中式的元数据管理。

因为集中式管理实现简单,一致性维护容易,在一定的操作频繁内可以提供较为满意的性能。缺点是单一失效的问题,若该服务器失效,整个系统将无法正常 工作。而且,当对元数据的操作过于频繁时,集中的元数据管理会成为整个系统的性能瓶颈。

分布式元数据管理的好处是解决了集中式管理的单一失效点问题,而且性能不会随着操作频繁而出现瓶颈。其缺点是,实现复杂,一致性维护复杂,对性能有一 定的影响。

​ (3)什么是Ceph?

​ Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式的存储系统。Ceph 独一无二地用统一的系统提供了对象、块、和文件存储功能,它可靠性高、管理简便、并且是开源软件。 Ceph 的强大足以改变贵公司的 IT 基础架构、和管理海量数据的能力。Ceph 可提供极大的伸缩性——供成千用户访问 PB 乃至 EB 级的数据。 Ceph 节点以普通硬件和智能守护进程作为支撑点, Ceph 存储集群组织起了大量节点,它们之间靠相互通讯来复制数据、并动态地重分布数据。

​ (4)Ceph的核心组件

​ Monitors:Ceph Monitor ( ceph-mon) 维护集群状态的映射,包括监视器映射、管理器映射、OSD 映射、MDS 映射和 CRUSH 映射。这些映射是 Ceph 守护进程相互协调所需的关键集群状态。监视器还负责管理守护进程和客户端之间的身份验证。通常至少需要三个监视器才能实现冗余和高可用性。

​ 管理器:Ceph 管理器守护进程 ( ceph-mgr) 负责跟踪运行时指标和 Ceph 集群的当前状态,包括存储利用率、当前性能指标和系统负载。Ceph 管理器守护进程还托管基于 Python 的模块来管理和公开 Ceph 集群信息,包括基于 Web 的Ceph 仪表板和 REST API。高可用性通常至少需要两个管理器。

​ Ceph OSD:Ceph OSD(对象存储守护进程 ceph-osd)存储数据,处理数据复制、恢复、重新平衡,并通过检查其他 Ceph OSD 守护进程的心跳来向 Ceph 监视器和管理器提供一些监控信息。通常至少需要 3 个 Ceph OSD 来实现冗余和高可用性。

​ MDS:Ceph 元数据服务器(MDS,ceph-mds)代表Ceph 文件系统存储元数据(即 Ceph 块设备和 Ceph 对象存储不使用 MDS)。Ceph的元数据服务器允许POSIX文件系统的用户来执行基本的命令(如 ls,find没有放置在一个Ceph存储集群的巨大负担,等等)。

​ (5)Ceph的其他组件

​ RADOS(Reliable Autonomic Distributed Object Store, RADOS):RADOS是Ceph 存储集群的基础。Ceph 中的一切都以对象的形式存储,而RADOS 就负责存储这些对象,而不考虑它们的数据类型。RADOS 层确保数据一致性和可靠性。对于数据一致性,它执行数据复制、故障检测和恢复。还包括数据在集群节点间的recovery。
​ Librados:简化访问RADOS的一种方法,目前支持PHP、Ruby、Java、Python、C和C++语言。它提供了Ceph 存储集群的一个本地接口RADOS ,并且是其他服务(如RBD 、RGW) 的基础,以及为CephFS 提供POSIX 接口。librados API 支持直接访问RADOS ,使得开发者能够创建自己的接口来访问Ceph 集群存储。

​ RBD:Ceph块设备。对外提供块存储。可以像磁盘一样被映射、格式化以及挂载到服务器上。支持snapshot(快照)及增量备份。
​ RGW:Ceph对象网关,提供了一个兼容S3和Swift的restful API接口。RGW还支持多租户和Openstack的keyston身份验证服务。

Ceph 将数据作为对象存储在逻辑存储池中。使用 CRUSH算法,Ceph 计算出哪个归置组应该包含该对象,并进一步计算出哪个 Ceph OSD Daemon 应该存储该归置组。CRUSH 算法使 Ceph 存储集群能够动态扩展、重新平衡和恢复。

#注意:如果ceph集群中某个osd存储使用率达到95%,整个ceph集群会卡死

二、各节点部署组件

组件 主机IP 主机名
Monitors、Ceph-mgr、MDS 192.168.69.41 ceph-1
Monitors、Ceph-mgr、MDS 192.168.69.42 ceph-2
Monitors、Ceph-mgr、MDS、OSD 192.168.69.43 ceph-3
OSD 192.168.69.44 ceph-4
OSD 192.168.69.45 ceph-5

三、操作

1、设置yum源
[SRPMS]
name=SRPMS
baseurl=https://mirrors.aliyun.com/ceph/rpm-15.2.9/el7/SRPMS/
enabled=1
gpgcheck=0
priority=1

[aarch64]
name=aarch64
baseurl=https://mirrors.aliyun.com/ceph/rpm-15.2.9/el7/aarch64/
enabled=1
gpgcheck=0
priority=1

[noarch]
name=noarch
baseurl=https://mirrors.aliyun.com/ceph/rpm-15.2.9/el7/noarch/
enabled=1
gpgcheck=0
priority=1

[x86_64]
name=x86_64
baseurl=https://mirrors.aliyun.com/ceph/rpm-15.2.9/el7/x86_64/
enabled=1
gpgcheck=0
priority=1
2、本次ceph集群使用版本为15.2.9,硬盘只需格式化即可,无需挂载,3个osd节点各有10块硬盘
[root@ceph-3 ~]# mkfs.xfs /dev/vdb					#其他硬盘依次格式化
#!/bin/bash
for i in `echo {b..k}`
do
mkfs.xfs /dev/vd$i
done

ceph-deploy节点到其他ceph节点做免密登录

3、在全部节点/etc/hosts添加主机名解析
[root@ceph-1 ~]# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.69.41  ceph-1
192.168.69.42  ceph-2
192.168.69.43  ceph-3
192.168.69.44  ceph-4
192.168.69.45  ceph-5
4、同步时间

因为是内网环境,所以将69.41作为ntp server,其他节点同步69.41的时间

[root@ceph-1 ~]# yum -y install ntp					#安装ntp
[root@ceph-1 ~]# vi /etc/ntp.conf
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.127.1.0
Fudge 127.127.1.0 stratum 10						#注释server 0 ~ server n,添加server 127.127.1.0,Fudge 127.127.1.0 stratum 	#在其他节点修改ntp.conf文件,也是注释server 0 ~ server n,添加server 192.168.69.41 Fudge 127.127.1.0 stratum 10(填写41的IP)
5、安装ceph-deploy工具
[root@ceph-1 ~]# yum -y install ceph-deploy			#安装ceph-deploy
[root@ceph-1 ~]# mkdir ceph							#创建ceph目录
[root@ceph-1 ~]# cd ceph/							#切换到ceph目录
6、使用ceph-deploy工具部署mon节点
[root@ceph-1 ceph]# ceph-deploy new ceph-1 ceph-2 ceph-3		#使用ceph-deploy工具部署mon, 如果执行ceph-deploy new  xxx报以下错误,安装python-setuptools后再次执行即可
Traceback (most recent call last):
  File "/usr/bin/ceph-deploy", line 18, in 
    from ceph_deploy.cli import main
  File "/usr/lib/python2.7/site-packages/ceph_deploy/cli.py", line 1, in 
    import pkg_resources
ImportError: No module named pkg_resourc
[root@ceph-1 ceph]# yum -y install python-setuptools			#yum安装python-setuptools
[root@ceph-1 ceph]# ceph-deploy new ceph-1 ceph-2 ceph-3		#再次执行后成功并生成配置文件
[root@ceph-1 ceph]# ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring
[root@ceph-1 ceph]# vi ceph.conf								#进入配置文件添加公网、内网、存储池副本数
[global]
fsid = de4a6428-02c9-409a-9469-9845f12266cc
mon_initial_members = ceph-1, ceph-2, ceph-3
mon_host = 192.168.69.41,192.168.69.42,192.168.69.43
cluster_network = 192.168.69.0/24								#内网网络
public_network = 192.168.69.0/24								#公网网络
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 2										#存储池副本数
7、使用ceph-deploy为各个节点安装ceph
[root@ceph-1 ceph]# ceph-deploy install --no-adjust-repos ceph-1 ceph-2 ceph-3 ceph-4 ceph-5
#因为上面我们已经配置好ceph源,因此这里使用--no-adjust-repos参数忽略设置ceph源
8、安装Ceph Monitors
[root@ceph-1 ceph]# ceph-deploy mon create ceph-1 ceph-2 ceph-3
9、收集各节点keyring文件
[root@ceph-1 ceph]# ceph-deploy gatherkeys ceph-1 ceph-2 ceph-3
[root@ceph-1 ceph]# ll
总用量 860
-rw------- 1 root root    113 11月  8 16:25 ceph.bootstrap-mds.keyring
-rw------- 1 root root    113 11月  8 16:25 ceph.bootstrap-mgr.keyring
-rw------- 1 root root    113 11月  8 16:25 ceph.bootstrap-osd.keyring
-rw------- 1 root root    113 11月  8 16:25 ceph.bootstrap-rgw.keyring
-rw------- 1 root root    151 11月  8 16:25 ceph.client.admin.keyring
-rw-r--r-- 1 root root    333 11月  8 16:12 ceph.conf
-rw-r--r-- 1 root root 344892 11月  8 16:25 ceph-deploy-ceph.log
-rw------- 1 root root     73 11月  8 14:40 ceph.mon.keyring
10、创建osd服务

该步骤也可以放到最后执行

[root@ceph-1 ceph]# ceph-deploy osd create --data /dev/vdb ceph-3  --journal /dev/vdk1			#create创建,--data指定硬盘路径,ceph-3(主机名);--joutnal指定日志盘(可以是整块硬盘或分区)

硬盘多的话可以用脚本执行

#!/bin/bash
for i in `echo {b..k}`
do
ceph-deploy osd create --data /dev/vd$i ceph-3 --journal /dev/vdk1 
done
11、扩容osd
[root@ceph-1 ceph]# ceph-deploy disk zap ceph-3 /dev/vdc					#对需要添加osd的硬盘进行数据删除,如果是新增硬盘此步可忽略
[root@ceph-1 ceph]# ceph-deploy osd create ceph-3 --data /dev/vdc --journal /dev/vdk1			#将数据删除完成的硬盘的再次通过create添加到osd服务

需要扩容的硬盘比较多可以用脚本执行

#!/bin/bash
for i in `echo {b..p}`
do
ceph-deploy disk zap ceph-3 /dev/vd$i
ceph-deploy osd create ceph-3 --data /dev/vd$i --journal /dev/vdk1
done
12、ceph集群管理权限

如果想要让某台主机使用ceph 命令管理集群,节点上需安装ceph,且需要使用admin参数赋予权限

[root@ceph-1 ceph]# ceph-deploy admin ceph-1 ceph-2 ceph-3
[root@ceph-1 ceph]# ll | grep ceph.client.admin.keyring						
-rw------- 1 root root    151 11月  8 16:25 ceph.client.admin.keyring		#执行后会生成ceph.client.admin.keyring文件,该文件删除后ceph命令将不能使用

测试ceph是否可以使用

[root@ceph-1 ceph]# ceph -s
  cluster:
    id:     de4a6428-02c9-409a-9469-9845f12266cc
    health: HEALTH_WARN
            no active mgr													#提示mgr未激活
            clock skew detected on mon.ceph-2, mon.ceph-3

  services:
    mon: 3 daemons, quorum ceph-1,ceph-2,ceph-3 (age 19h)
    mgr: no daemons active
    osd: 30 osds: 30 up (since 24m), 30 in (since 24m)

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:
13、激活mgr组件
[root@ceph-1 ceph]# ceph-deploy mgr create ceph-1 ceph-2 ceph-3			#激活mgr
[root@ceph-1 ceph]# ceph -s												#查看ceph状态
  cluster:
    id:     de4a6428-02c9-409a-9469-9845f12266cc
    health: HEALTH_WARN
            Module 'restful' has failed dependency: No module named 'pecan'			#提示restful模块未启用,因为没有名为pecan的依赖;restful提供一个ceph的API接口,pecan模块可以使用pip3进行安装
            clock skew detected on mon.ceph-2, mon.ceph-3

  services:
    mon: 3 daemons, quorum ceph-1,ceph-2,ceph-3 (age 21h)
    mgr: ceph-1(active, since 2h), standbys: ceph-2, ceph-3
    osd: 30 osds: 30 up (since 2h), 30 in (since 2h)

  data:
    pools:   1 pools, 1 pgs
    objects: 0 objects, 0 B
    usage:   31 GiB used, 269 GiB / 300 GiB avail
    pgs:     1 active+clean
14、激活mds组件
[root@ceph-1 ceph]# ceph-deploy mds create ceph-1 ceph-2 ceph-3			#激活mds
[root@ceph-1 ceph]# ceph mds stat										#查看mds状态
 3 up:standby															#3个mds为开启状态
15、创建存储池
新版本ceph已经有了自动调整pg的功能
[root@ceph-1 ceph]# ceph fs ls											#查看ceph文件系统为未启用状态
No filesystems enabled
[root@ceph-1 ceph]# ceph mgr module enable pg_autoscaler
module 'pg_autoscaler' is already enabled (always-on)					#开启pg自动调整模块
[root@ceph-1 ceph]# ceph osd pool create cephfs_data1 512 --autoscale-mode=			#创建ceph存储池,512为pg数量,cephfs_data1为存储池名称,可自定义;pg值也可以不选,直接选自动调整参数,系统会自动调整;
autoscaler是按每个池配置的,可以在以下几种模式下运行:
**警告(warn)**模式:如果建议的pg_num值与当前值相差太大,则会发出健康警告。 这是新池和现有池的默认设置。
**启用(on)**模式:无需任何管理员交互即可自动调整池pg_num。
**禁用(off)**模式:还可以为任何给定池关闭autoscaler,让管理员像以前一样手动管理pg_num。
pool 'cephfs_data' created
             (OSDs * 100) / max replication count												#(osd数*100) / 副本数
Total PGs =  ------------------------------------												#pg计算公式
              			pool size																#pool数量
[root@ceph-1 ceph]# ceph osd pool create cephfs_data2 512 --autoscale-mode=				#创建第二个存储池,cephfs必须要有两个存储池才能进行创建,一个作为元数据存储池,一个作为数据存储池
Ceph集群中的PG总数:
PG总数 = (OSD总数 * 100) / 最大副本数
** 结果必须舍入到最接近的2的N次方幂的值。
Ceph集群中每个pool中的PG总数:
存储池PG总数 = (OSD总数 * 100 / 最大副本数) / 池数

其中: = 128 ,
关于创建存储池
确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:
  *少于 5 个 OSD 时可把 pg_num 设置为 128
  *OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512
  *OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096
  *OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num 取值
  *自己计算 pg_num 取值时可借助 pgcalc 工具
随着 OSD 数量的增加,正确的 pg_num 取值变得更加重要,因为它显著地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。
PG是指定存储池存储对象的目录有多少个,PGP是存储池PG的OSD分布组合个数
PG的增加会引起PG内的数据进行分裂,分裂到相同的OSD上新生成的PG当中
PGP的增加会引起部分PG的分布进行变化,但是不会引起PG内对象的变动
16、创建Ceph文件系统
[root@ceph-1 ceph]# ceph fs new cephfs cephfs_data1 cephfs_data2		#创建ceph文件系统,cephfs_data1作为元数据存储池,cephfs_data2为数据存储池,其中cephfs可自定义
[root@ceph-1 ceph]# ceph fs ls											#再查看一下ceph文件系统
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
[root@ceph-1 ceph]# ceph mds stat										#查看mds状态
cephfs:1 {0=ceph-3=up:active} 2 up:standby
17、客户端挂载ceph文件系统

mount内核挂载比ceph-fuse工具挂载性能高三倍左右,建议使用mount内核挂载

相关参考链接:https://mp.weixin.qq.com/s/R8TC-S6h_gHPaokTGTqKeQ?

ceph-fuse工具挂载

[root@ceph-5 ~]# yum -y install ceph-fuse							#在客户端安装ceph-fuse工具
[root@ceph-5 ~]# mkdir /cephmount									#创建挂载目录
[root@ceph-1 ceph]# ceph-deploy admin 192.168.69.31						#在控制节点添加69.31为客户端,执行后会在/etc下生成ceph目录及三个文件
[root@ceph-5 /]# ll /etc/ceph/
total 8
-rw------- 1 root root 151 Nov  9 17:01 ceph.client.admin.keyring
-rw-r--r-- 1 root root 333 Nov  9 17:01 ceph.conf
-rw------- 1 root root   0 Nov  9 17:01 tmp7g5X3W
[root@ceph-5 /]# ceph-fuse -m 192.168.69.41:6789,192.168.69.42:6789,192.168.69.43:6789 /cephmount			#挂载到/cephmount目录
ceph-fuse[17536]: starting ceph client
2021-11-09T17:01:58.273+0800 7f808daf8f80 -1 init, newargv = 0x555eea2d74b0 newargc=9
ceph-fuse[17536]: starting fuse
[root@ceph-5 ~]# df -h | grep ceph
tmpfs                    2.0G   52K  2.0G    1% /var/lib/ceph/osd/ceph-2
tmpfs                    2.0G   52K  2.0G    1% /var/lib/ceph/osd/ceph-21
tmpfs                    2.0G   52K  2.0G    1% /var/lib/ceph/osd/ceph-22
tmpfs                    2.0G   52K  2.0G    1% /var/lib/ceph/osd/ceph-23
tmpfs                    2.0G   52K  2.0G    1% /var/lib/ceph/osd/ceph-24
tmpfs                    2.0G   52K  2.0G    1% /var/lib/ceph/osd/ceph-25
tmpfs                    2.0G   52K  2.0G    1% /var/lib/ceph/osd/ceph-26
tmpfs                    2.0G   52K  2.0G    1% /var/lib/ceph/osd/ceph-27
tmpfs                    2.0G   52K  2.0G    1% /var/lib/ceph/osd/ceph-28
tmpfs                    2.0G   52K  2.0G    1% /var/lib/ceph/osd/ceph-29
ceph-fuse                126G     0  126G    0% /cephmount				#查看ceph客户端已成功挂载

mount内核挂载

[root@ceph-1 ceph]# ceph auth list								#列出各组件密钥
client.admin
        key: AQB4HI5hgVjCCxAAhspRhXixUTjfVvfq0b+QeA==			#admin用户密钥
        caps: [mds] allow *
        caps: [mgr] allow *
        caps: [mon] allow *
        caps: [osd] allow *
[root@ceph-1 ceph]# ssh 192.168.69.45							#切换到69.45
[root@ceph-5 ~]# mount -t ceph 192.168.69.41:6789,192.168.69.42:6789,192.168.69.43:6789:/ /cephmount -o   name=admin,secret=AQB4HI5hgVjCCxAAhspRhXixUTjfVvfq0b+QeA==		#-t:指定挂载类型,用户名admin,密钥AQB4HI5hgVjCCxAAhspRhXixUTjfVvfq0b+QeA==

你可能感兴趣的:(linux,分布式)