ceph数据分布式存储

单机存储的问题

  • 存储处理能力不足 传统的IDE的IO值是100次/秒,SATA固态磁盘500次/秒,固态硬盘达到2000-4000次/秒。即使磁盘的IO能力再大数十倍,也不够抗住网站访问高峰期数十万、数百万甚至上亿用户的同时访问,这同时还要受到主机网络IO能力的限制。

  • 存储空间能力不足 单块磁盘的容量再大,也无法满足用户的正常访问所需的数据容量限制。

  • 单点故障问题 单机存储数据存在单点故障问题

商业存储解决方案

EMC、NetAPP、IBM、DELL、华为、浪潮

分布式存储(软件定义的存储 SDS)

Ceph、TFS、FastDFS、MooseFS(MFS)、HDFS、GlusterFS(GFS) 存储机制会把数据分散存储到多个节点上,具有高扩展性、高性能、高可用性等优点。

数据存储的类型

块存储

  • 存储设备与客户端主机是一对一的关系,块存储设备只能被一个主机挂载使用,数据以块为单位进行存储

典型代表:硬盘

文件存储

  • 一对多,能被多个主机同时挂载或传输使用。

  • 数据以文件的形式存储的,其中文件的元信息数据和实际数据是分开存储的,并且有目录的层级关系

典型代表:NFS、CIFS、FTP

对象存储

  • 一对多,能被多个主机或应用程序同时通过API接口访问使用。

  • 数据以文件的形式存储,一个文件就是一个对象,文件的元信息和实际数据是在一起的,文件扁平化存储,没有目录层级关系,

典型代表:OSS,S3

了解ceph

ceph存储

开源的分布式存储系统,具有高性能、高扩展性、高可用性等特点,集块存储,文件存储,对象存储于一身。

Ceph 优势

  • 高扩展性:去中心化,支持使用普通X86服务器,支持上千个存储节点的规模,支持TB到EB级的扩展。

  • 高可靠性:没有单点故障,多数据副本,自动管理,自动修复。

  • 高性能:摒弃了传统的集中式存储元数据寻址的方案,采用 CRUSH 算法,数据分布均衡,并行度高。

  • 功能强大:Ceph是个大一统的存储系统,集块存储接口(RBD)、文件存储接口(CephFS)、对象存储接口(RadosGW)于一身,因而适用于不同的应用场景。

ceph架构

自上往下

  • 客户端(主机/虚拟机/容器/应用程序/):

    在ceph中进行数据读写的终端。

  • LibRADOS对象访问接口:

    提供访问存储接口给客户端使用。Ceph默认提供三个接口:RBD块存储接口、RGW对象存储接口、CephFS文件存储接口。还支持用户使用java、python、C、C++等编程语言,二次开发自定义访问接口

  • RADOS基础存储系统(统一存储池):

    提供存储能力的。Ceph中一切都是

ceph组件

OSD----Monitor----Manager----MDS

OSD(ceph-osd)

负责存储数据和管理数据,一般一个磁盘对应一个OSD,还负责响应客户端的读写请求

Monitor(ceph-mon)

负责保存OSD的元数据,维护Ceph集群状态的各种映射视图Map(监视全局状态),还负责管理客户端的认证和授权

Manager(ceph-mgr)

负责跟踪Ceph集群性能状态和监控指标,暴露接口给外部监控系统获取监控指标数据

MDS(ceph-mds)

负责保存CophFS文件存储系统的元数据,管理目录结构,仅在使用cephFS文件存储接口功能的时候使用

PG(归置组):

可理解成保存OSD位置的索引,一个PG可以包含多个数据对象(object),一个数据对象只能数据一个PG

PG与OSD的对应关系是在创建存储池Pool的时候就确定好的

Pool(存储池/资源池/数据池):

可以理解成存放PG 的命名空间namespace,一个pool可有包含多个PG,同一个Pool里的PG不可以同名,不同的Pool里的PG可以同名

raft / paxos 都是一致性选举算法 实现这种分布式系统中数据的同步和leader的选举

OSD存储引擎(FileStore,BlueStore)

FilreStore:是12.x以前版本的唯一可选的OSD存储引擎,将数据对象存储为文件系统中的文件,                     性能上存在许多不足

BlueStore:是12.x版本之后默认的OSD存储引擎,将数据对象直接存储在块设备上,具有更好的                     数据读写性能和可靠性

ceph的存储过程

1)文件默认会被按照4M大小进行分片成一个或多个数据对象

2)每个数据对象都有一个oid和分片编号,通过对oid使用hash算法得到一个16进制的特征码,再除以Pool的PG总数取余,得到数据对象的pgid

3)通过pgid使用CRUSH算法得到PG对应的OSD的ID

4)将数据对象的数据存储到对应的OSD上

ceph部署

1.实验准备

添加网卡,添加硬盘(每个节点加三块硬盘)

准备三台主机和管理节点和客户端节点

关闭防火墙

管理节点:192.168.116.12

客户端节点:192.168.116.13

主机1:192.168.116.14

主机2:192.168.116.15

主机3:192.168.116.40

//环境准备
可选步骤:创建 Ceph 的管理用户
useradd cephadm
passwd cephadm
​
visudo
cephadm ALL=(root) NOPASSWD:ALL

2.根据规划设置主机名

hostnamectl set-hostname admin
hostnamectl set-hostname client
hostnamectl set-hostname node01
hostnamectl set-hostname node02
hostnamectl set-hostname node03

3、配置 hosts 解析

vim /etc/hosts
192.168.116.12 admin
192.168.116.13 client
192.168.116.14 node01
192.168.116.15 node02
192.168.116.40 node03

4、安装常用软件和依赖包

yum -y install epel-release
yum -y install yum-plugin-priorities yum-utils ntpdate python-setuptools python-pip gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel zip unzip ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssh openssl-devel nss_ldap openldap openldap-devel openldap-clients openldap-servers libxslt-devel libevent-devel ntp libtool-ltdl bison libtool vim-enhanced python wget lsof iptraf strace lrzsz kernel-devel kernel-headers pam-devel tcl tk cmake ncurses-devel bison setuptool popt-devel net-snmp screen perl-devel pcre-devel net-snmp screen tcpdump rsync sysstat man iptables sudo libconfig git bind-utils tmux elinks numactl iftop bwm-ng net-tools expect snappy leveldb gdisk python-argparse gperftools-libs conntrack ipset jq libseccomp socat chrony sshpass

5、在 admin 管理节点配置 ssh 免密登录所有节点

ssh-keygen -t rsa
sshpass -p '123' ssh-copy-id -o StrictHostKeyChecking=no root@admin
sshpass -p '123' ssh-copy-id -o StrictHostKeyChecking=no root@node01
sshpass -p '123' ssh-copy-id -o StrictHostKeyChecking=no root@node02
sshpass -p '123' ssh-copy-id -o StrictHostKeyChecking=no root@node03

6、所有主机配置时间同步

vim /etc/chrony.conf
也可以使用默认的官方源
server ntp.aliyun.com iburst   #指定阿里云源服务器
​
​
systemctl enable --now chronyd
timedatectl set-ntp true                    #开启 NTP
timedatectl set-timezone Asia/Shanghai      #设置时区
chronyc -a makestep                         #强制同步下系统时钟,返回200显示与源服务器同步
timedatectl status                          #查看时间同步状态
chronyc sources -v                          #查看 ntp 源服务器信息
timedatectl set-local-rtc 0                 #将当前的UTC时间写入硬件时钟
​
​
​
#重启依赖于系统时间的服务
systemctl restart rsyslog 
systemctl restart crond
​
#关闭无关服务
systemctl disable --now postfix
 
准备node主机的网卡文件,管理和客户端节点不需要设置
将本机的ens33网卡cp一个,去掉新的uid,将名字更改,ip改成192.168.100网段
cp ifcfg-ens33 ifcfg-ens36

systemctl restart network
ifconfig检查是否更改好

7、配置 Ceph yum源

wget https://download.ceph.com/rpm-nautilus/el7/noarch/ceph-release-1-1.el7.noarch.rpm --no-check-certificate
​
将下载到本地的文件夹剪切到/opt下
mv ceph-release-1-1.el7.noarch.rpm /opt

cd /opt
rpm -ivh ceph-release-1-1.el7.noarch.rpm --force
安装完后会发现在/etc/yum.repo.d目录下有ceph.repo
​
​之后重启reboot,重启后记得先关闭防火墙


​部署 Ceph 集群

1、为所有节点都创建一个 Ceph 工作目录,后续的工作都在该目录下进行

mkdir -p /etc/ceph

2、安装 ceph-deploy 部署工具

cd /etc/ceph
yum install -y ceph-deploy

ceph-deploy --version       #查看版本

3、所有节点安装 Ceph 软件包

#ceph-deploy 2.0.1 默认部署的是 mimic 版的 Ceph,若想安装其他版本的 Ceph,可以用 --release 手动指定版本
cd /etc/ceph
ceph-deploy install --release nautilus node0{1..3} admin

直接用下面的命令做就行
#ceph-deploy install 本质就是在执行下面的命令:
yum clean all
yum -y install epel-release
yum -y install yum-plugin-priorities
yum -y install ceph-release ceph ceph-radosgw

#也可采用手动安装 Ceph 包方式,在其它节点上执行下面的命令将 Ceph 的安装包都部署上:
sed -i 's#download.ceph.com#mirrors.tuna.tsinghua.edu.cn/ceph#' /etc/yum.repos.d/ceph.repo
yum install -y ceph-mon ceph-radosgw ceph-mds ceph-mgr ceph-osd ceph-common ceph

4、生成初始配置

#在管理节点运行下述命令,告诉 ceph-deploy 哪些是 mon 监控节点
cd /etc/ceph
ceph-deploy new --public-network 192.168.116.0/24 --cluster-network 192.168.100.0/24 node01 node02 node03

#命令执行成功后会在 /etc/ceph 下生成配置文件
ls /etc/ceph
ceph.conf					#ceph的配置文件
ceph-deploy-ceph.log		#monitor的日志
ceph.mon.keyring			#monitor的密钥环文件,用于验证

5、在管理节点初始化 mon 节点

cd /etc/ceph
ceph-deploy mon create node01 node02 node03			
#创建 mon 节点,由于 monitor 使用 Paxos 算法,其高可用集群节点数量要求为大于等于 3 的奇数台

ceph-deploy --overwrite-conf mon create-initial		
#配置初始化 mon 节点,并向所有节点同步配置
# --overwrite-conf 参数用于表示强制覆盖配置文件

ceph-deploy gatherkeys node01						
#可选操作,向 node01 节点收集所有密钥
#命令执行成功后会在 /etc/ceph 下生成配置文件
ls /etc/ceph
ceph.bootstrap-mds.keyring			#引导启动 mds 的密钥文件
ceph.bootstrap-mgr.keyring			#引导启动 mgr 的密钥文件
ceph.bootstrap-osd.keyring			#引导启动 osd 的密钥文件
ceph.bootstrap-rgw.keyring			#引导启动 rgw 的密钥文件
ceph.client.admin.keyring			#ceph客户端和管理端通信的认证密钥,拥有ceph集群的所有权限
ceph.conf
ceph-deploy-ceph.log
ceph.mon.keyring
 
#在 mon 节点上查看自动开启的 mon 进程
ps aux | grep ceph
 
#在管理节点查看 Ceph 集群状态
cd /etc/ceph
ceph -s

#查看 mon 集群选举的情况,判断哪条为leader
ceph quorum_status --format json-pretty | grep leader
 
#扩容 mon 节点
ceph-deploy mon add <节点名称>

6、部署能够管理 Ceph 集群的节点

#可实现在各个节点执行 ceph 命令管理集群
cd /etc/ceph
ceph-deploy --overwrite-conf config push node01 node02 node03		
#向所有 mon 节点同步配置,确保所有 mon 节点上的 ceph.conf 内容必须一致

ceph-deploy admin node01 node02 node03			
#本质就是把 ceph.client.admin.keyring 集群认证文件拷贝到各个节点

#在 mon 节点上查看
ls /etc/ceph
ceph.client.admin.keyring  ceph.conf  rbdmap  tmpr8tzyc
cd /etc/ceph
ceph -s

7、部署 osd 存储节点

如果是利旧的硬盘,则需要先擦净(删除分区表)磁盘(可选,无数据的新硬盘可不做)
cd /etc/ceph
ceph-deploy disk zap node01 /dev/sdb
ceph-deploy disk zap node02 /dev/sdb
ceph-deploy disk zap node03 /dev/sdb


因为我们是新的,所以用下面的命令直接添加即可
#添加 osd 节点
ceph-deploy --overwrite-conf osd create node01 --data /dev/sdb
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdb
ceph-deploy --overwrite-conf osd create node03 --data /dev/sdb

ceph-deploy --overwrite-conf osd create node01 --data /dev/sdc
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdc
ceph-deploy --overwrite-conf osd create node03 --data /dev/sdc

ceph-deploy --overwrite-conf osd create node01 --data /dev/sdd
ceph-deploy --overwrite-conf osd create node02 --data /dev/sdd
ceph-deploy --overwrite-conf osd create node03 --data /dev/sdd

做完之后用ceph -s 检查一下
 
ceph osd stat#查看osd的状态
ceph osd tree#查看几个osd


ceph osd status    #查看 osd 状态,需部署 mgr 后才能执行

8、部署 mgr 节点

cd /etc/ceph
ceph-deploy mgr create node01 node02

#解决 HEALTH_WARN 问题:mons are allowing insecure global_id reclaim问题:
禁用不安全模式:ceph config set mon auth_allow_insecure_global_id_reclaim false
显示ok即关闭

 

显示ok之后可以通过ceph osd status 以表格形式查看osd状态了
                ceph osd df      查看磁盘使用量
 
#扩容 mgr 节点
ceph-deploy mgr create <节点名称>
例如添加node03节点
ceph-deploy mgr create node03

9、开启监控模块

#在 ceph-mgr Active节点执行命令开启
ceph -s查看到node01是Active,所有到node01上去执行
ceph -s | grep mgr
yum install -y ceph-mgr-dashboard
#安装图形化面板
cd /etc/ceph
ceph mgr module ls | grep dashboard

#开启 dashboard 模块
ceph mgr module enable dashboard --force

#禁用 dashboard 的 ssl 功能,使用http去访问
ceph config set mgr mgr/dashboard/ssl false

#配置 dashboard 监听的地址和端口
ceph config set mgr mgr/dashboard/server_addr 0.0.0.0   #0.0.0.0为任意地址
ceph config set mgr mgr/dashboard/server_port 8000       #指定端口号

#重启 dashboard
ceph mgr module disable dashboard
ceph mgr module enable dashboard --force

#确认访问 dashboard 的 url
ceph mgr services
 
#设置 dashboard 账户以及密码
echo "12345678" > dashboard_passwd.txt

#加载这个文件(有两种方式)
ceph dashboard set-login-credentials admin -i dashboard_passwd.txt
  或
ceph dashboard ac-user-create admin administrator -i dashboard_passwd.txt

浏览器访问:http://192.168.80.11:8000 ,账号密码为 admin/12345678

 

10、验证

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/332739.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(10)-Fiddler如何设置捕获Firefox浏览器的Https会话

1.简介 经过上一篇对Fiddler的配置后&#xff0c;绝大多数的Https的会话&#xff0c;我们可以成功捕获抓取到&#xff0c;但是有些版本的Firefox浏览器仍然是捕获不到其的Https会话&#xff0c;需要我们更进一步的配置才能捕获到会话进行抓包。 2.宏哥环境 1.宏哥的环境是Wi…

[NSSRound#16 Basic]RCE但是没有完全RCE

题目代码&#xff1a; <?php error_reporting(0); highlight_file(__file__); include(level2.php); if (isset($_GET[md5_1]) && isset($_GET[md5_2])) {if ((string)$_GET[md5_1] ! (string)$_GET[md5_2] && md5($_GET[md5_1]) md5($_GET[md5_2])) {i…

山西电力市场日前价格预测【2024-01-20】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-20&#xff09;山西电力市场全天平均日前电价为304.16元/MWh。其中&#xff0c;最高日前电价为486.22元/MWh&#xff0c;预计出现在18:15。最低日前电价为87.43元/MWh&#xff0c;预计出…

Docker容器添加映射端口

方式一 简单粗暴&#xff08;需要等一段时间&#xff09; 直接给现在容器停了&#xff08;当然你要不想停也可以&#xff0c;只是打包会慢一点&#xff0c;当然我是没出意外&#xff0c;如果你怕出现特殊情况&#xff0c;那就先把容器停了&#xff09;&#xff0c;然后把这个容…

Java-初识正则表达式 以及 练习

目录 什么是正则表达式&#xff1f; 1. 正则表达式---字符类&#xff08;一个大括号匹配一个字符&#xff09;&#xff1a; 2. 正则表达式---预字符类&#xff08;也是匹配一个字符&#xff09;&#xff1a; 正则表达式---数量词 &#xff08;可以匹配多个字符&#xff09;…

HarmonyOS-$$语法:内置组件双向同步

$$语法&#xff1a;内置组件双向同步 $$运算符为系统内置组件提供TS变量的引用&#xff0c;使得TS变量和系统内置组件的内部状态保持同步。 内部状态具体指什么取决于组件。例如&#xff0c;Refresh组件的refreshing参数。 使用规则 当前$$支持基础类型变量&#xff0c;以及…

版权申请介绍

因工作需要&#xff0c;做的APP里面涉及卡通人物形象涉及版权问题&#xff0c;这里记录下涉及版权相关知识。 软件本身申请软著&#xff0c;软著即软件著作权&#xff0c;是指软件的开发者或者其他权利人依据有关著作权法律的规定&#xff0c;对于软件作品所享有的发表权、开发…

C++进阶(五)二叉搜索树

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、二叉搜索树概念二、二叉搜索树操作三、二叉搜索树的实现四、二叉搜索树的应用五、二叉搜索…

C++中特殊类的设计与单例模式的简易实现

设计一个只能在堆上创建对象的类 对于这种特殊类的设计我们一般都是优先考虑私有构造函数。然后对于一些特殊要求就直接通过静态成员函数的实现来完成。 class A//构造函数私有&#xff08;也可以析构函数私有&#xff09; { public:static A* creat(){return new A;} privat…

VsCode + CMake构建项目 C/C++连接Mysql数据库 | 数据库增删改查C++封装 | 信息管理系统通用代码 ---- 课程笔记

这个是B站Up主&#xff1a;程序员程子青的视频 C封装Mysql增删改查操作_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1m24y1a79o/?p6&spm_id_frompageDriver&vd_sourcea934d7fc6f47698a29dac90a922ba5a3安装mysql:mysql 下载和安装和修改MYSQL8.0 数据库存储…

2023 年,我患上了 AI 焦虑症!

【作者有话说】2023 年对我来说是神奇的一年&#xff0c;我意外地从一个程序员变成了一个 AI 资讯届的“网红”&#xff0c;到年底时我在 X 平台的阅读量超过 1 亿&#xff0c;微博上的阅读量则超过 10 亿&#xff0c;很多人通过我的微博或者 X 了解最新的 AI 资讯、教程和 Pro…

C#,字符串匹配(模式搜索)Sunday算法的源代码

Sunday算法是Daniel M.Sunday于1990年提出的一种字符串模式匹配算法。 核心思想&#xff1a;在匹配过程中&#xff0c;模式串并不被要求一定要按从左向右进行比较还是从右向左进行比较&#xff0c;它在发现不匹配时&#xff0c;算法能跳过尽可能多的字符以进行下一步的匹配&…

多维时序 | Matlab实现CNN-BiLSTM-Mutilhead-Attention卷积双向长短期记忆神经网络融合多头注意力机制多变量时间序列预测

多维时序 | Matlab实现CNN-BiLSTM-Mutilhead-Attention卷积双向长短期记忆神经网络融合多头注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现CNN-BiLSTM-Mutilhead-Attention卷积双向长短期记忆神经网络融合多头注意力机制多变量时间序列预测效果一览基本介绍程序设计…

scipy测试数据

文章目录 图像心电图 图像 scipy的datasets中提供了几组在图像和信号处理中可能会用到的数据&#xff0c;但是&#xff0c;如果想顺利使用&#xff0c;还需要安装一个scipy的依赖模块pooch pip install pooch然后就可以加载这几种数据了 from scipy.datasets import ascent,…

云服务器搭建coturn出现Not reachable?

文章目录 问题复现解决方案1. 云服务器端口开放问题2. 检查配置文件3. 浏览器 问题解决 问题复现 使用云服务器搭建coturn服务时&#xff0c;出现not reachable报错 ICE Server配置是正确的 但测试relay时却报错&#xff1a;not reachable? 并且服务器也没输出相应日志。 …

Windows命令大全

文章目录 1. 文件和目录管理2. 系统信息查询3. 系统维护与修复4. 网络相关5. PowerShell 命令6. 用户管理7. 进程和服务管理8. 文件搜索与查找9. 时间和日期操作10. 注册表操作 Windows系统命令非常丰富&#xff0c;涵盖了操作系统管理、文件操作、网络配置、系统维护等诸多方面…

Java网络编程——UDP通信原理

一、TCP和UDP概述 传输层通常以TCP和UDP协议来控制端点与端点的通信 TCPUDP协议名称传输控制协议用户数据包协议是否连接面向连接的协议。数据必须要建立连接无连接的协议&#xff0c;每个数据报中都给出完整的地址信息&#xff0c;因此不需要事先建立发送方和接受方的连接是…

FPGA 多路分频器实验

1 概述 在 FPGA 中&#xff0c;时钟分频是经常用到的。本节课讲解 2 分频、3 分频、4 分频和 8 分频的 Verilog 实现并且学习 generate 语法功能的应。 2 程序设计思路 1&#xff09;整数倍分频&#xff0c;为 2、4、8&#xff0c;这种 2^n 次方倍数倍数关系的…

记一次DateTimeFormat注解的坑

记一次DateTimeFormat注解的坑 背景&#xff1a;在用Echarts做图表时&#xff0c;前端传两个日期参数&#xff0c;获取日期区间的图表数据。想遵循RESTful风格&#xff0c;所以使用get请求获取date参数。前端读取当前日期&#xff0c;将七天前日期和当前日期作为参数传给后端&…

享元模式介绍

目录 一、享元模式介绍 1.1 享元模式定义 1.2 享元模式原理 1.2.1 享元模式类图 1.2.2 模式角色说明 1.2.3 示例代码 二、享元模式的应用 2.1 需求说明 2.2 需求实现 2.2.1 类图 2.2.2 具体实现 2.2.2.1 抽象享元类 2.2.2.2 共享享元类-白色棋子 2.2.2.3 共享享元…