Ceph存储(一)

前言

本文介绍了ceph的基本知识

一、概述

分布式存储:

分布式是一种独特的系统架构,由一组网络进行通信、为了完成共同的任务而协调工作的计算机节点组成
分布式系统是为了用廉价普通的机器完成单机无法完成的计算,存储任务,利用更多的机器,处理更多的数据

常用分布式文件系统:

Lustre
Hadoop
FastDFS
Ceph
GlusterFS

Ceph:

Ceph是一个分布式存储系统,具有高可用,高扩展,高性能的特点
可提供对象存储,块存储,文件系统存储
可以提供PB级别的存储空间

ceph可以实现的存储方式:

块存储:提供像普通硬盘一样的存储,为使用者提供“硬盘”
文件系统存储:类似于NFS的共享方式,为使用者提供共享文件夹
对象存储:像百度云盘一样,需要使用单独的客户端

ceph组件:

OSD(ceph-osd):存储设备,处理数据复制、恢复、重新平衡,并通过检查其他Ceph OSD守护进程的心跳来为Ceph监视器和管理器提供一些监视信息。为了实现冗余和高可用性,通常至少需要三个Ceph OSD。
Monitors(ceph-mon):集群监控组件
维护集群状态图,包括监视器图、管理器图、OSD图、MDS图和CRUSH图。这些映射是Ceph守护进程相互协调所需的关键集群状态。监视器还负责管理守护程序和客户端之间的身份验证。为了冗余和高可用性,通常至少需要三台Monitor。
MDSs(ceph-mds):存放文件系统的元数据(对象存储和块存储不需要),Ceph元数据服务器允许POSIX文件系统用户执行基本命令(如ls、find等)。)而不会给Ceph存储集群带来巨大的负担。
管理器:Ceph Manager(ceph-mgr)负责跟踪ceph集群的运行时指标和当前状态,包括存储利用率,当前性能指标和系统负载,Ceph Manager守护进程还托管基于python的模块来管理和公开Ceph集群信息,包括基于web的Ceph仪表板和REST API。高可用性通常需要至少两台Manager。
RGW:Rados Gateway,是一个提供对象存储功能的组件,可以通过RESTful接口向外部应用程序提供可扩展和高可用的存储服务。

Ceph存储集群至少需要一个Ceph监视器、Ceph管理器和Ceph OSD(对象存储守护程序)。运行Ceph文件系统客户端时,需要Ceph元数据服务器。
部署ceph集群需要python3、podman或docker、时间服务(如chrony)、lvm2

ceph命令:

cephadm

Cephadm使用容器和systemd安装和管理Ceph集群,并与CLI(命令行)和dashboard GUI紧密集成。
cephadm与新的编排API完全集成,并完全支持新的CLI和仪表板功能来管理集群部署。
cephadm需要容器支持(podman或docker)和Python 3。
cephadm是一个用于管理Ceph集群的实用程序。可以使用它:
1、将Ceph容器添加到集群中
2、从群集中删除一个Ceph容器
3、更新Ceph容器

二、部署ceph

环境准备

主机清单:

主机名ip
client1192.168.88.10/24
ceph1192.168.88.11/24
ceph2192.168.88.12/24
ceph3192.168.88.13/24

再为ceph1-3额外添加3块20G硬盘
在pubserver上准备ansible环境

配置yum

pubserver:
# 创目录
mkdir files/
# vim files/local88.repo 
[BaseOS]
name = BaseOS
baseurl = ftp://192.168.88.240/dvd/BaseOS
enabled = 1
gpgcheck = 0
[AppStream]
name = AppStream
baseurl = ftp://192.168.88.240/dvd/AppStream
enabled = 1
gpgcheck = 0
[rpms]
name = rpms
baseurl = ftp://192.168.88.240/local
enabled = 1
gpgcheck = 0
###
# vim 01-upload-repo.yml 
---
- name: config repos.d
  hosts: all
  tasks:
    - name: delete repos.d
      file:
        path: /etc/yum.repos.d
        state: absent
    - name: create repos.d
      file:
        path: /etc/yum.repos.d
        state: directory
        mode: '0755'
    - name: upload local88
      copy:
        src: files/local88.repo
        dest: /etc/yum.repos.d/
###
运行ansible
ansible-playbook 01-upload-repo.yml 
# 配置三台主机实现名称解析,解析的名字务必与主机实际名字一致
# vim 02-modify-hosts.yml 
---
- name: add names
  hosts: ceph
  tasks:
    - name: add block
      blockinfile:
        path: /etc/hosts
        block: |
          192.168.88.11 ceph1
          192.168.88.12 ceph2
          192.168.88.13 ceph3
          192.168.88.240 quay.io
###
# 运行ansible
ansible-playbook 02-modify-hosts.yml 
#配置pubserver为NTP服务器
# 查看pubserver自己的时区,如果时区不正确需要改正
timedatectl 
timedatectl set-timezone Asia/Shanghai
# 查看时间,如果时间不正确,需要调整时间
date
date -s "年-月-日 时:分:秒"
# 配置chronyd服务
yum install -y chrony
# vim /etc/chrony.conf
23 
24 # Allow NTP client access from local network.
25 allow 192.168.0.0/16 # 为192.168开头的客户端提供时间服务
26 
27 # Serve time even if not synchronized to a time source.
28 local stratum 10 # 即使自己没有时间源,也为客户端提供时间服务
29 
###
# 起服务
systemctl enable chronyd --now
ss -ulnp | grep :123  # ntp使用udp 123端口

准备容器仓库服务器

yum install -y docker-distribution-2.6.2-2.git48294d9.el7.x86_64.rpm
systemctl enable docker-distribution --now

安装软件包,到入镜像

# vim 04-install-ceph.yml
---
- name: install pkg
  hosts: ceph
  tasks:
    - name: install pkg    # 安装软件包
      yum:
        name: python39,podman,lvm2
        state: present
### 运行ansible
ansible-playbook 04-install-ceph.yml
# 导入镜像
ceph1-ceph3:
for i in *.tar
> do
> podman load -i $i
> done
# 查看镜像
podman images
输出
REPOSITORY                        TAG         IMAGE ID      CREATED        SIZE
quay.io/ceph/ceph                 v17         cc65afd6173a  7 weeks ago    1.4 GB
quay.io/ceph/ceph-grafana         8.3.5       dad864ee21e9  8 months ago   571 MB
quay.io/prometheus/prometheus     v2.33.4     514e6a882f6e  9 months ago   205 MB
quay.io/prometheus/node-exporter  v1.3.1      1dbe0e931976  12 months ago  22.3 MB
quay.io/prometheus/alertmanager   v0.23.0     ba2b418f427c  15 months ago  58.9 MB
# 配置ceph1-3使用pubserver作为仓库服务器
pubserver:
# vim 05-config-registry.yml
---
- name: config registry
  hosts: ceph
  tasks:
    - name: modify config
      blockinfile:
        path: /etc/containers/registries.conf
        block: |
          [[registry]]
          location = "quay.io:5000"  # 指定服务器地址
          insecure = true              # 允许使用http协议
###
# 运行ansible
ansible-playbook 05-config-registry.yml
# 修改镜像名称,以便可以将其推送到自建镜像服务器
ceph1-ceph3:
podman tag quay.io/ceph/ceph:v17 quay.io:5000/ceph/ceph:v17
podman tag quay.io/ceph/ceph-grafana:8.3.5 quay.io:5000/ceph/ceph-grafana:8.3.5
podman tag quay.io/prometheus/prometheus:v2.33.4 quay.io:5000/prometheus/prometheus:v2.33.4
podman tag quay.io/prometheus/node-exporter:v1.3.1 quay.io:5000/prometheus/node-exporter:v1.3.1
podman tag quay.io/prometheus/alertmanager:v0.23.0 quay.io:5000/prometheus/alertmanager:v0.23.0

podman push quay.io:5000/ceph/ceph:v17
podman push quay.io:5000/ceph/ceph-grafana:8.3.5 
podman push quay.io:5000/prometheus/prometheus:v2.33.4 
podman push quay.io:5000/prometheus/node-exporter:v1.3.1 
podman push quay.io:5000/prometheus/alertmanager:v0.23.0 

完成此步骤,给ceph1-ceph3打快照

安装ceph

所有Ceph集群都需要至少一个监视器Monitor,以及至少与存储在集群上的对象副本一样多的OSD。引导初始监视器是部署Ceph存储集群的第一步。
Monitor部署还为整个集群设置了重要的标准,例如池的副本数量、每个OSD的放置组数量、心跳间隔、是否需要身份验证等。这些值中的大部分是默认设置的。
创建集群

#在ceph1上初始化集ceph集群。
#集群初始化完成后,将自动生成ssh免密密钥,存放在/etc/ceph/目录下
ceph1:
./cephadm bootstrap --mon-ip 192.168.88.11 --initial-dashboard-password=123456 --dashboard-password-noupdate
#ceph将会以容器化的方式部署,查看生成了6个容器。
podman ps
#拷贝密钥文件至其他节点
ssh-copy-id -f -i /etc/ceph/ceph.pub ceph2
ssh-copy-id -f -i /etc/ceph/ceph.pub ceph3
#进入管理容器,查看ceph状态
# 进入管理容器
./cephadm shell
#查看ceph状态  
ceph -s  
#查看相关容器状态,显示所有容器均已启动
ceph orch ls
#查看集群中现有主机
ceph orch host ls
#向集群中添加其他主机
ceph orch host add ceph2 192.168.88.12
ceph orch host add ceph3 192.168.88.13
#ps:删除错误的主机命令为:ceph orch host rm 主机名 --force
ceph orch host ls
#扩容MON节点。一共有3台MON,位于ceph1-ceph3
ceph orch apply mon --placement="3 ceph1 ceph2 ceph3" 
ceph -s
ceph mon stat
#ceph2和ceph3上也将会出现相关容器

添加OSD硬盘

ceph orch daemon add osd ceph1:/dev/vdb
ceph orch daemon add osd ceph1:/dev/vdc
ceph orch daemon add osd ceph1:/dev/vdd
ceph orch daemon add osd ceph2:/dev/vdb
ceph orch daemon add osd ceph2:/dev/vdc
ceph orch daemon add osd ceph2:/dev/vdd
ceph orch daemon add osd ceph3:/dev/vdb
ceph orch daemon add osd ceph3:/dev/vdc
ceph orch daemon add osd ceph3:/dev/vdd
#在节点上查询容器信息,将会发现又有新的osd容器出现
podman ps
此时ceph的状态将会是HEALTH_OK,ceph集群搭建完成。
ceph -s

故障排除:

查看服务状态:
ceph orch ps
如果有error(比如node-exporter.ceph2),则把相应的服务删除:
ceph orch daemon rm node-expoter.ceph2
然后重新配置:
ceph orch daemon reconfig node-exporter.ceph2
#或
ceph orch daemon redeploy node-exporter.ceph2
如果是mgr这样的服务出故障,删除后,部署的命令是:
ceph orch daemon reconfig mgr ceph2
#或
ceph orch daemon redeploy mgr ceph2

三、实现块存储

块设备存取数据时,可以一次存取很多。字符设备只能是字符流
ll /dev/sda
brw-rw---- 1 root disk 8, 0 Dec 12 13:15 /dev/sda
b表示block,块设备
ll /dev/tty
crw-rw-rw- 1 root tty 5, 0 Dec 12 13:31 /dev/tty
c表示character,字符设备
块存储,就是可以提供像硬盘一样的设备。使用块存储的节点,第一次连接块设备,需要对块设备进行分区、格式化,然后挂载使用。
ceph中的块设备叫做rbd,是rados block device的简写,表示ceph的块设备。rados是Reliable, Autonomic Distributed Object Store的简写,意思是“可靠、自主的分布式对象存储”。
Ceph块设备采用精简配置,可调整大小,并将数据存储在多个OSD上。
ceph提供存储时,需要使用存储池。为了给客户端提供存储资源,需要创建名为存储池的容器。存储池类似于逻辑卷管理中的卷组。卷组中包含很多硬盘和分区;存储池中包含各节点上的硬盘。
查看基础存储池信息

# 查看存储池。默认有一个名为.mgr的存储池,编号为1
进入集群容器里
ceph osd lspools
#查看存储详细使用情况
ceph df
#查看.mgr存储池的副本数量
ceph osd pool get .mgr size

在ceph中,操作块存储的命令也是rbd。
创建存储池。如果不指定操作哪一个存储池,rbd命令将会操作名为rbd的存储池。该存储池不存在,需要自己创建。

#不指定存储池名字执行查看操作。提示名为rbd的存储池不存在
rbd ls

存储池

创建存储池是需要指定存储池中PG的数量。
Placement Group简称PG,可翻译为归置组。
PG只是一个组而已,用于把存储的对象分组管理。
将数据放入集群时,对象被映射到pg,而这些pg被映射到OSD。这减少了我们需要跟踪的每个对象的元数据的数量以及我们需要运行的进程的数量。
创建并使用存储池

ceph osd pool create rbd 100
#设置ceph osd pool lsrbd存储池的应用类型是rbd。还可以是rgw或cephfs
# 语法:ceph osd pool application enable <pool-name> <app-name>
ceph osd pool application enable rbd rbd
#查看
ceph osd pool ls
ceph df
rbd ls   # 无输出内容,也不会报错

四、镜像

在存储池中划分空间提供给客户端作为硬盘使用。
划分出来的空间,术语叫做镜像。

容器内:
#创建名为img1的镜像,大小为10G
rbd create img1 --size 10G
#查看
rbd ls
rbd info img1
#扩容。容量只是承诺大小,并不会立即分配全部空间,所以值可以超过总容量。
rbd resize img1 --size 200G
rbd info img1
#删除镜像
rbd rm img1

五、ceph客户端

#安装ceph客户端软件
client1:
yum install -y ceph-common
#将ceph1上的配置文件和密钥keyring文件拷贝给客户端
scp /etc/ceph/ceph.client.admin.keyring /etc/ceph/ceph.conf 192.168.88.10:/etc/ceph/
#在客户端验证是否可以操作ceph
rbd create img1 --size 10G
rbd ls
rbd info img1
#将ceph镜像映射为本地硬盘
rbd map img1
lsblk  # rbd0来自于ceph镜像
rbd showmapped # 镜像img1映射为了本地硬盘rbd0
#应用
mkdir /data
mkfs.xfs /dev/rbd0
mount /dev/rbd0 /data/
df -h /data/
cp /etc/hosts /data/
ls /data/
#删除
rbd status img1 # 查询状态
umount /dev/rbd0 # 解除挂载
rbd unmap img1 # 解除映射
rbd rm img1 # 删除镜像
  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值