ceph1--ceph基础/搭建ceph高可用集群_哈密瓜小贼的博客-程序员ITS203_ceph高可用集群搭建

技术标签: ceph  存储  

一、ceph基础

0、存储分类

单机存储
SCSI/IDE/SATA//SAS/USB/PCI-E/SSD/M.2NVME协议(提升性能)
https://item.jd.com/49620677951.html#crumb-wrap
单机存储需考虑以下问题:磁盘空间问题、IO问题、扩容问题、高可用问题等

网络存储(带文件系统)
NFS/Samba/NAS(Network Attached Storage:网络附属存储)/SAN:(Storage Area Network,存储区域网络)

商业存储:
商业解决方案-EMC、NetAPP、戴尔、华为、浪潮
去IOE:IBM、oracle、EMC

分布式存储:
Ceph、TFS、FastDFS、MogileFS、MooseFS、GlusterFS
(软件定义的存储Software Defined Storage SDS):
https://www.vmware.com/cn/products/software-defined-storage.html
对比说明(表格)
在这里插入图片描述

有状态集群数据读写特性:

数据分为读数据和写数据,读可以在任何一个节点读,但是写只能写在特定的节点,如Redis的master、zookeeper的leader、MySQL的master等场景。

分布式存储数据特点:

数据分为数据和元数据:
元数据即是文件的属性信息(文件名、权限(属主、属组)、大小、时间戳等),在分布式存储中当客户端或者应用程序产生的客户端数据被写入到分布式存储系统的时候,会有一个服务(Name Node)提供文件元数据的路由功能,即告诉应用程序去哪个服务器去请求文件内容,然后再有(Data Node)提供数据的读写请求及数据的高可用功能。
在这里插入图片描述

1、三种存储简介:

参考阿里云的解释
https://www.aliyun.com/product/oss
参考红帽的解释:
https://www.redhat.com/zh/topics/data-storage/file-block-object-storage
文件存储会以文件和文件夹的层次结构来整理和呈现数据;
块存储会将数据拆分到任意划分且大小相同的卷中;
对象存储会管理数据并将其链接至关联的元数据。

(1)块存储:

需要格式化,将文件直接保存到磁盘上。

(2)文件存储:

提供数据存储的接口,是由操作系统针对块存储的应用,即由操作系统提供存储接口,应用程序通过调用操作系统将文件保存到块存储进行持久化。

(3)对象存储:

也称为基于对象的存储,其中的文件被拆分成多个部分并散布在多个存储服务器, 在对象存储中,数据会被分解为称为“对象”的离散单元,并保存在单个存储库中,而不是 作为文件夹中的文件或服务器上的块来保存,对象存储需要一个简单的 HTTP 应用编程接 口 (API),以供大多数客户端(各种语言)使用。

2、ceph简介:

Ceph是一个开源的分布式存储系统,同时支持对象存储、块设备、文件系统。
ceph是一个对象(object)式存储系统,它把每一个待管理的数据流(文件等数据)切分为一到多个固定大小(默认4兆)的对象数据,并以其为原子单元(原子是构成元素的最小单元)完成数据的读写。
对象数据的底层存储服务是由多个存储主机(host)组成的存储集群,该集群也被称之为RADOS(reliable automatic distributed object store)存储集群,即可靠的、自动化的、分布式的对象存储系统。
librados是RADOS存储集群的APl,支持C/C++/JAVA/python/ruby/php/go等编程语言客户端。

(1)重要概念:

在这里插入图片描述
对象访问接口(编程访问)
LibRADOS:允许直接访问统一存储池(RADOS)的函数库,支持C、C++、Java、Python、Rbuy、PHP等多种语言!

对象访问网关(应用程序访问)
RADOS SateWay:基于HTTP的对象访问网关,符合REST风格兼容S3和Swift协议

块协议转换(虚拟机、iSCSI)
RBD:可扩展、高可用的块设备,在内核级别支持QEMU/KVM

文件协议转换(客户端)
Ceph FS:支持标准POSIX协议的分布式文件系统,支持linux内核客户端和FUSE两种访问方式

统一存储池:
RADOS(Reliable,Autonomic Distributed Object Store):
一个高可用、智能化的分布式对象存储系统,支持自修复、自管理等底层数据管理功能

(2)ceph的发展史:

Ceph项目起源于于2003年在加州大学圣克鲁兹分校攻读博士期间的研究课题(Lustre环境中的可扩展问题)。
Lustre是一种平行分布式文件系统,早在1999年,由皮特·布拉姆(Peter Braam)创建的集群文件系统公司(Cluster File Systems lnc)开始研发,并于2003年发布Lustre1.0版本。
2007年Sage Weil(塞奇·威尔)毕业后,Sage Weil继续全职从事Ceph工作,
2010年3月19日,Linus Torvalds将Ceph客户端合并到2010年5月16日发布的Linux内核版本2.6.34,
2012年Sage Weil创建了Inktank Storage用于为Ceph提供专业服务和支持,
2014年4月Redhat以1.75亿美元收购inktank公司并开源.

(3)ceph的设计思想:

ceph的设计旨在实现以下目标:
每一组件皆可扩展;
无单点故障;
基于软件(而非专用设备)并且开源(无供应商锁定);
在现有的廉价硬件上运行;
尽可能自动管理,减少用户干预;

(4)ceph的版本历史:

https://docs.ceph.com/en/latest/releases/index.html
ceph的第一个版本是发布于2008年1月的0.1,直到2015年4月的0.94,后期命名规则发生改变
x.0.z-开发版(给早期测试者和勇士们)
x.1.z-候选版(用于测试集群、高手们)
x.2.z-稳定、修正版(给用户们)
x从9开始算起

到2017年底,Ceph项目都采取每年发布两个稳定版本的做法,
从Jewel版到Nautilus之前,Ceph经历过一段时间的每间隔9个月发布一个新版本,
Nautilus版本开始改为每年春季3月份发布一个稳定版本,并提供长达26个月左右的后期版本更新.
在这里插入图片描述

3、ceph组件及功能:

https://docs.ceph.com/en/latest/start/intro/
ceph术语:
http://docs.ceph.org.cn/glossary/
一个 Ceph 存储集群至少需要一个 Ceph Monitor、Ceph Manager 和 Ceph OSD。运行 Ceph 文件系统客户端时也需要 Ceph MDS元数据服务器。

OSDs(对象存储守护程序):

(Object Storage Daemon):每一块磁盘都是一个osd,一个主机由一个或多个osd组成。
(Ceph OSD, ceph-osd)存储数据,处理数据复制、恢复、重新平衡,并通过检查其他 Ceph OSD 守护进程的心跳来向 Ceph 监视器和管理器提供一些监视信息。冗余和高可用性通常需要至少三个 Ceph OSD。

moniters(ceph监视器):

( ceph-mon) 维护集群状态的映射,(比如ceph集群中有多少存储池、每个存储池有多少PG以及存储池和PG的映射关系等),包括监视器映射、管理器映射、OSD 映射、MDS 映射和 CRUSH 映射。这些映射是 Ceph 守护进程相互协调所需的关键集群状态。监视器还负责管理守护进程和客户端之间的身份验证。冗余和高可用性通常需要至少三个监视器。

managers(ceph管理器):

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

MDSs(ceph元数据服务器):

(MDS ceph-mds) 代表Ceph 文件系统存储元数据(即 Ceph 块设备和 Ceph 对象存储不使用 MDS)。Ceph 元数据服务器允许 POSIX 文件系统用户执行基本命令(如 ls、find等),而不会给 Ceph 存储集群带来巨大负担。

RADOS(ceph存储集群)

(reliable automatic distributed object store),由多个host组成的存储集群,即可靠的、自动化的、分布式的 对象存储系统。

Ceph的管理节点–命令行工具:

1.ceph的常用管理接口是一组命令行工具程序,例如rados、ceph、rbd等命令,ceph管理员可以从某个特定的ceph-mon节点执行管理操作。
2.推荐使用部署专用的管理节点对ceph进行配置管理、升级与后期维护,方便后期权限管理,管理节点的权限只对管理人员开放,可以避免一些不必要的误操作的发生。

ceph #管理pool(创建/验证/PG与PGP关联关系/查看数据信息)/管理账户(创建/验证)
rados #管理数据/文件(上传/下载/列出/修改/删除/)
rbd #初始化rbd/管理镜像(创建/启用或禁止某特性/验证/)

4、ceph逻辑架构

在这里插入图片描述

Pool(存储池):

存储池、分区,存储池的大小取决于底层的存储空间。

PG(placement group):

一个pool内部可以有多个PG存在,pool和PG都是抽象的逻辑概念,一个pool中有多少个PG可以通过公式计算。

数据存储过程:

pool:存储池,必须先创建pool才能向ceph中写数据,多个,取决于底层的存储空间,
PG:每个pool上多个PG,数据保存到PG上
OSD:每个主机上的每块磁盘都是一个osd,多个,数据通过PG保存到OSD中,数据写到主OSD再同步到从OSD实现数据的高可用性

存储文件过程:

在这里插入图片描述

第一步:计算文件到对象的映射:
计算文件到对象的映射,假如file为客户端要读写的文件,得到oid(object id)=ino+ono
ino:inode number(INO),File 的元数据序列号,File的唯一id。
ono:object number(ONO),File切分产生的某个object的序号,默认以4M切分一个块大小。
第二步:通过hash算法计算出文件对应的pool中的PG:
通过一致性HASH计算Object到PG,Object->PG映射hash(oid)&mask->pgid
第三步:通过CRUSH把对象映射到PG中的OSD
通过CRUSH算法计算PG到OSD,PG->OSD映射:[CRUSH(pgid)->(osd1,osd2,osd3)]
第四步:PG中的主OSD将对象写入到硬盘
第五步:主OSD将数据同步给备份OSD,并等待备份OSD返回确认
第六步:主OSD将写入完成返回给客户端

5、ceph元数据保存方式:

Ceph对象数据的元数据信息放在哪里呢?对象数据的元数据以key-value的形式存在,在RADOS 中有两种实现:xattrs和omap:
ceph 可选后端支持多种存储引擎,比如filestore,bluestore,kvstore,memstore,ceph使用bluestore存储对象数据的元数据信息。

xattrs(扩展属性):

是将元数据保存在对象对应文件的扩展属性中并保存到系统磁盘上,这要求支持对象存储的本地文件系统(一般是XFS)支持扩展属性。

omap(object map对象映射):

是将元数据保存在本地文件系统之外的独立key-value存储系统中,在使用filestore时是leveldb,在使用bluestore时是rocksdb,
由于filestore存在功能问题(需要将磁盘格式化为XFS格式)及元数据高可用问题等问题,因此在目前ceph主要使用bluestore。

filestore与leveldb:

ceph 早期基于filestore使用google的levelDB保存对象的元数据,LevelDb是一个持久化存储的KV系统,和Redis这种内存型的KV系统不同,
leveldb不会像Redis一样将数据放在内存从而占用大量的内存空间,而是将大部分数据存储到磁盘上,但是需要把磁盘上的leveldb空间格式化为文件系统(XFS).

FileStore将数据保存到与Posix兼容的文件系统(例如Btrfs、XFS、Ext4)。在Ceph后端使用传统的Linux文件系统尽管提供了一些好处,但也有代价,
如性能、对象属性与磁盘本地文件系统属性匹配存在限制等。
在这里插入图片描述

bluestore与rocksdb:

由于levelDB依然需要需要磁盘文件系统的支持,后期facebok对levelDB进行改进为RocksDB:https://github.com/facebook/rocksdb,RocksDB将对象数据的元数据保存在RocksDB,
但是RocksDB的数据又放在哪里呢?放在内存怕丢失,放在本地磁盘但是解决不了高可用,ceph对象数据放在了每个OSD中,那么就在在当前OSD中划分出一部分空间,
格式化为BlueFS文件系统用于保存RocksDB中的元数据信息(称为Bluestore),并实现元数据的高可用,BlueStore最大的特点是构建在裸磁盘设备之上,
并且对诸如SSD等新的存储设备做了很多优化工作。

对全SSD及全NVMe SSD闪存适配
绕过本地文件系统层,直接管理裸设备,缩短IO路径
严格分离元数据和数据,提高索引效率
使用KV索引,解决文件系统目录结构遍历效率低的问题
支持多种设备类型
解决日志“双写”问题
期望带来至少2倍的写性能提升和同等读性能
增加数据校验及数据压缩等功能

RocksDB通过中间层BlueRocksDB访问文件系统的接口。这个文件系统与传统的Linux文件系统(例如Ext4和XFS)是不同的,它不是在VFS下面的通用文件系统,
而是一个用户态的逻辑。BlueFs通过函数接口(APl,非POSIX)的方式为BlueRocksDB提供类似文件系统的能力
在这里插入图片描述

BlueStore的逻辑架构如上图所示,模块的划分都还比较清晰,我们来看下各模块的作用:
Allocator:负责裸设备的空间管理分配。
RocksDB:rocksdb是facebook 基于leveldb开发的一款kv数据库,BlueStore将元数据全部存放至RocksDB中,这些元数据包括存储预写式日志、数据对象元数据、
Ceph的omap数据信息、以及分配器的元数据。
BlueRocksEnv:这是RocksDB与BlueFS交互的接口;RocksDB提供了文件操作的接口EnvWrapper(Env封装器),可以通过继承实现该接口来自定义底层的读写操作,
BlueRocksEnv就是继承自EnvWrapper 实现对BlueFS的读写。
BlueFS:BlueFS是BlueStore针对RocksDB开发的轻量级文件系统,用于存放RocksDB产生的.sst和.log等文件。
BlockDecive:BlueStore抛弃了传统的ext4、xfs文件系统,使用直接管理裸盘的方式;BlueStore支持同时使用多种不同类型的设备,
在逻辑上BlueStore 将存储空间划分为三层:慢速(Slow)空间、高速(DB)空间、超高速(WAL)空间,不同的空间可以指定使用不同的设备类型,
当然也可使用同一块设备。

BlueStore的设计考虑了FileStore中存在的一些硬伤,抛弃了传统的文件系统直接管理裸设备,缩短了10路径,同时采用ROW的方式,避免了日志双写的问题,
在写入性能上有了极大的提高。
在这里插入图片描述

6、ceph CRUSH算法简介:

Controllers replication under scalable hashing#可控的、可复制的、可伸缩的一致性hash算法。

Ceph 使用CURSH算法来存放和管理数据,它是Ceph的智能数据分发机制。Ceph 使用CRUSH算法来准确计算数据应该被保存到哪里,以及应该从哪里读取,和保存元数据不同的是,
CRUSH按需计算出元数据,因此它就消除了对中心式的服务器/网关的需求,它使得Ceph客户端能够计算出元数据,该过程也称为CRUSH查找,然后和OSD直接通信。

1.如果是把对象直接映射到OSD之上会导致对象与OSD的对应关系过于紧密和耦合,当OSD由于故障发生变更时将会对整个ceph集群产生影响。
2.于是ceph将一个对象映射到RADOS集群的时候分为两步走:
首先使用一致性hash 算法将对象名称映射到PG2.7,然后将PGID基于CRUSH算法映射到OSD即可查到对象
3.以上两个过程都是以”实时计算”的方式完成,而没有使用传统的查询数据与块设备的对应表的方式,这样有效避免了组件的"中心化”问题,也解决了查询性能和冗余问题。
使得ceph集群扩展不再受查询的性能限制。
4.这个实时计算操作使用的就是CRUSH算法
Controllers replication under scalable hashing#可控的、可复制的、可伸缩的一致性hash算法。
CRUSH是一种分布式算法,类似于一致性hash算法,用于为RADOS存储集群控制数据的分配。

二、ceph集群部署

建议:以下操作先用root用户装好,之后在再授权给普通用户管理
版本历史:
https://docs.ceph.com/en/latest/releases/index.html
https://docs.ceph.com/en/latest/releases/octopus/ #ceph 15 即 octopus 版本支持的系统
部署:
https://github.com/ceph/ceph
https://docs.ceph.com/en/quincy/install/ #ceph的多种安装方式,官方推荐cephadm和rook,均适用于较新版本,本次采用ceph-deploy进行快速部署。
https://docs.ceph.com/projects/ceph-deploy/en/latest/ #使用ceph-deploy部署ceph
http://docs.ceph.org.cn/install/manual-deployment/ #简要部署过程

0、环境准备:

服务器准备:ubuntu1804 2c2g 40G net网卡(eth0)
node五块磁盘sda 100G sdb sdc sdd sde 30G
在这里插入图片描述
(1)修改主机名
(2)设置静态ip
(3)配置静态解析
(4)配置源文件/导入key文件
(5)创建 ceph 用户
(6)配置免秘钥登录
(7)时间同步

#修改主机名
# hostnamectl set-hostname ceph-deploy

#设置静态ip
# vim /etc/netplan/01-netcfg.yaml 
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      dhcp6: no
      addresses: [192.168.150.140/16]
      gateway4: 192.168.150.2
      nameservers:
        addresses: [8.8.8.8]
# netplan apply

#所有ceph组件的节点都配置静态解析:
cat >>/etc/hosts <<EOF
192.168.150.140    ceph-deploy
192.168.150.141    ceph-mon1
192.168.150.142    ceph-mon2
192.168.150.143    ceph-mon3
192.168.150.144    ceph-mgr1
192.168.150.145    ceph-mgr2
192.168.150.146    ceph-node1
192.168.150.147    ceph-node2
192.168.150.148    ceph-node3
192.168.150.149    ceph-node4
EOF

#配置源文件:
cat > /etc/apt/sources.list << EOF 
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic main
EOF
#导入key文件
wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | sudo apt-key add -
sleep 3
apt update

#创建 ceph 用户:
groupadd -r -g 2022 ceph && useradd -r -m -s /bin/bash -u 2022 -g 2022 ceph && echo ceph:123456 | chpasswd
#允许 ceph 用户以 sudo 执行特权命令:
echo "ceph ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

#所有节点配置免秘钥登录: 
# ssh-keygen
ssh-copy-id 192.168.150.140
ssh-copy-id 192.168.150.141
ssh-copy-id 192.168.150.142
ssh-copy-id 192.168.150.143
ssh-copy-id 192.168.150.144
ssh-copy-id 192.168.150.145
ssh-copy-id 192.168.150.146
ssh-copy-id 192.168.150.147
ssh-copy-id 192.168.150.148
ssh-copy-id 192.168.150.149

#时间同步
#设置服务器
sudo apt-get install ntp
/etc/init.d/ntp start
#设置客户端
sudo apt-get install ntpdate
cat << EOF >> /etc/crontab
*/5 * * * * root /usr/sbin/ntpdate 192.168.150.140
EOF

1、安装 ceph-deploy 部署工具

[[email protected] ~]# apt-cache madison ceph-deploy
[[email protected] ~]# apt install ceph-deploy -y
#或是基于python安装:#pip install ceph-deploy
[[email protected] ~]# ceph-deploy --help
[[email protected] ~]# mkdir /home/ceph/ceph-cluster #保存当前集群的初始化配置信息 
[[email protected] ~]# cd /home/ceph/ceph-cluster

2、初始化 mon 节点

#全部安装 Python2
# apt install python2.7 -y 
# ln -sv /usr/bin/python2.7 /usr/bin/python2
[[email protected] ceph-cluster]# ceph-deploy new --public-network 192.168.0.0/16 ceph-mon1 #此子命令用于生成一个工作ceph.conf文件,该文件将包含用于配置节点和/或将它们添加到集群的重要信息。
[[email protected] ceph-cluster]# ll
-rw-rw-r-- 1 ceph ceph 263 Oct 21 14:24 ceph.conf #自动生成的配置文件
-rw-rw-r-- 1 ceph ceph 7096 Oct 21 14:24 ceph-deploy-ceph.log #初始化日志
-rw------- 1 ceph ceph 73 Oct 21 14:24 ceph.mon.keyring #用于 ceph mon 节点内部通讯认证的秘钥环文件

[[email protected] ~]# apt install ceph-mon  -y
[[email protected] ceph-cluster]# ceph-deploy mon create-initial #初始化
[[email protected] ceph-cluster]# ll
-rw------- 1 root root    113 Aug 26 17:22 ceph.bootstrap-mds.keyring
-rw------- 1 root root    113 Aug 26 17:22 ceph.bootstrap-mgr.keyring
-rw------- 1 root root    113 Aug 26 17:22 ceph.bootstrap-osd.keyring
-rw------- 1 root root    113 Aug 26 17:22 ceph.bootstrap-rgw.keyring
-rw------- 1 root root    151 Aug 26 17:22 ceph.client.admin.keyring
#验证
[[email protected] ~]# ps -ef | grep ceph-mon
ceph      23039      1  0 17:22 ?        00:00:00 /usr/bin/ceph-mon -f --cluster ceph --id ceph-mon1 --setuser ceph --setgroup ceph
root      23527  21512  0 17:25 pts/0    00:00:00 grep --color=auto ceph-mon

#扩展 ceph-mon 节点:
#Ceph-mon 是原生具备自选举以实现高可用机制的 ceph 服务,节点数量通常是奇数。
[email protected]:~# apt install ceph-mon
[email protected]:~# apt install ceph-mon
[[email protected] ceph-cluster]$ ceph-deploy mon add ceph-mon2 #把某个监视器添加到现有集群
[[email protected] ceph-cluster]$ ceph-deploy mon add ceph-mon3
#验证 ceph-mon 状态
[[email protected] ceph-cluster]$ ceph quorum_status 
[[email protected] ceph-cluster]$ ceph quorum_status --format json-pretty
[[email protected] ceph-cluster]$ ceph -s
    mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 4m)

3、初始化 note 存储节点

[[email protected] ceph-cluster]# ceph-deploy install --no-adjust-repos --nogpgcheck ceph-node1 ceph-node2 ceph-node3 ceph-node4

#分发 admin 秘钥
[[email protected] ~]# apt install ceph-common -y
[[email protected] ~]# apt install ceph-common -y
[[email protected] ceph-cluster]# ceph-deploy admin ceph-node1 ceph-node2 ceph-node3 ceph-node4 #将集群配置和管理员密钥环放在远程nodes节点上。是他们成为集群管理节点。
#note节点验证秘钥
[[email protected] ~]# ll /etc/ceph/
-rw-------  1 root root  151 Aug 26 17:39 ceph.client.admin.keyring
-rw-r--r--  1 root root  347 Aug 26 17:39 ceph.conf
-rw-r--r--  1 root root   92 Jul  8 22:17 rbdmap
-rw-------  1 root root    0 Aug 26 17:39 tmpbl1PLS
#如果需要 ceph 用户也能执行 ceph 命令,那么就需要对 ceph 用户进行授权
[[email protected] ~]# setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring 
[[email protected] ~]# setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring 

4、初始化 ceph-mgr 节点:

[[email protected] ~]#apt install ceph-mgr -y

[[email protected] ceph-cluster]# ceph-deploy mgr --help
[[email protected] ceph-cluster]# ceph-deploy mgr create ceph-mgr1
#验证 ceph-mgr 节点: 
[[email protected] ~]# ps -ef | grep ceph
root      17155      1  0 16:48 ?        00:00:00 /usr/bin/python3.6 /usr/bin/ceph-crash
ceph      28950      1  9 18:09 ?        00:00:11 /usr/bin/ceph-mgr -f --cluster ceph --id ceph-mgr1 --setuser ceph --setgroup ceph
root      29116  15145  0 18:11 pts/0    00:00:00 grep --color=auto ceph

#扩展 mgr 节点:
[email protected]:~#apt install ceph-mgr
[[email protected] ceph-cluster]$ ceph-deploy mgr create ceph-mgr2
[[email protected] ceph-cluster]$ ceph-deploy admin ceph-mgr2 #同步配置文件到 ceph-mg2 节点
#验证:
[[email protected] ceph-cluster]# ceph -s
    mgr: ceph-mgr1(active, since 15h), standbys: ceph-mgr2

5、ceph-deploy 管理 ceph 集群

#在 ceph-deploy 节点配置一下系统环境,以方便后期可以执行 ceph 管理命令
[[email protected] ceph-cluster]# ceph-deploy admin ceph-deploy #推送证书给自己
#测试ceph命令
[[email protected] ceph-cluster]# ceph -s
[[email protected] ceph-cluster]# ceph versions
[[email protected] ceph-cluster]# ceph config set mon auth_allow_insecure_global_id_reclaim false #禁用不安全模式!

6、准备 OSD 节点

#擦除磁盘之前通过 deploy 节点对 node 节点执行安装 ceph 基本运行环境
[[email protected] ceph-cluster]# ceph-deploy install --release pacific ceph-node1
[[email protected] ceph-cluster]# ceph-deploy install --release pacific ceph-node2
[[email protected] ceph-cluster]# ceph-deploy install --release pacific ceph-node3
[[email protected] ceph-cluster]# ceph-deploy install --release pacific ceph-node4
#node 节点可选删除不需要的包
[[email protected] ~]# apt autoremove 
#列出远端存储 node 节点的磁盘信息
[[email protected] ceph-cluster]# ceph-deploy disk list ceph-node1 

#使用 ceph-deploy disk zap 擦除各 ceph node 的 ceph 数据磁盘:
[[email protected] ceph-cluster]# ceph-deploy disk zap ceph-node1 /dev/sdb
[[email protected] ceph-cluster]# ceph-deploy disk zap ceph-node1 /dev/sdc
[[email protected] ceph-cluster]# ceph-deploy disk zap ceph-node1 /dev/sdd
[[email protected] ceph-cluster]# ceph-deploy disk zap ceph-node1 /dev/sde

[[email protected] ceph-cluster]# ceph-deploy disk zap ceph-node2 /dev/sdb
[[email protected] ceph-cluster]# ceph-deploy disk zap ceph-node2 /dev/sdc
[[email protected] ceph-cluster]# ceph-deploy disk zap ceph-node2 /dev/sdd
[[email protected] ceph-cluster]# ceph-deploy disk zap ceph-node2 /dev/sde

[[email protected] ceph-cluster]# ceph-deploy disk zap ceph-node3 /dev/sdb
[[email protected] ceph-cluster]# ceph-deploy disk zap ceph-node3 /dev/sdc
[[email protected] ceph-cluster]# ceph-deploy disk zap ceph-node3 /dev/sdd
[[email protected] ceph-cluster]# ceph-deploy disk zap ceph-node3 /dev/sde

[[email protected] ceph-cluster]# ceph-deploy disk zap ceph-node4 /dev/sdb
[[email protected] ceph-cluster]# ceph-deploy disk zap ceph-node4 /dev/sdc
[[email protected] ceph-cluster]# ceph-deploy disk zap ceph-node4 /dev/sdd
[[email protected] ceph-cluster]# ceph-deploy disk zap ceph-node4 /dev/sde

#在远程节点上创建 OSD:
[[email protected] ceph-cluster]# ceph-deploy osd create ceph-node1 --data /dev/sdb
[[email protected] ceph-cluster]# ceph-deploy osd create ceph-node1 --data /dev/sdc
[[email protected] ceph-cluster]# ceph-deploy osd create ceph-node1 --data /dev/sdd
[[email protected] ceph-cluster]# ceph-deploy osd create ceph-node1 --data /dev/sde

[[email protected] ceph-cluster]# ceph-deploy osd create ceph-node2 --data /dev/sdb
[[email protected] ceph-cluster]# ceph-deploy osd create ceph-node2 --data /dev/sdc
[[email protected] ceph-cluster]# ceph-deploy osd create ceph-node2 --data /dev/sdd
[[email protected] ceph-cluster]# ceph-deploy osd create ceph-node2 --data /dev/sde

[[email protected] ceph-cluster]# ceph-deploy osd create ceph-node3 --data /dev/sdb
[[email protected] ceph-cluster]# ceph-deploy osd create ceph-node3 --data /dev/sdc
[[email protected] ceph-cluster]# ceph-deploy osd create ceph-node3 --data /dev/sdd
[[email protected] ceph-cluster]# ceph-deploy osd create ceph-node3 --data /dev/sde

[[email protected] ceph-cluster]# ceph-deploy osd create ceph-node4 --data /dev/sdb
[[email protected] ceph-cluster]# ceph-deploy osd create ceph-node4 --data /dev/sdc
[[email protected] ceph-cluster]# ceph-deploy osd create ceph-node4 --data /dev/sdd
[[email protected] ceph-cluster]# ceph-deploy osd create ceph-node4 --data /dev/sde

#验证,默认开机会自动重启
[[email protected] ceph-cluster]# ceph -s
osd: 20 osds: 20 up (since 39s), 20 in (since 49s)
[[email protected] ~]# ps -ef | grep osd
ceph        1299       1  0 19:52 ?        00:00:02 /usr/bin/ceph-osd -f --cluster ceph --id 1 --setuser ceph --setgroup ceph
ceph        1300       1  0 19:52 ?        00:00:02 /usr/bin/ceph-osd -f --cluster ceph --id 0 --setuser ceph --setgroup ceph
ceph        1301       1  0 19:52 ?        00:00:02 /usr/bin/ceph-osd -f --cluster ceph --id 2 --setuser ceph --setgroup ceph
ceph        4389       1  0 19:57 ?        00:00:01 /usr/bin/ceph-osd -f --cluster ceph --id 12 --setuser ceph --setgroup ceph
ceph        6040       1  0 19:57 ?        00:00:01 /usr/bin/ceph-osd -f --cluster ceph --id 13 --setuser ceph --setgroup ceph
root        6538    2856  0 19:59 pts/0    00:00:00 grep --color=auto osd
#设置 OSD 服务自启动
[[email protected] ~]# systemctl enable [email protected] [email protected] [email protected] [email protected]
[[email protected] ~]# systemctl enable [email protected] [email protected] [email protected] [email protected]
[[email protected] ~]# systemctl enable [email protected] [email protected] [email protected] [email protected]
[[email protected] ~]# systemctl enable [email protected] [email protected] [email protected] [email protected]

#故障移除osd
1. 停用设备:ceph osd out {
    osd-num} 
2. 停止进程:sudo systemctl stop [email protected]{
    osd-num} 
3. 移除设备:ceph osd purge {
    id} --yes-i-really-mean-it 
4. 若有 OSD 的配置信息存在于 ceph.conf 配置文件中,管理员在删除 OSD 之后手动将 其删除。

7、验证ceph集群:

[[email protected] ceph-cluster]# ceph health
HEALTH_OK
[[email protected] ceph-cluster]# ceph -s
  cluster:
    id:     20379474-76f1-40e9-bb43-47e8bcd50d3c
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 5m)
    mgr: ceph-mgr1(active, since 57m), standbys: ceph-mgr2
    osd: 16 osds: 16 up (since 48m), 16 in (since 49m)
 
  data:
    pools:   1 pools, 1 pgs
    objects: 0 objects, 0 B
    usage:   110 MiB used, 320 GiB / 320 GiB avail
    pgs:     1 active+clean

8、测试上传和下载数据

$ ceph -h #一个更底层的命令 
$ rados -h # 
#创建 pool: 
[email protected]:~$ ceph osd pool create mypool 32 32 #32PG 和 32PGP pool 'mypool' created 
[email protected]:~$ ceph pg ls-by-pool mypool | awk '{print $1,$2,$15}' #验证 PG 与 PGP 组合
#验证
[email protected]:~$ ceph osd pool ls
mypool
[email protected]:~$ rados lspools
mypool
#上传文件
[email protected]:~$ sudo rados put msg1 /var/log/syslog --pool=mypool # 把 messages 文件上传到 mypool 并指定对象 id 为 msg1
#列出文件
[email protected]:~$ rados ls --pool=mypool
#文件信息
[email protected]:~$ ceph osd map mypool msg1
#下载文件
[email protected]:~$ sudo rados get msg1 --pool=mypool /opt/my.txt
[email protected]:~$ ll /opt/
#验证下载文件: 
[email protected]:~$ head /opt/my.txt
#修改文件
[email protected]:~$ sudo rados put msg1 /etc/passwd --pool=mypool
[email protected]:~$ sudo rados get msg1 --pool=mypool /opt/2.txt
#验证文件:
[email protected]:~$ tail /opt/2.txt
#删除文件
[email protected]:~$ sudo rados rm msg1 --pool=mypool
[email protected]:~$ rados ls --pool=mypool
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44515412/article/details/119904098

智能推荐

不用setsockopt直修改系统udp接收缓存也可_小小一剑侠的博客-程序员ITS203

  //定义  //int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen)  //int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t *optlen)  //发送缓冲区  //int ...

ADC中如何确定位数以及有效位数的理解_长弓的坚持的博客-程序员ITS203_adc的位数

假设一个12位非理想的ADC,其ENOB为10bit,这并不表示把ADC的后两位删掉就可以当做一个理想的10bitADC来使用,如果去掉后两位把该ADC作为一个10bit的ADC来测试,你会发现它的ENOB不到10bit。    ENOB的计算方法是使用ADC测量出的SNDR根据公式SNDR=6.02*ENOB+1.76换算而来的,从这个公式我们可以明白这里ENOB的意思是12bit非

Android OpenCV(三十四):直线拟合_AndroidKt的博客-程序员ITS203

概念直线拟合霍夫直线检测是检测图像中是否存在直线,直线拟合则是假定我们已经知道点数据是在一条直线上,需要利用这些数据拟合出一条直线,但是由于噪声的存在,这条直线可能并不会通过大多数的数据点,此时,我们无法使用直线检测方式来寻找直线,而只能通过直线拟合的方式来求出这条直线。那么如何拟合直线呢?一般我们采用最小二乘法来保证所有数据点距离直线的距离最小,从而得出这条拟合出来的直线。最小二乘法最小二乘法是由勒让德在19世纪发现的,形式如下式:标函数=∑(观测值−理论值)2 标函数=\sum(观测值-

TM、ETM+数据介绍.doc_冰点青蛙的博客-程序员ITS203

各个波段的特征B1 为蓝色波段,该波段位于水体衰减系数最小的部位,对水体的穿透力最大,用于判别水深,研究浅海水下地形、水体浑浊度等,进行水系及浅海水域制图;B2 为绿色波段,该波段位于绿色植物的反射峰附近,对健康茂盛植物反射敏感,可以识别植物类别和评价植物生产力,对水体具有一定的穿透力,可反映水下地形、沙洲、沿岸沙坝等特征;B3 为红波段,该波段位于叶绿素的主要吸收带,可用于区分植物类

机器学习之逻辑回归(Logistic Regression)原理讲解和实例应用,果断收藏_C君莫笑的博客-程序员ITS203_逻辑回归的应用实例

逻辑回归是线性回归分析的扩展,其通过逻辑函数将回归值映射为概率值,实现了对分类问题的处理。

恒生ufx接口转变成CTP接口_六个沃德的博客-程序员ITS203_ufx和ctp的区别

        由于当初自己的程序是对接ctp接口,里面大量使用了ctp的东西,但最近又要对接恒生的系统,想着不改整个程序,把ufx接口封装成ctp的接口形式,这样上层的业务逻辑都不用改了。已实现的主要功能:ReqUserLoginReqOrderInsertReqOrderActionReqSettlementInfoConfirmReqQryOrderReq...

随便推点

安卓笔记(二)__冷月心的博客-程序员ITS203

第二章 Android UI关于布局创建布局文件5种布局类型线性布局相对布局帧布局表格布局绝对布局常用控件及其分类TextViewEditTextButton按钮点击事件RadioButtonImageViewqq登陆界面常见对话框及其分类普通对话框单选对话框多选对话框进度条对话框消息对话框自定义对话框样式和主题国际化调试单元测试LogCatDebug总结关于布局创建布局文件默认的是线...

Rust:Cargo check 时 Updating crates.io index 发生错误_毒鸡蛋的博客-程序员ITS203

Rust:Cargo check 时 Updating crates.io index 发生错误问题解决:问题 Updating crates.io indexwarning: spurious network error (2 tries remaining): SSL error: syscall failure: Connection reset by peer; class=Os (2); code=Eof (-20)warning: spurious network error (1

小白搭建nextcloud_夜明二的博客-程序员ITS203_nextcloud phpstudy

文章目录环境说明安装 Nginx配置 epel 源安装安装PHP添加php的源安装PHP及必要扩展配置php-fpm安装数据库注意数据库版本安装mariadb配置mariadb初始化数据库(方法一)直接改密码懒得初始化(方法二)为服务创建数据库和授权用户创建数据库创建授权用户配置SSL证书创建整数目录自己生成证书下载安装nextcloud下载原文件配置网站空间配置网站nginx虚拟环境修改ngni...

python怎么判断一个数是不是正整数_Python如何判断一个正整数是否是素数?_小糖元的博客-程序员ITS203

素数(Prime Number),又称质数,一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数;否则,称为合数(Composite Number)。1既不是素数,也不是合数。如2、3、5、7、11都是素数,因为找不到除了1和其本身之外的约数;而4、6、8都是合数,因为4可以整除2,6可以整除2和3,8可以整除2和4。而一个数的约数必然是不超过该数的,加上素数必需是只有1和本身是其...

linux基金会认证考试,Linux基金会宣布新的Linux认证计划-嵌入式系统-与非网_Mage Anti的博客-程序员ITS203

新计划推出首个全虚拟化、注重实际表现、不限发行版的认证考试,将有助扩大全球Linux专业人才库Marketwired 2014年8月20日美国伊利诺伊州芝加哥消息——LINUXCON+CLOUDOPEN大会——致力于促进Linux和协同开发发展的非营利性组织Linux基金会(The Linux Foundation)今天宣布面向初级系统管理员和工程师级系统管理员推出一个新的Linux基金会认证计划...

推荐文章

热门文章

相关标签