加入收藏 | 设为首页 | 会员中心 | 我要投稿 成都站长网 (https://www.028zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

【Linux运维】Ceph分布式集群存储

发布时间:2022-09-30 05:02:59 所属栏目:Linux 来源:网络
导读: Ceph基础介绍
Ceph是一个可靠的、自动重均衡、自动恢复的分布式存储系统
根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务
在虚拟化领域里,比较常用到的是Ce

Ceph基础介绍

Ceph是一个可靠的、自动重均衡、自动恢复的分布式存储系统

根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务

在虚拟化领域里,比较常用到的是Ceph的块设备存储,比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的cinder后端存储、Glance的镜像存储和虚拟机的数据存储,比较直观的是Ceph集群可以提供一个raw格式的块存储来作为虚拟机实例的硬盘

Ceph相比其它存储的优势点在于它不单单是存储,同时还充分利用了存储节点上的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡,同时由于Ceph的良好设计,采用了CRUSH算法、HASH环等方法,使得它不存在传统的单点故障的问题,且随着规模的扩大性能并不会受到影响

Ceph的核心组件

Ceph的核心组件包括Ceph OSD、Ceph Monitor和Ceph MDS

Ceph OSD:(OSD的英文全称是Object Storage Device)

Ceph OSD的架构实现由物理磁盘驱动器、Linux文件系统和Ceph OSD服务组成

对于Ceph OSD Deamon而言集群linux,Linux文件系统显性的支持了其拓展性,一般Linux文件系统有好几种,比如有BTRFS、XFS、Ext4等,BTRFS虽然有很多优点特性,但现在还没达到生产环境所需的稳定性,一般比较推荐使用XFS

Ceph Monitor:

Ceph MDS:(全称是Ceph MetaData Server)

Ceph基础架构组件

集群linux_搭建linux集群,beowulf cluster_linux集群服务器

Ceph是一个对象(object)式存储系统,它把每一个待管理的数据流(例如一个文件)切分为一到多个固定大小的对象数据,并以其为原子单元完成数据存取

对象数据的底层存储服务是由多个主机(host)组成的存储系统,该集群也被称之为RADOS(Reliable Automatic Distributed Object Store)存储集群,即可靠,自动化,分布式对象存储系统

如上图所示,librados是RADOS存储集群的API,它支持C,C++,Java,Python,Ruby和PHP等编程语言

由于直接基于librados这个API才能使用Ceph集群的话对使用者是有一定门槛的。当然,这一点Ceph官方也意识到了,于是他们还对Ceph做出了三个抽象资源,分别为RADOSGW,RBD,CEPHFS等

RadosGw,RBD和CephFS都是RADOS存储服务的客户端,他们把RADOS的存储服务接口(librados)分别从不同的角度做了进一步抽象,因而各自适用不同的应用场景,如下所示:

RadosGw:

RBD:

CephFS:

Ceph部署

| 环境介绍

集群linux_linux集群服务器_搭建linux集群,beowulf cluster

| 所有节点都添加映射关系


cat >/etc/hosts<

10.0.0.202 ceph202

10.0.0.203 ceph203

10.0.0.204 ceph204

EOF

| 配置免密登录

(后续ceph-deploy工具依赖免密登录)


# 在ceph202上生成密钥

ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' -q


# 拷贝密钥到其它节点

ssh-copy-id ceph203

ssh-copy-id ceph204


# 让所有节点共用同一套密钥

scp -rp ~/.ssh ceph203:~

scp -rp ~/.ssh ceph204:~

| ceph202 安装"ceph-deploy"工具


# 准备国内的软件源(含基础镜像软件源和epel源)

curl? -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum install epel-release -y


# 配置ceph软件源

cat > /etc/yum.repos.d/oldboyedu-ceph.repo <<'EOF'

[ceph-noarch]

name=Ceph noarch packages

baseurl=https://download.ceph.com/rpm-mimic/el7/noarch

enabled=1

gpgcheck=1

type=rpm-md

gpgkey=https://download.ceph.com/keys/release.asc

EOF


# ceph202主机安装"ceph-deploy"工具,用于后期部署ceph集群

sed -ri 's#(keepcache=)0#\11#' /etc/yum.conf

yum makecache

yum -y install ceph-deploy


# 将rpm软件源推送到其它节点

scp /etc/yum.repos.d/*.repo ceph203:/etc/yum.repos.d/

scp /etc/yum.repos.d/*.repo ceph204:/etc/yum.repos.d/

| ceph环境准备


# ceph202 节点安装ceph环境

yum -y install ceph ceph-radosgw


# 将软件打包到本地并推送到其它节点

mkdir ceph-rpm

find /var/cache/yum/ -type f -name "*.rpm" | xargs mv -t ceph-rpm/

tar zcf oldboyedu-ceph.tar.gz ceph-rpm

scp oldboyedu-ceph.tar.gz ceph203:~

scp oldboyedu-ceph.tar.gz ceph204:~


# 其它节点安装ceph环境

tar xf oldboyedu-ceph.tar.gz &&? cd ~/ceph-rpm && yum -y localinstall *.rpm

相关软件包功能说明如下:

linux集群服务器_搭建linux集群,beowulf cluster_集群linux

| 初始化ceph配置并安装组件


# 自定义创建ceph的配置文件目录~

mkdir -pv /oldboyedu/ceph/cluster && cd /oldboyedu/ceph/cluster/


# 初始化ceph的配置文件,注意观察执行命令的所在目录文件变化哟~

ceph-deploy new --public-network 10.0.0.0/24 ceph202 ceph203 ceph204


# 安装ceph-monitor并启动ceph-mon

cd /oldboyedu/ceph/cluster/ && ceph-deploy mon create-initial


# 将配置和client.admin密钥推送到指定的远程主机以便于管理集群

cd /oldboyedu/ceph/cluster/ && ceph202 ceph203 ceph204


# 安装并启动ceph-mgr组件

cd /oldboyedu/ceph/cluster/ && ceph-deploy mgr create ceph202 ceph203 ceph204


# 安装OSD设备

cd /oldboyedu/ceph/cluster

ceph-deploy osd create ceph202 --data /dev/sdb

ceph-deploy osd create ceph203 --data /dev/sdb

ceph-deploy osd create ceph204 --data /dev/sdb

使用ceph对接k8s

| 使用Ceph身份验证密钥


# 如果提供了Ceph身份验证密钥,则该密钥应首先进行base64编码,然后将编码后的字符串放入密钥yaml中。

# grep key /etc/ceph/ceph.client.admin.keyring |awk '{printf "%s", $NF}'|base64

QVFCNE54ZGhiZzZvQlJBQTZkS1VJeStheVJVV2FFUHBPMHZVNnc9PQ==


# 创建Secret资源,注意替换key的值,要和ceph集群的key保持一致哟,上一步我已经取出来了。

cat > oldboyedu-ceph-secret.yaml <<'EOF'

apiVersion: v1

kind: Secret

metadata:

name: ceph-secret

namespace: oldboyedu-tomcat

type: "kubernetes.io/rbd"

data:

key: QVFCNE54ZGhiZzZvQlJBQTZkS1VJeStheVJVV2FFUHBPMHZVNnc9PQ==

EOF


# 在K8S集群中创建Secret资源,以便于后期Pod使用该资源。

cat >oldboyedu-ceph-secret.yaml <

apiVersion: v1

kind: Secret

metadata:

name: ceph-secret

namespace: oldboyedu-tomcat

type: "kubernetes.io/rbd"

data:

key: QVFCNE54ZGhiZzZvQlJBQTZkS1VJeStheVJVV2FFUHBPMHZVNnc9PQ==

EOF


kubectl apply -f oldboyedu-ceph-secret.yaml

集群linux_linux集群服务器_搭建linux集群,beowulf cluster

| 创建k8s专用的存储池


ceph osd pool create k8s 128 128# 如果提供了Ceph身

linux集群服务器_集群linux_搭建linux集群,beowulf cluster

| 创建资源池


# 创建kubernetes集群常用的资源池

ceph osd pool create k8s 128 128


# 在k8s资源池创建块设备,值得注意的是,我们可以指定该镜像的特性,否则由于内核版本过低而无法挂载哟

rbd create -p k8s --size 1024 --image-feature layering oldboyedu-linux


# 创建K8S的资源,将MySQL的Pod持久化到ceph集群

cat >02-mysql-deploy.yml <

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

name: mysql

namespace: oldboyedu-tomcat

spec:

replicas: 1

template:

? metadata:

? ? labels:

? ? ? app: oldboyedu-mysql

? spec:

? ? nodeName: 10.0.0.104

? ? volumes:

? ? ? ?- name: mysql-data

? ? ? ? rbd:

? ? ? ? ? ?# 指定ceph集群的mon节点

? ? ? ? ? monitors:

? ? ? ? ? ?- '10.0.0.202:6789'

? ? ? ? ? ?- '10.0.0.203:6789'

? ? ? ? ? ?- '10.0.0.204:6789'

? ? ? ? ? ?# 指定存储池

? ? ? ? ? pool: k8s

? ? ? ? ? ?# 指定rbd镜像名称

? ? ? ? ? image: oldboyedu-linux

? ? ? ? ? ?# 指定文件系统类型,其会自动帮咱们进行格式化哟~

? ? ? ? ? fsType: xfs

? ? ? ? ? ?# 是否可读,如果设置为true表示只读权限哟~

? ? ? ? ? readOnly: false

? ? ? ? ? ?# 指定访问ceph集群的用户

? ? ? ? ? user: admin

? ? ? ? ? ?# 指定访问集群的密钥资源,这个就是我们自己创建的secret局部资源,请一定要确保Pod和secret在同一个namespace,否则无法访问哟。

? ? ? ? ? secretRef:

? ? ? ? ? ? name: ceph-secret

? ? ? ? ? ?# 指定镜像格式,老版本不支持该字段,因此我这里也就先注释了

? ? ? ? ? ?# imageformat: "2"

? ? ? ? ? ?# 指定镜像特性,老版本不支持该字段,因此我这里就先注释了

? ? ? ? ? ?# imagefeatures: "layering"

? ? ? ?- name: log

? ? ? ? emptyDir: {}

? ? containers:

? ? ? ?- name: mysql

? ? ? ? ?# image: 10.0.0.101:5000/mysql:5.7

? ? ? ? image: oldboyedu-mysql:5.7

? ? ? ? ?# args: ["sh","-x","/start-mysql.sh"]

? ? ? ? command: ["sh","-x","/start-mysql.sh"]

? ? ? ? ports:

? ? ? ? ?- containerPort: 3306

? ? ? ? volumeMounts:

? ? ? ? ? ?- name: mysql-data

? ? ? ? ? ? mountPath: /var/lib/mysql

? ? ? ? ? ?- name: log

? ? ? ? ? ? mountPath: /var/log

? ? ? ? env:

? ? ? ? ?- name: MYSQL_ROOT_PASSWORD

? ? ? ? ? value: '123456'

ROG

温馨提示:

使用"ceph auth ls"指令可以查看身份验证状态的列表创建的资源如下图所示,到时候可以直接参考"/oldboyedu/k8s-ceph"目录的yaml这个软件包会出现一大堆错误,需要我们手动逐个去排查,对学员说是一次不错的历练。上课要演示完整的排查流程

集群linux_搭建linux集群,beowulf cluster_linux集群服务器

| 数据写入成功

如下图所示,我们成功将数据写入啦

集群linux_linux集群服务器_搭建linux集群,beowulf cluster

总结

在本教程中,我们通过一些示例学习了如何去部署 Ceph 集群,实现对 Kubernetes 的分布式存储

感谢您的阅读,由于文档整理较费时费力,难免会有疏漏和不妥当地方,敬请谅解

(编辑:成都站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!