一、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: 2renderer: networkdethernets:eth0:dhcp4: nodhcp6: noaddresses: [192.168.150.140/16]gateway4: 192.168.150.2nameservers: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 部署工具

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

2、初始化 mon 节点

#全部安装 Python2
# apt install python2.7 -y
# ln -sv /usr/bin/python2.7 /usr/bin/python2
[root@ceph-deploy ceph-cluster]# ceph-deploy new --public-network 192.168.0.0/16 ceph-mon1 #此子命令用于生成一个工作ceph.conf文件,该文件将包含用于配置节点和/或将它们添加到集群的重要信息。
[root@ceph-deploy 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 节点内部通讯认证的秘钥环文件[root@ceph-mon1 ~]# apt install ceph-mon  -y
[root@ceph-deploy ceph-cluster]# ceph-deploy mon create-initial #初始化
[root@ceph-deploy 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
#验证
[root@ceph-mon1 ~]# 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 服务,节点数量通常是奇数。
root@ceph-mon2:~# apt install ceph-mon
root@ceph-mon3:~# apt install ceph-mon
[ceph@ceph-deploy ceph-cluster]$ ceph-deploy mon add ceph-mon2 #把某个监视器添加到现有集群
[ceph@ceph-deploy ceph-cluster]$ ceph-deploy mon add ceph-mon3
#验证 ceph-mon 状态
[ceph@ceph-deploy ceph-cluster]$ ceph quorum_status
[ceph@ceph-deploy ceph-cluster]$ ceph quorum_status --format json-pretty
[ceph@ceph-deploy ceph-cluster]$ ceph -smon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 4m)

3、初始化 note 存储节点

[root@ceph-deploy ceph-cluster]# ceph-deploy install --no-adjust-repos --nogpgcheck ceph-node1 ceph-node2 ceph-node3 ceph-node4#分发 admin 秘钥
[root@ceph-deploy ~]# apt install ceph-common -y
[root@ceph-node ~]# apt install ceph-common -y
[root@ceph-deploy ceph-cluster]# ceph-deploy admin ceph-node1 ceph-node2 ceph-node3 ceph-node4 #将集群配置和管理员密钥环放在远程nodes节点上。是他们成为集群管理节点。
#note节点验证秘钥
[root@ceph-node ~]# 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 用户进行授权
[root@ceph-deploy ~]# setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring
[root@ceph-node ~]# setfacl -m u:ceph:rw /etc/ceph/ceph.client.admin.keyring

4、初始化 ceph-mgr 节点:

[root@ceph-mgr1 ~]#apt install ceph-mgr -y[root@ceph-deploy ceph-cluster]# ceph-deploy mgr --help
[root@ceph-deploy ceph-cluster]# ceph-deploy mgr create ceph-mgr1
#验证 ceph-mgr 节点:
[root@ceph-mgr1 ~]# 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 节点:
root@ceph-mgr2:~#apt install ceph-mgr
[ceph@ceph-deploy ceph-cluster]$ ceph-deploy mgr create ceph-mgr2
[ceph@ceph-deploy ceph-cluster]$ ceph-deploy admin ceph-mgr2 #同步配置文件到 ceph-mg2 节点
#验证:
[root@ceph-deploy ceph-cluster]# ceph -smgr: ceph-mgr1(active, since 15h), standbys: ceph-mgr2

5、ceph-deploy 管理 ceph 集群

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

6、准备 OSD 节点

#擦除磁盘之前通过 deploy 节点对 node 节点执行安装 ceph 基本运行环境
[root@ceph-deploy ceph-cluster]# ceph-deploy install --release pacific ceph-node1
[root@ceph-deploy ceph-cluster]# ceph-deploy install --release pacific ceph-node2
[root@ceph-deploy ceph-cluster]# ceph-deploy install --release pacific ceph-node3
[root@ceph-deploy ceph-cluster]# ceph-deploy install --release pacific ceph-node4
#node 节点可选删除不需要的包
[root@ceph-node ~]# apt autoremove
#列出远端存储 node 节点的磁盘信息
[root@ceph-deploy ceph-cluster]# ceph-deploy disk list ceph-node1 #使用 ceph-deploy disk zap 擦除各 ceph node 的 ceph 数据磁盘:
[root@ceph-deploy ceph-cluster]# ceph-deploy disk zap ceph-node1 /dev/sdb
[root@ceph-deploy ceph-cluster]# ceph-deploy disk zap ceph-node1 /dev/sdc
[root@ceph-deploy ceph-cluster]# ceph-deploy disk zap ceph-node1 /dev/sdd
[root@ceph-deploy ceph-cluster]# ceph-deploy disk zap ceph-node1 /dev/sde[root@ceph-deploy ceph-cluster]# ceph-deploy disk zap ceph-node2 /dev/sdb
[root@ceph-deploy ceph-cluster]# ceph-deploy disk zap ceph-node2 /dev/sdc
[root@ceph-deploy ceph-cluster]# ceph-deploy disk zap ceph-node2 /dev/sdd
[root@ceph-deploy ceph-cluster]# ceph-deploy disk zap ceph-node2 /dev/sde[root@ceph-deploy ceph-cluster]# ceph-deploy disk zap ceph-node3 /dev/sdb
[root@ceph-deploy ceph-cluster]# ceph-deploy disk zap ceph-node3 /dev/sdc
[root@ceph-deploy ceph-cluster]# ceph-deploy disk zap ceph-node3 /dev/sdd
[root@ceph-deploy ceph-cluster]# ceph-deploy disk zap ceph-node3 /dev/sde[root@ceph-deploy ceph-cluster]# ceph-deploy disk zap ceph-node4 /dev/sdb
[root@ceph-deploy ceph-cluster]# ceph-deploy disk zap ceph-node4 /dev/sdc
[root@ceph-deploy ceph-cluster]# ceph-deploy disk zap ceph-node4 /dev/sdd
[root@ceph-deploy ceph-cluster]# ceph-deploy disk zap ceph-node4 /dev/sde#在远程节点上创建 OSD:
[root@ceph-deploy ceph-cluster]# ceph-deploy osd create ceph-node1 --data /dev/sdb
[root@ceph-deploy ceph-cluster]# ceph-deploy osd create ceph-node1 --data /dev/sdc
[root@ceph-deploy ceph-cluster]# ceph-deploy osd create ceph-node1 --data /dev/sdd
[root@ceph-deploy ceph-cluster]# ceph-deploy osd create ceph-node1 --data /dev/sde[root@ceph-deploy ceph-cluster]# ceph-deploy osd create ceph-node2 --data /dev/sdb
[root@ceph-deploy ceph-cluster]# ceph-deploy osd create ceph-node2 --data /dev/sdc
[root@ceph-deploy ceph-cluster]# ceph-deploy osd create ceph-node2 --data /dev/sdd
[root@ceph-deploy ceph-cluster]# ceph-deploy osd create ceph-node2 --data /dev/sde[root@ceph-deploy ceph-cluster]# ceph-deploy osd create ceph-node3 --data /dev/sdb
[root@ceph-deploy ceph-cluster]# ceph-deploy osd create ceph-node3 --data /dev/sdc
[root@ceph-deploy ceph-cluster]# ceph-deploy osd create ceph-node3 --data /dev/sdd
[root@ceph-deploy ceph-cluster]# ceph-deploy osd create ceph-node3 --data /dev/sde[root@ceph-deploy ceph-cluster]# ceph-deploy osd create ceph-node4 --data /dev/sdb
[root@ceph-deploy ceph-cluster]# ceph-deploy osd create ceph-node4 --data /dev/sdc
[root@ceph-deploy ceph-cluster]# ceph-deploy osd create ceph-node4 --data /dev/sdd
[root@ceph-deploy ceph-cluster]# ceph-deploy osd create ceph-node4 --data /dev/sde#验证,默认开机会自动重启
[root@ceph-deploy ceph-cluster]# ceph -s
osd: 20 osds: 20 up (since 39s), 20 in (since 49s)
[root@ceph-node ~]# 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 服务自启动
[root@ceph-node1 ~]# systemctl enable ceph-osd@0 ceph-osd@1 ceph-osd@2 ceph-osd@3
[root@ceph-node2 ~]# systemctl enable ceph-osd@5 ceph-osd@6 ceph-osd@7 ceph-osd@8
[root@ceph-node3 ~]# systemctl enable ceph-osd@10 ceph-osd@11 ceph-osd@12 ceph-osd@13
[root@ceph-node4 ~]# systemctl enable ceph-osd@15 ceph-osd@16 ceph-osd@17 ceph-osd@18#故障移除osd
1. 停用设备:ceph osd out {osd-num}
2. 停止进程:sudo systemctl stop ceph-osd@{osd-num}
3. 移除设备:ceph osd purge {id} --yes-i-really-mean-it
4. 若有 OSD 的配置信息存在于 ceph.conf 配置文件中,管理员在删除 OSD 之后手动将 其删除。

7、验证ceph集群:

[root@ceph-deploy ceph-cluster]# ceph health
HEALTH_OK
[root@ceph-deploy ceph-cluster]# ceph -scluster:id:     20379474-76f1-40e9-bb43-47e8bcd50d3chealth: HEALTH_OKservices:mon: 3 daemons, quorum ceph-mon1,ceph-mon2,ceph-mon3 (age 5m)mgr: ceph-mgr1(active, since 57m), standbys: ceph-mgr2osd: 16 osds: 16 up (since 48m), 16 in (since 49m)data:pools:   1 pools, 1 pgsobjects: 0 objects, 0 Busage:   110 MiB used, 320 GiB / 320 GiB availpgs:     1 active+clean

8、测试上传和下载数据

$ ceph -h #一个更底层的命令
$ rados -h #
#创建 pool:
ceph@ceph-deploy:~$ ceph osd pool create mypool 32 32 #32PG 和 32PGP pool 'mypool' created
ceph@ceph-deploy:~$ ceph pg ls-by-pool mypool | awk '{print $1,$2,$15}' #验证 PG 与 PGP 组合
#验证
ceph@ceph-deploy:~$ ceph osd pool ls
mypool
ceph@ceph-deploy:~$ rados lspools
mypool
#上传文件
ceph@ceph-deploy:~$ sudo rados put msg1 /var/log/syslog --pool=mypool # 把 messages 文件上传到 mypool 并指定对象 id 为 msg1
#列出文件
ceph@ceph-deploy:~$ rados ls --pool=mypool
#文件信息
ceph@ceph-deploy:~$ ceph osd map mypool msg1
#下载文件
ceph@ceph-deploy:~$ sudo rados get msg1 --pool=mypool /opt/my.txt
ceph@ceph-deploy:~$ ll /opt/
#验证下载文件:
ceph@ceph-deploy:~$ head /opt/my.txt
#修改文件
ceph@ceph-deploy:~$ sudo rados put msg1 /etc/passwd --pool=mypool
ceph@ceph-deploy:~$ sudo rados get msg1 --pool=mypool /opt/2.txt
#验证文件:
ceph@ceph-deploy:~$ tail /opt/2.txt
#删除文件
ceph@ceph-deploy:~$ sudo rados rm msg1 --pool=mypool
ceph@ceph-deploy:~$ rados ls --pool=mypool

ceph1--ceph基础/搭建ceph高可用集群相关推荐

  1. Nginx配置——搭建 Nginx 高可用集群(双机热备)

    Nginx配置--搭建 Nginx 高可用集群(双机热备) https://blog.csdn.net/zxd1435513775/article/details/102508573?utm_medi ...

  2. docker搭建redis高可用集群

    目标:docker搭建redis高可用集群 1.架构:六个redis容器,三主三从,主从复制,主机宕机从机自动替代 2.网络架构设计:设计一个专属redis的docker网络 docker netwo ...

  3. 搭建Nginx高可用集群(keepalived+双机热备)

    一.Nginx高可用 首先了解一下什么是高可用,高可用是分布式系统架构中必须考虑的因素. 我们都知道,使用nginx的反向代理和负载均衡可以解决tomcat等web容器的单点故障以及高并发等问题. 反 ...

  4. Windows环境下安装HBase(Hadoop3.1.3、HBase2.2.5)与Linux环境下搭建HBase高可用集群

    Windows环境下安装HBase 下载HBase 官网: https://hbase.apache.org/downloads.html 不同版本集合:https://archive.apache. ...

  5. 零基础带你一步步搭建Nacos高可用集群(史上最详细,赛过教科书!)为此我准备了三台云服务器+云数据库

    容我先说一句:节日快乐!永远九岁的我们当然不能错过,奥里给!{容我先说一句:节日快乐!永远九岁的我们当然不能错过,奥里给!}容我先说一句:节日快乐!永远九岁的我们当然不能错过,奥里给! 如果你不懂jd ...

  6. 搭建Eureka高可用集群

    做的快哭了已经 文章目录 Eureka可用高集群的搭建 一.Eureka的工作原理 二.Eureka中服务提供者与服务消费者的关系 三.搭建Eureka-Server和Eureka-Client 四. ...

  7. 容器编排——Kubeadm在线或离线搭建kubernetes高可用集群

    目录 1.架构简介: 2.集群架构图: 3.集群服务器: 4.修改主机名称: 5.修改hosts配置文件: 6.关闭selinux: 7.关闭防火墙: 8.关闭swap: 9.设置iptables网桥 ...

  8. 二进制方式搭建Kubernetes高可用集群(超丰富的组件概念理论总结)

    二进制方式部署Kubernetes高可用集群 文章目录 二进制方式部署Kubernetes高可用集群 1.环境准备 1.1.Kubernetes高可用集群部署方式 1.2.Kubernetes集群弃用 ...

  9. 基于keepalived搭建MySQL高可用集群

    MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...

  10. 一次性搭建Hadoop高可用集群

    前期准备: 1.修改Linux主机名 2.修改IP 3.修改主机名和IP的映射关系 /etc/hosts 注意:如果你们公司是租用的服务器或是使用的云主机(如华为用主机.阿里云主机等) /etc/ho ...

最新文章

  1. java和python都要掌握_如果两者都决定要学的话,先学Java还是Python?
  2. 【深度学习】CUDA 和 TensorRT 博客搜集
  3. boost::regex模块部分正则表达式相关的测试程序
  4. SAP UI5 初学者教程之五:视图控制器初探 试读版
  5. @Transactional注解的失效场景
  6. Python中的字符串定义
  7. 28 岁裸辞转行程序员,一年的心路历程大曝光
  8. 2019牛客暑期多校训练营(第二场)A(随机化)
  9. 自己编译nvm-window,解决无法修改镜像下载node很慢的问题!
  10. StyleGAN图像风格转换相关经典论文、项目、数据集等资源整理分享
  11. 互动媒体技术专题2——多视角认识十二个“一” 技术预演与方案设计
  12. 【力扣 912】十大排序算法
  13. 短视频如何有效涨粉?三个小技巧来帮忙,吸粉引流也不难
  14. 图的同构识别算法——C++代码实现
  15. Bypass注入(WAF绕过)
  16. 中国移动短信网关错误代码汇总(完整版)
  17. 面试官说:Spring这几个问题你回答下,月薪3万,下周来上班!
  18. Sdkman运行时INTERNET NOT REACHABLE问题和解决
  19. js获取ISO8601规范时间,使用UTC时间,格式为:YYYY-MM-DDThh:mm:ssZ
  20. Linux命令行与shell脚本编程大全第三版 学习笔记

热门文章

  1. Python中可迭代对象是什么?
  2. 【C语言】简易版_飞机小游戏
  3. 红米 10X和红米10X Pro 的区别
  4. 石川:出色不如走运 (III)?
  5. 【BZOJ1135】【POI2009】Lyz
  6. VUE路由防卫功能举例
  7. 无GPU条件下安装caffe
  8. 她笔下的水墨世界令人赞叹,中国风海报沉浸式国风体验
  9. Unity之ASE实现冰冻效果
  10. C语言判断第几天(最简版)