Ceph分布式存储安装

Ceph介绍      

         Ceph 是一个能提供文件存储(cephfs)、块存储(rbd)和对象存储(rgw)的分布式存储系统,具有高扩展性、高性能、高可靠性等优点。Ceph 在存储的时候充分利用存储节点的计算能力,在存储每一个数据时都会通过计算得出该数据的位置,尽量的分布均衡。

英文文档

中文文档

常用分布式存储介绍

Ceph特点

  • 高性能
    • 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。

    • 考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架等。

    • 能够支持上千个存储节点的规模,支持TB到PB级的数据

  • 高可用性
    • 副本数可以灵活控制。
    • 支持故障域分割,数据强一致性。
    • 多重故障场景自动进行修复自愈。
    • 没有单点故障,自动管理。
  • 高可扩展性
    • 去中心化。
    • 扩展灵活。
    • 随着节点增加而线性增长
  • 特性丰富
    • 支持三种存储接口:块存储、文件存储、对象存储
    • 支持自定义接口,支持多种语言驱动

Ceph架构


核心组件

  • 监视器:Ceph Monitor (Ceph -mon)维护集群状态的映射,包括监视器映射、管理器映射、OSD映射、MDS映射和CRUSH映射。这些映射是Ceph守护进程相互协调所需的关键集群状态。监视器还负责管理守护进程和客户机之间的身份验证。通常至少需要三个监视器来实现冗余和高可用性。
  • 管理器:Ceph Manager守护进程(Ceph -mgr)负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率、当前性能指标和系统负载。Ceph Manager守护进程还托管基于python的模块来管理和公开Ceph集群信息,包括基于web的Ceph仪表盘和REST API。高可用性通常需要至少两个管理器。
  • Ceph OSD: Ceph OSD(对象存储守护进程,Ceph - OSD)负责存储数据,处理数据复制、恢复、再平衡,并通过检查其他Ceph OSD进程是否有心跳,为Ceph monitor和manager提供一些监控信息。通常至少需要3个Ceph osd来实现冗余和高可用性。
  • MDS: Ceph元数据服务器(MDS, Ceph - MDS)代表Ceph文件系统(即Ceph块设备和Ceph对象存储不使用MDS)存储元数据。Ceph元数据服务器允许POSIX文件系统用户执行基本命令(如ls, find等),而不会给Ceph存储集群带来巨大的负担(对象存储和块存储不需要该组件)。

数据存储流程

环境准备

       此处使用ceph-deploy工具安装ceph,ceph-deploy是一个集群自动化部署工具,基于ssh方式。

1、配置主机名解析

172.29.1.100 HL-1-100
172.29.1.101 HL-1-101
172.29.1.102 HL-1-102

2、配置yum源

mkdir /etc/yum.repos.d/repo_bak
mv /etc/yum.repos.d/*.repo  /etc/yum.repos.d/repo_bak
#配置基础源信息
wget http://mirrors.aliyun.com/repo/Centos-7.repo  -P /etc/yum.repos.d/
wget http://mirrors.aliyun.com/repo/epel-7.repo -P /etc/yum.repos.d/
#配置Ceph源
rpm -ivh https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/ceph-release-1-1.el7.noarch.rpm
cd /etc/yum.repos.d
#替换yum源
sed -i "s;download.ceph.com;mirrors.aliyun.com/ceph;" ceph.repo

 

开始安装

       以下安装步骤详情可见官网:https://docs.ceph.com/en/latest/man/8/ceph-deploy/

1、安装ceph-deploy

yum -y install ceph-deploy python-setuptools python-pip
mkdir  /etc/ceph && cd /etc/ceph    #后续操作都在此目录进行,仅HL-1-101节点执行即可

2、初始化节点

ceph-deploy new --public-network 172.29.0.0/24   HL-1-100  HL-1-101  HL-1-102

3、安装Ceph集群

      ceph-deploy能以远程的方式进入ceph集群各节点完成程序包的安装等操作,格式如下:

      eg:ceph-deploy install HOST [HOST]

#此处选择在各节点执行相关安装命令
yum -y install ceph  ceph-radosgw
#此处也可使用如下方法,等待时间较长
ceph-deploy install --no-adjust-repos  HL-1-100 HL-1-101 HL-1-102

4、配置初始化MON节点,并收集所有密钥

ceph-deploy mon create-initial 

5、把配置文件和admin密钥拷贝ceph集群各节点

ceph-deploy admin HL-1-100  HL-1-101  HL-1-102

6、创建manager节点

ceph-deploy mgr create HL-1-100
#添加多个mgr可以实现HA
ceph-deploy mgr create HL-1-101
ceph-deploy mgr create HL-1-102
ceph  -s   #查看集群状态,health: HEALTH_OK

以上集群状态异常时,相关解释参考官网:https://docs.ceph.com/en/latest/rados/operations/health-checks

 

RADOS集群添加OSD

1、列出ceph集群节点所有可用磁盘的相关信息:

ceph-deploy disk list  HL-1-100
ceph-deploy disk list  HL-1-101
ceph-deploy disk list  HL-1-102

2、擦除磁盘,清除残留数据

ceph-deploy disk  zap HL-1-100 /dev/sd{a,b,c,d,e,f,g,h,i,j}
ceph-deploy disk  zap HL-1-101 /dev/sd{a,b,c,d,e,f,g,h,i,j}
ceph-deploy disk  zap HL-1-102 /dev/sd{a,b,c,d,e,f,g,h,i,j}

3、添加osd

ceph-deploy osd  create HL-1-100 --data /dev/sd{a,b,c,d,e,f,g,h,i,j}
ceph-deploy osd  create HL-1-101 --data /dev/sd{a,b,c,d,e,f,g,h,i,j}
ceph-deploy osd  create HL-1-102 --data /dev/sd{a,b,c,d,e,f,g,h,i,j}

5、扩展监视器节点

     概述:Ceph存储集群需要至少运行一个Ceph Monitor和Ceph Mnager,为实现高可用,Ceph存储通常运行多个监视器,以免单个监视器节点整个集群崩溃。

ceph-deploy  mon add HL-1-101
ceph-deploy  mon add HL-1-102

删除osd

       官方文档

      此处在每个节点各删除2个osd,挂载本地使用。

1、查看集群的osd磁盘状态

ceph osd tree

2、先标记为out状态,标记后再次查看状态,可以发现权重置为0了,但状态还是up

ceph osd out osd.26
ceph osd tree

3、在osd.26对应的节点停止ceph-osd服务,再rm删除

systemctl status ceph-osd@26.service
systemctl stop ceph-osd@26.service
ceph osd rm osd.26

4、crush算法中和auth验证中删除

ceph -s
ceph osd crush remove osd.26
ceph auth del osd.26

5、在osd.26对应的节点上卸载

 

df -h |grep osd
umount /var/lib/ceph/osd/ceph-26

6、在osd.26对应的节点上删除osd磁盘产生的逻辑卷

 

pvs
vgs
lvremove ceph-xxxxxxxxxxxxxxx


块存储(RBD)

中文文档

RBD介绍

RBD即RADOS Block Device的简称,RBD块存储是最稳定且最常用的存储类型。RBD块设备类似磁盘可以被挂载。 RBD块设备具有快照、多副本、克隆和一致性等特性,数据以条带化的方式存储在Ceph集群的多个OSD中。
块存储本质就是将裸磁盘或类似裸磁盘(lvm)设备映射给主机使用,主机可以对其进行格式化并存储和读取数据,块设备读取速度快但是不支持共享。
ceph可以通过内核模块和librbd库提供块设备支持。客户端可以通过内核模块挂在rbd使用,客户端使用rbd块设备就像使用普通硬盘一样,可以对其就行格式化然后使用;客户应用也可以通过librbd使用ceph块,典型的是云平台的块存储服务(如下图),云平台可以使用rbd作为云的存储后端提供映像存储、volume块或者客户的系统引导盘等。


1、创建存储池

      存储池相关可参考:存储池(Pool)

eg:ceph osd pool  create [pool_name] pg_num
#创建
ceph osd pool create mypool 128
#查看当前集群有多少存储池
ceph osd lspools

      此处存在归置组(pg_num)的概念,大小设置参考:中文文档

2、创建映像

eg:rbd create --size {megabytes} {pool-name}/{image-name}
#创建映像
rbd create mypool/test-image  [--image-feature layering] --size 10G
#查看当前存储池的映像
rbd list mypool   #需指定pool_name
#查看映像信息
rbd info  mypool/test-image

3、动态调整

#扩容
rbd resize --size 15G mypool/test-image
#缩容
rbd resize --size 7G image --allow-shrink
#查看映像大小信息
rbd info mypool/test-image

4、通过KRBD访问(客户端使用)

#客户端安装ceph-common包
yum -y install ceph-common
#传递集群密钥给客户端,客户端知道集群哪里如何连接
scp  /etc/ceph/ceph.conf  /etc/ceph/ceph.client.admin.keyring      node:/etc/ceph
#将映像映射为本地磁盘
rbd map mypool/test-image
lsblk
/dev/rbd0
rbd showmapped   #查看已经映射的映像
#格式化挂载使用
mkfs.ext4  /dev/rbd0
mount /dev/rbd0   /home

5、其他操作

# 扩容操作
#blockdev --getsize64 /dev/rbd0
e2fsck -f /dev/rbd0       # 检查分区
resize2fs  /dev/rbd0      # ext4格式
xfs_growfs /dev/rbd0      # xfs格式
# 客户端撤销磁盘映射
//语法格式  rbd  unmap /dev/rbd/{poolname}/{imagename}
rbd unmap /dev/rbd/mypool/test-image或rbd  unmap /dev/rbd0
# 删除映像
rbd  rm mypool/test-image
#获取当前副本数
ceph osd pool get test-pool size
#获取pool的配置值,比如获取当前pg_num
ceph osd pool get test-pool pg_num
#查看每个pool的详细信息
ceph osd pool ls detail

6、开机自动挂载

1、写入块设备信息
cd /etc/ceph
echo >> rbdmap  <<EOF
volumes/mysql-data1.img          id=admin,keyring=/etc/ceph/ceph.client.admin.keyring
EOF
2、写入开机挂载文件
/dev/rbd0 /data ext4 defaults,_netdev 0 0
3、启动rbdmap服务
systemctl status rbdmap && systemctl start rbdmap

文件存储(CephFs)

官方文档

CephFs介绍

Ceph File System (CephFS) 是与 POSIX 标准兼容的文件系统, 能够提供对 Ceph 存储集群上的文件访问. Jewel 版本 (10.2.0) 是第一个包含稳定 CephFS 的 Ceph 版本. CephFS 需要至少一个元数据服务器 (Metadata Server - MDS) daemon (ceph-mds) 运行, MDS daemon 管理着与存储在 CephFS 上的文件相关的元数据, 并且协调着对 Ceph 存储系统的访问。
对象存储的成本比起普通的文件存储还是较高,需要购买专门的对象存储软件以及大容量硬盘。如果对数据量要求不是海量,只是为了做文件共享的时候,直接用文件存储的形式好了,性价比高。

CephFs架构

      底层是核心集群所依赖的, 包括:

  • OSDs (ceph-osd): CephFS 的数据和元数据就存储在 OSDs 上
  • MDS (ceph-mds): Metadata Servers, 管理着 CephFS 的元数据
  • Mons (ceph-mon): Monitors 管理着集群 Map 的主副本
    Ceph 存储集群的协议层是 Ceph 原生的 librados 库, 与核心集群交互.

1、安装元数据服务器

yum -y install ceph-mds

ceph-deploy mds create node03

2、创建存储池和元数据存储池

ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 128

3、创建文件系统

ceph fs new cephfs cephfs_metadata cephfs_data
#查看fs
ceph fs ls
#查看msd服务器状态
ceph mds stat

4、挂载cephfs(客户端节点)

mkdir  /home
mount -t ceph HL-1-100:6789,HL-1-101:6789,HL-1-102:6789:/ /home  -o name=admin,secret=xxxxx

5、B28挂载使用

mount -t ceph 172.29.1.100:6789,172.29.1.101:6789,172.29.1.102:6789:/ /es-snapshots/ -o name=cephfs,secret=AQDAZcxg+ZuIIxAAOeh7xhvrP97c2SM3FoJn1w==

Troubleshooting指南

此处以官网讲解做常见故障处理及处理思路总结:

一、常见错误及处理

1、clock skew detected on mon.HL-1-101, mon.HL-1-102

      处理:此报错为对应节点的时间不同步造成,可重新同步时间即可。eg: ntpdate ntp1.aliyun.com

2、Module 'dashboard' has failed: IOError("Port 8443 not free on ''",)

      处理:端口冲突引起,将dashboard迁移至其它mgr节点。eg: ceph config set mgr mgr/dashboard/server_addr HL-1-101

3、rbd: sysfs write failed

     RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable mypool/test-image object-map fast-diff deep-flatten".
     In some cases useful info is found in syslog - try "dmesg | tail".
     rbd: map failed: (6) No such device or address

     处理:rbd设备支持4种格式,但目前3.10仅支持layering格式的映像,所以在客户端使用挂载时会报此错误,其他格式的需关闭掉 rbd feature disable mypool/test-image object-map fast-diff deep-flatten或者在创建映像时就明确指定layering格式。

4、POOL_APP_NOT_ENABLED: application not enabled on 1 pool(s)

      处理:使用ceph health detail查看具体报错信息,后明确pool为rbd或车cephfs类型的存储池,便于ceph管理识别

二、排查思路

1、rbd时客户端不能正常挂载使用

     处理:可检查服务节点是否存在iptables相关规则限制,需放开相应限制

2、osd相关服务排查

     日志:/var/log/ceph、存储空间、IO

     数据恢复时可提升最大线程数:sysctl -kernel.pid_max=4194303

     nf_conntrack相关排查

原文地址:https://www.cnblogs.com/wushaoyu/p/15048602.html