100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Ceph分布式存储实战:从0搭建一个存储集群 并把块设备镜像映射到CentOS 7系统上的步骤

Ceph分布式存储实战:从0搭建一个存储集群 并把块设备镜像映射到CentOS 7系统上的步骤

时间:2023-11-29 07:04:51

相关推荐

Ceph分布式存储实战:从0搭建一个存储集群 并把块设备镜像映射到CentOS 7系统上的步骤

本文配套视频和笔记:

Ceph分布式存储实战(Ceph快速上手)

B站视频在线观看链接:【千锋教育】Ceph分布式存储技术教程(进阶到实战)百度网盘链接:全新_Ceph分布式存储技术-进阶到实战 笔记+资料+视频.zip 提取码: xry9

文章目录

1. 分布式存储系统理论1.1. 认识分布式存储1.2. 分布式存储的特性1.2.1. 可扩展1.2.2. 低成本1.2.3. 高性能1.2.4. 易用1.2.5. 易管理1.3. 分布式存储的挑战和所涉及的技术1.4. 存储分类1.4.1. 本地存储1.4.2. 网络存储2. Ceph介绍2.1. Ceph简介2.2. Ceph优势2.3. Ceph架构2.4. Ceph的基本组件3. 安装Ceph集群3.1. 准备环境3.2. 配置ssh免密登录3.3. 添加下载源3.4. 安装Ceph-deploy3.5. 部署Ceph集群3.6. 配置DashBoard3.7. 配置客户端使用3.8. 升级CentOS 7的内核为最新版本3.9. 客户端安装Ceph3.10. 将块设备镜像映射到CentOS 7系统上3.11. 客户端重启之后需重新映射

1. 分布式存储系统理论

1.1. 认识分布式存储

分布式存储系统,是通过网络将数据分散存储在多台独立的设备上。

1.2. 分布式存储的特性

1.2.1. 可扩展

分布式存储系统可以扩展到几百台甚至几千台的集群规模,而且随着集群规模的增长,系统整体性能表现为线性增长。分布式存储的水平扩展有以下几个特性:

节点扩展后,旧数据会自动迁移到新节点,实现负载均衡,避免单点过热的情况出现。水平扩展只需要将新节点和原有的集群连接到同一网络,整个过程不会对业务造成影响。当节点被添加到集群,集群系统的整体容量和性能也随之线性扩展,此后新节点的资源就会被管理平台接管,被用于分配或回收。

1.2.2. 低成本

分布式存储系统的自动容错、自动负载均衡机制使其可以构建在普通的PC机之上。另外,线性扩展能力也使得增加、减少机器非常方便,可以实现自动化运维。

1.2.3. 高性能

无论是针对整个集群还是单台机器,都要求分布式存储系统具备高性能。

1.2.4. 易用

分布式存储系统需要能够提供易用的对外接口,另外,也要求具备完善的监控、运维工具,并且能够与其他系统集成。

1.2.5. 易管理

通过一个简单的WEB界面就能够对整个系统进行分配管理,运维简便,极低的管理成本。

1.3. 分布式存储的挑战和所涉及的技术

分布式存储的挑战主要在于数据、状态信息的持久化,要求在自动迁移、自动容错、并发读写的过程中保证数据的一致性。分布式存储涉及的技术主要来自两个领域:分布式系统以及数据库

1.4. 存储分类

1.4.1. 本地存储

本地存储本地的文件系统,不能在网络上使用。

Ext3、Ext4、XFS、NTFS

1.4.2. 网络存储

网络文件系统,共享的都是文件系统:

NFS:网络文件系统HDFS:分布式网络文件系统GlusterFS:分布式网络文件系统

共享的都是裸设备(块存储、磁盘):

cinder(块存储)ceph(块存储、对象存储、网络文件系统-分布式)SAN(存储区域网)

2. Ceph介绍

2.1. Ceph简介

Ceph使用C++语言开发,遵循LGPL协议开源。Sage Weil(Ceph论文发表者)于创立了以Inktank公司主导Ceph的开发和社区维护。Redhat收购Inktank公司,并发布Inktank Ceph企业版(ICE)软件,业务场景聚焦云、备份和归档,支持对象存储和块存储以及文件系统存储应用。出现Ceph开源社区版本和Redhat企业版。

Ceph的主要设计初衷是变成一个可避免单节点故障的分布式文件系统,PB级别的扩展能力,而且是一种开源自由软件,许多超融合的分布式文件系统都是基于Ceph开发的。

Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。

Ceph官网:Ceph文档:Ceph代码:/ceph/ceph

2.2. Ceph优势

高扩展性:使用普通的x86服务器,支持10~1000台服务器,支持TB~EB级的扩展。高可靠性:没有单点故障,多数据副本,自动管理,自动修复。高性能:数据分布均衡。功能全面:可用于对象存储,块设备存储和文件系统存储。

2.3. Ceph架构

基础存储系统RADOS:

基础存储系统RADOS(Reliable, Autonomous, Distributed Object Store,即可靠的、自动化的、分布式的对象存储)。所有存储在Ceph系统中的用户数据事实上最终都是由这一层来存储的。Ceph的高可靠、高可扩展、高性能、高自动化等等特性本质上也是由这一层所提供的。基础库LibRADOS:

LibRADOS这一层的功能是对RADOS进行抽象和封装,并向上层提供API,以便直接基于RADOS(而不是整个Ceph)进行应用开发。特别要注意的是,RADOS是一个对象存储系统,因此,LibRADOS实现的API也只是针对对象存储功能的。高层应用接口

RADOSGw:对象网关接口(对象存储),其作用是在LibRADOS的基础上提供抽象层次更高、更便于应用使用的上层接口。

RBD:块存储其作用是在LibRADOS的基础上提供抽象层次更高、更便于主机或虚拟机使用的上层接口。

CephFS:文件存储系统,其作用是在RADOS的基础上提供抽象层次更高、更便于客户端使用的上层接口。

2.4. Ceph的基本组件

Ceph OSD(必装)

全称是Object Storage Device,用于集群中所有数据与对象的存储。处理集群数据的复制、恢复、回填、再均衡。并向其他OSD守护进程发送心跳,然后向Mon提供一些监控信息。

当Ceph存储集群设定数据有两个副本时(一共存两份),则至少需要两个OSD守护进程即两个OSD节点,集群才能达到active+clean状态。Ceph Monitor(必装)

Ceph的监控器,主要功能是维护整个集群健康状态,提供一致性的决策,包含了Monitor map,即集群map,monitor本身不存储任何集群数据Managers(必装)

用于收集Ceph集群状态、运行指标,比如存储利用率、当前性能指标和系统负载。对外提供 Ceph Dashboard(Ceph UI)和RESTful API。高可用性通常至少需要两个管理器。Ceph MDS(可选)

全称是Ceph Metadata Server,是为Ceph文件系统提供元数据(metadata)计算、缓存与同步(也就是说,Ceph块设备和Ceph对象存储不使用MDS)。在Ceph中,元数据也是存储在OSD节点中的,MDS类似于元数据的代理缓存服务器。MDS进程并不是必须的进程,只有需要使用Ceph FS时,才需要配置MDS节点。

3. 安装Ceph集群

3.1. 准备环境

系统版本:CentOS 7.9.(需要CentOS 7.5以上)

硬件配置:5台VM,1核1G,每台Node角色的机器至少挂载1块不低于5个G的空闲盘为OSD存储

给3台Node节点添加一块大小5G以上的磁盘

lsblk

所有节点修改主机名并相互解析

修改主机名可以参考:https://coco56./article/details/123407421

vim /etc/hosts

以下是解析内容:

10.1.1.73 admin10.1.1.74 node110.1.1.75 node210.1.1.76 node310.1.1.77 ceph-client

关闭所有机器的防火墙和selinux

关闭防火墙可以参考:https://coco56./article/details/123409975,下面是关闭selinux的步骤:

先修改配置文件

vim /etc/sysconfig/selinux

%s/SELINUX=enforcing/SELINUX=disabled/gc

关闭selinux

setenforce 0

所有机器都创建一个普通用户cephu并设置密码(密码这里设置为1

useradd cephu

passwd cephu

3.2. 配置ssh免密登录

确保各机器上新创建的用户都有sudo权限

visudo

转到第100行,然后在下面添加:

cephuALL=(root)NOPASSWD:ALL

注意上面的是缩进(Tab),而不是空格

实现ssh无密码登录(admin节点操作)

先切换到cephu用户

su - cephu

输入如下指令之后,再连续输三个回车,以生成密钥

ssh-keygen

将admin节点cephu用户生成的密钥拷贝到各Ceph节点

在admin节点执行如下命令

ssh-copy-id cephu@node1

执行完之后要输入yes,然后输入我们刚才设置的密码1

ssh-copy-id cephu@node2

ssh-copy-id cephu@node3

ssh-copy-id cephu@ceph-client

测试连接:

使用ssh连接

ssh cephu@node1

查看当前主机

hostname

退出

exit

在admin节点用root用户创建~/.ssh/config配置文件

mkdir ~/.sshtouch ~/.ssh/config

将~/.ssh/config配置文件设置为如下内容,这样ceph-deploy就能用你所建的用户名登录Ceph节点了

host node1hostname node1user cepuhhost node2hostname node2user cepuhhost node3hostname node3user cepuh

3.3. 添加下载源

添加下载源,安装ceph-deploy(admin节点,root用户)

touch /etc/yum.repos.d/ceph.repovim /etc/yum.repos.d/ceph.repo

[ceph-noarch]name=Ceph noarch packagesbaseurl=/rpm-luminous/el7/noarchenabled=1priority=2gpgcheck=1gpgkey=/keys/release.asc

/en/pacific/install/get-packages/#rhel建立缓存

yum makecache

更新yum源

yum update -y

开启yum缓存

vim /etc/yum.conf

keepcache=1

3.4. 安装Ceph-deploy

安装Ceph-deploy

yum install ceph-deploy -y

安装ntp(所有机器)

选择任意一台机器当ntp时间服务器,其他节点当时间服务器的客户端,跟时间服务器同步时间。

这里选择admin节点为ntp时间服务器

yum install -y ntp # [root@admin ~]

修改时间服务器的配置

vim /etc/ntp.conf

有4行server的位置,把那4行server行注释掉,填写以下两行:

server 127.127.1.0 # local clockfudge 127.127.1.0 stratum 10

启动ntp服务,并设置开机自启

systemctl start ntpd # 启动ntp服务systemctl enable ntpd # 将ntp服务设为开机自启systemctl status ntpd # 查看ntp服务当前的状态

5. 其他所有节点安装ntpdate

yum install ntpdate -y

同步时间

ntpdate 10.1.1.73 # 注意改成自己时间服务器的IP

3.5. 部署Ceph集群

注意:没有特殊说明,以下所有操作均是在admin节点,cephu用户下执行

创建cephu用户操作的目录

su - cephu # 先切换到cephu用户mkdir my-cluster # 创建my-cluster目录

注意:之后所有ceph-deploy命令操作必须在该目录下执行为Python2.7安装pip

curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py # 下载安装脚本

sudo python get-pip.py # 运行安装脚本

pip -V

使用pip安装distribute

pip install distribute

创建集群

cd my-cluster

ceph-deploy new node1

查看当前目录下的文件:

ls

创建成功会有三个文件:ceph.confceph-deploy-ceph.logceph.mon.keyring

安装luminous

目标:在node1、node2、node3三个节点上安装ceph和ceph-radosgw主包

方法1:利用官方脚本全自动安装,脚本会帮助node1、node2、node3创建epel源和ceph源,并且自动安装ceph和ceph-radosgw主包

ceph-deploy install --release luminous node1 node2 node3# 这一步时间很长,容易超时,可以利用手动安装或者分批安装# 比如我第一次为node1和node2成功安装了# 后面再次安装时只需要把node1和node2去掉,只为node3安装就行了

如果一直提示Another app is currently holding the yum lock; waiting for it to exit...,那么重启下出问题的机器再次安装就行了。

如果ceph和ceph-radosgw安装不上,则采用方法2

测试安装是否完成:分别在node1、node2、node3中确认安装版本为12.2.13

ceph --version

正常情况下应该会显示:ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)

方法2:手动部署安装,三台机器分别创建(三台node节点相同操作) 安装epel源

yum install -y epel*

创建Ceph源

touch /etc/yum.repos.d/ceph.repovim /etc/yum.repos.d/ceph.repo

以下是官方Ceph源的配置(服务器位于加拿大,比较慢):

[ceph]name=Ceph packages for $basearchbaseurl=/rpm-luminous/el7/$basearchenabled=1priority=2gpgcheck=1gpgkey=/keys/release.asc[ceph-noarch]name=Ceph noarch packagesbaseurl=/rpm-luminous/el7/noarchenabled=1priority=2gpgcheck=1gpgkey=/keys/release.asc[ceph-source]name=Ceph source packagesbaseurl=/rpm-luminous/el7/SRPMSenabled=0priority=2gpgcheck=1gpgkey=/keys/release.asc

以下是阿里云Ceph源的配置(服务器位于国内,有CDN加速,我河南这边儿用的是郑州的服务器):

[ceph]name=Ceph packages for $basearchbaseurl=/ceph/rpm-luminous/el7/$basearchenabled=1priority=2gpgcheck=1gpgkey=/ceph/keys/release.asc[ceph-noarch]name=Ceph noarch packagesbaseurl=/ceph/rpm-luminous/el7/noarchenabled=1priority=2gpgcheck=1gpgkey=/ceph/keys/release.asc[ceph-source]name=Ceph source packagesbaseurl=/ceph/rpm-luminous/el7/SRPMSenabled=0priority=2gpgcheck=1gpgkey=/ceph/keys/release.asc

分别在node1、node2、node3节点执行下面的命令安装软件,可以完全手动安装,但需要yum的Ceph缓存目录结构

sudo yum install ceph ceph-radosgw -y

如果因为速度慢导致安装失败可以按ctrl+c,利用它创建的yum缓存目录,手动把安装包下载下来保存到缓存目录/var/cache/yum/x86_64/Ceph/packages目录下

再次执行安装命令:

sudo yum install ceph ceph-radosgw -y

测试安装是否完成,分别在node1、node2、node3中确认安装版本为12.2.13

ceph --version

正常情况下会提示:ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)

初始化Monitor(admin节点,cephu用户在my-cluster目录下执行)

ceph-deploy mon create-initial

赋予各个节点使用命令,免用户名权限

ceph-deploy admin node1 node2 node3

安装ceph-mgr:只有luminous才有,为使用dashboard做准备。

ceph-deploy mgr create node1

添加osd

注意:各个节点上提供的磁盘容量不能太小,最好5GB以上,另外还要留意一下你的磁盘名称

ceph-deploy osd create --data /dev/sdb node1 # [cephu@admin my-cluster]ceph-deploy osd create --data /dev/sdb node2 # [cephu@admin my-cluster]ceph-deploy osd create --data /dev/sdb node3 # [cephu@admin my-cluster]

命令中的/dev/sdb是在各个节点上为osd准备的空闲磁盘(无需分区格式化,如果有分区则要指定具体分区),通过如下命令查看:

最后通过如下命令查看集群状态:

ssh node1 sudo ceph -s

如果显示HEALTH_OK osd: 3 osds: 3 up, 3 in就成功了

3.6. 配置DashBoard

在node1节点上操作,把ceph-mgr和ceph-mon安装在了同一台主机上,最好只有一个ceph-mgr

切换用户

su - cephu

创建管理域密钥

sudo ceph auth get-or-create mgr.node1 mon 'allow profile mgr' osd 'allow *' mds 'allow *'

开启ceph-mgr管理域

sudo ceph-mgr -i node1

查看ceph的状态,确认mgr的状态为active

sudo ceph status

打开dashboard模板

sudo ceph mgr module enable dashboard

绑定开启dashboard模板的ceph-mgr节点的IP地址

sudo ceph config-key set mgr/dashboard/node1/server_addr 10.1.1.74 #IP地址为mgr节点的IP地址,也就是mode1的IP地址

查看端口占用情况

netstat -lntp

Web登录,浏览器输入:mgr地址:7000(如:http://10.1.1.74:7000/)

3.7. 配置客户端使用

配置客户端使用rbd:创建块设备之前需要创建存储池,存储池相关命令需要在mon节点执行,也就是规划好的node1节点创建存储池

sudo ceph osd pool create rbd 128 128

128 128为PG的数量,少于5个OSD,PG数量应为128,创建好了会提示:pool 'rbd' created

初始化存储池

sudo rbd pool init rbd

3.8. 升级CentOS 7的内核为最新版本

打开之前准备好的客户端ceph-client:主机名为ceph-client,IP为10.1.1.77查看内核版本

uname -r

内核版本为:3.10.0-1160.el7.x86_64

导入ELRepo仓库的公共密钥:

rpm --import /RPM-GPG-KEY-

安装ELRepo仓库的yum源

rpm -Uvh /elrepo-release-7.0-3.el7.elrepo.noarch.rpm

查看可用的系统内核包

yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

安装最新版的内核

yum --enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y

查看系统上的所有可用内核:

awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

更改新内核的启动顺序

grub2-set-default 0

其中0是上面查询出来的可用内核重启(重启的时候可以看到CentOS Linux (5.16.14-1.el7.elrepo.x86_64) 7 (Core)是最先启动)

reboot

验证

uname -r

查看系统中全部的内核

rpm -qa | grep kernel

删除旧的内核

yum remove kernel -y

再次查看系统中全部的内核

rpm -qa | grep kernel

会发现少了一个kernel-3.10.0-1160.el7.x86_64

如果需要把其他的删除,可以执行:

yum remove kernel-devel-3.10.0-1160.el7.x86_64 \kernel-tools-libs-3.10.0-1160.el7.x86_64 \kernel-headers-3.10.0-1160.el7.x86_64 \kernel-tools-3.10.0-1160.el7.x86_64 -y

再次查看系统中全部的内核

rpm -qa | grep kernel

会发现内核版本为3.10.0的相关rpm包都没了

3.9. 客户端安装Ceph

安装epel源

yum install -y epel*

创建Ceph源

touch /etc/yum.repos.d/ceph.repovim /etc/yum.repos.d/ceph.repo

以下是官方Ceph源的配置(服务器位于加拿大,比较慢):

[ceph]name=Ceph packages for $basearchbaseurl=/rpm-luminous/el7/$basearchenabled=1priority=2gpgcheck=1gpgkey=/keys/release.asc[ceph-noarch]name=Ceph noarch packagesbaseurl=/rpm-luminous/el7/noarchenabled=1priority=2gpgcheck=1gpgkey=/keys/release.asc[ceph-source]name=Ceph source packagesbaseurl=/rpm-luminous/el7/SRPMSenabled=0priority=2gpgcheck=1gpgkey=/keys/release.asc

以下是阿里云Ceph源的配置(服务器位于国内,有CDN加速,我河南这边儿用的是郑州的服务器):

[ceph]name=Ceph packages for $basearchbaseurl=/ceph/rpm-luminous/el7/$basearchenabled=1priority=2gpgcheck=1gpgkey=/ceph/keys/release.asc[ceph-noarch]name=Ceph noarch packagesbaseurl=/ceph/rpm-luminous/el7/noarchenabled=1priority=2gpgcheck=1gpgkey=/ceph/keys/release.asc[ceph-source]name=Ceph source packagesbaseurl=/ceph/rpm-luminous/el7/SRPMSenabled=0priority=2gpgcheck=1gpgkey=/ceph/keys/release.asc

开启yum缓存

vim /etc/yum.conf

修改成:

keepcache=1

清理缓存

yum clean all

切换为普通用户

su - cephu

安装cephceph-radosgw

sudo yum install ceph ceph-radosgw -y

查看ceph版本

ceph --version

在admin节点赋予client使用命令免用户名权限:

打开admin节点

切换为普通用户

su - cephu

进入my-cluster目录

cd my-cluster

最后执行:

ceph-deploy admin ceph-client

修改client下该文件的读权限:

sudo chmod +r /etc/ceph/ceph.client.admin.keyring

修改client下的ceph配置文件(这一步是为了解决映射镜像时出错问题)

sudo vim /etc/ceph/ceph.conf

在最后一行追加:

rbd_default_features = 1

client节点创建块设备镜像:单位是M,这里是4个G

rbd create foo --size 4096

3.10. 将块设备镜像映射到CentOS 7系统上

client节点映射镜像到主机

sudo rbd map foo --name client.admin

执行完之后会提示:/dev/rbd0

client节点格式化块设备

sudo mkfs.ext4 -m 0 /dev/rbd/rbd/foo

client节点mount块设备

sudo mkdir /mnt/ceph-block-device #创建挂载点

sudo mount /dev/rbd/rbd/foo /mnt/ceph-block-device #挂载

挂载完成之后,可以查看一下

df -Th

正常情况下应该会显示:/dev/rbd0 ext4 3.9G 16M 3.8G 1% /mnt/ceph-block-device

进入刚才挂载的目录

cd /mnt/ceph-block-device

新建一个文件

sudo touch a.txt

查看结果

ls

3.11. 客户端重启之后需重新映射

客户端重起之后,设备需要重新作映射,不然可能会卡死或者之前的映射消失不见

client节点映射镜像到主机

sudo rbd map foo --name client.admin

执行完之后会提示:/dev/rbd0

client节点mount块设备

sudo mount /dev/rbd/rbd/foo /mnt/ceph-block-device #挂载

挂载完成之后,可以查看一下

df -Th

正常情况下应该会显示:/dev/rbd0 ext4 3.9G 16M 3.8G 1% /mnt/ceph-block-device

进入刚才挂载的目录

cd /mnt/ceph-block-device

查看结果

ls

可以看到我们之前创建的文件还都在

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。