草庐IT

Ceph集群部署

桂安俊@kylinOS 2024-03-17 原文

目录

一、环境准备

1、准备4台centos服务器

2、配置ceph源

3、配置主机名解析和SSH互信

4、NTP时间同步

二、ceph集群部署

1、安装ceph组件

2、部署MON集群

3、部署OSD集群


一、环境准备

1、准备4台centos服务器

主机主机名IP备注
客户端client192.168.2.10关闭selinux和firewalld
OSD+MONnode1192.168.2.20

关闭selinux和firewalld

添加2块磁盘,sdb和sdc

OSD+MONnode2192.168.2.30

关闭selinux和firewalld

添加2块磁盘,sdb和sdc

OSD+MONnode3192.168.2.40

关闭selinux和firewalld

添加2块磁盘,sdb和sdc

补充说明:Ceph组件

  • OSDs:存储设备
  • Monitors:集群监控组件
  • RadosGeteway(RGW):对象存储网关
  • MDSs:存放文件系统的元数据(对象存储和块存储不需要该组件)
  • Client:ceph客户端

本次环境,本次环境需要1台服务器作为客户端,3台服务器作为OSD存储,3台作为Monitor集群监控,为节省服务器,将OSD和Monitor共享部署在一台服务器上,集群拓扑如下:

如上图,客户端只是通过MON服务器找到map,map记录的是OSD存储信息,当通过map找到OSD存储信息后,client端是直接根据map访问OSD存储服务器的,不会再经过MON服务器,所以不存在MON导致性能瓶颈的问题。 

2、配置ceph源

离线ceph iso文件可下载:

链接:https://pan.baidu.com/s/1BNkLkhiQzXcTaSaWRM8fpA?pwd=1234 
提取码:1234 
将ceph iso挂载到本地,会有三个仓库:

 对应配置本地ceph安装源:

vim /etc/yum.repos.d/ceph.repo
[mon]
name=mon
baseurl=file:///ceph-repo/MON       #以实际ceph.iso挂载路径为准,这里以/ceph-repo路径为例
gpgcheck=0

[osd]
name=osd
baseurl=file:///ceph-repo/OSD
gpgcheck=0

[tools]
name=tools
baseurl=file:///ceph-repo/Tools
gpgcheck=0
yum repolist

 如上图,本地安装源添加成功,4台主机都做如上添加ceph源操作。

3、配置主机名解析和SSH互信

(1)配置主机名解析

#4台主机都配置
vim  /etc/hosts
192.168.2.10     client
192.168.2.20     node1
192.168.2.30     node2
192.168.2.40     node3

(2)配置SSH互信

非交互生成密钥对

#4台主机都配置
ssh-keygen -f /root/.ssh/id_rsa -N ''   #2个单引号

发布密钥到各节点主机(包括自己)

#4台主机都配置
for i in client node1 node2 node3; do ssh-copy-id $i; done

4、NTP时间同步

Client做时间服务器,所有node主机与服务器同步时间

#仅client主机操作
vim /etc/chrony.conf
#新增如下内容
allow 192.168.2.0/24
local stratum 10
systemctl restart chronyd

配置node节点,向client进行时间同步

#3台node节点都配置
vim /etc/chrony.conf
#新增如下内容,把默认自带得server删掉
server 192.168.2.10 iburst

 

systemctl restart chronyd

二、ceph集群部署

1、安装ceph组件

在node1安装ceph-deploy脚本:

yum install ceph-deploy -y    #ceph-deploy是一个python写的集群部署脚本,这里仅在node1安装即可,后面会通过node1,使用ceph-deploy工具对所有node节点进行配置

给所有node节点安装ceph所有组件:

#在node1执行即可
#ceph-mon负责监控和绘制地图,ceph-osd负责共享磁盘,ceph-mds作文件系统共享,ceph-radosgw作对象存储共享
for i in node1 node2 node3;do ssh $i "yum install ceph-mon ceph-osd ceph-mds ceph-radosgw -y"; done

2、部署MON集群

(1)初始化MON配置(仅node1操作)

主配置文件为ceph.conf(在ceph-cluster当前目录下)

mkdir ceph-cluster   #创建目录,名称可自定义
cd ceph-cluster      #下面命令一定要先cd进去再执行,不然会报错

ceph-deploy new node1 node2 node3   #创建主配置文件,new参数是新建集群,后面跟node集群节点

 如上图,会在node1生成如上配置文件。

 如上图,ceph.conf里记录了mon集群节点信息。

(2)配置并启动ceph-mon服务(仅node1操作)

(配置文件被拷贝到/etc/ceph/ceph.conf)

cd /root/ceph-cluster/    #一定要先cd到ceph执行脚本目录里再执行下面命令,不然报错

ceph-deploy mon create-initial   #会远程所有node主机,拷贝配置文件至/etc/ceph目录,并启动ceph-mon服务

 如上图可以看到,会自动远程所有节点主机,先拷贝主配置文件至/etc/ceph目录,然后启动各节点ceph-mon服务。

【常见错误】:

如果提示如下信息:

[node2][DEBUG] write cluster configuration to /etc/ceph/{cluster}.conf

[ceph_deploy.config][ERROR] RuntimeError:config file

/etc/ceph/ceph.conf exists with different content; use --overwrite-conf to overwrite

解决方式:

说明目标主机已经有ceph.conf配置文件,而且内容和当前目录的配置文件不一样,如果需要覆盖则使用--overwrite-conf选项

如:[root@node1 ceph-cluster]# ceph-deploy  --overwrite-conf  mon  create-initial

ls /etc/ceph

如上图,其中:ceph.conf是主配置文件, ceph.client.admin.keyring文件存放的是ceph的用户名和密码。

查看各节点ceph-mon服务启动状态:

#node1查看
systemctl status ceph-mon@node1.service

#node2查看
systemctl status ceph-mon@node2.service

#node3查看
systemctl status ceph-mon@node3.service

查看整个ceph集群状态:

ceph -s    #在任何一个node节点执行都可以,-s是status意思

如下图,集群监控状态目前是error,因为制作了monitor,还没做osd,但是可以看到目前已经有3个节点在monitor集群里:

 

3、部署OSD集群

(1)清空磁盘并创建分区表(仅在node1操作)

#以下所有仅在node1操作
cd /root/ceph-cluster/   #所有ceph-deploy操作都要在一开始创建的ceph-cluster目录执行

#清空磁盘,并初始化分区表为GPT格式
ceph-deploy disk zap node1:sdb node1:sdc node2:sdb node2:sdc node3:sdb node3:sdc

(2)启动OSD服务、共享OSD磁盘(仅在node1操作)

#以下所有仅在node1操作
cd /root/ceph-cluster/   #所有ceph-deploy操作都要在一开始创建的ceph-cluster目录执行

#将sdc作为数据盘共享出去,sdb作为对应缓存盘
ceph-deploy osd create node1:sdc:/dev/sdb  node2:sdc:/dev/sdb  node3:sdc/dev/sdb    

#ceph-deploy后可跟多个参数,也可单独执行,如下:
#ceph-deploy osd create node1:sdc:/dev/sdb
#ceph-deploy osd create node2:sdc:/dev/sdb
#ceph-deploy osd create node3:sdc:/dev/sdb

常见错误:

如果提示错误信息:[ceph_deploy][ERROR]RuntimeError:bootstrap-osd keyring not found;run 'gatherkeys'

解决方案:

[root@node1 ceph-cluster]#  ceph-deploy gatherkeys node1 node2 node3

(3)检查ceph集群状态

ceph  -s    #如下图,状态为HEALTH_OK

如上图可以看到ceph集群状态,有3个osd(不算缓存盘),3个盘加起来可用容量为60G。 

如果ceph -s查看状态是"HEALTH_WARN  clock shew detected"字样,表示各节点主机时间不同步,需要同步下时间。

查看各节点磁盘状态,如下以node1为例:

 查看osd服务器状态:

#以node1为例,ceph-osd@后面跟数字,数字以0开始,具体可以对应上图数据盘sdc1对应的挂载点ceph编号
systemctl status ceph-osd@0.service    

 

查看有几个共享盘:

ceph osd tree

 

有关Ceph集群部署的更多相关文章

  1. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  2. ruby-on-rails - Ruby on Rails 可以部署在 Azure 网站上吗? - 2

    我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/

  3. jenkins部署1--jenkins+gitee持续集成 - 2

    前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon

  4. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  5. Ruby,使用包含 TK GUI 的 ocra 部署一个 exe - 2

    Ocra无法处理需要“tk”的应用程序require'tk'puts'nope'用奥克拉http://github.com/larsch/ocra不起作用(如链接中的一个问题所述)问题:https://github.com/larsch/ocra/issues/29(Ocra是1.9的"new"rubyscript2exe,本质上它用于将rb脚本部署为可执行文件)唯一的问题似乎是缺少tcl的DLL文件我不认为这是一个问题据我所知,问题是缺少tk的DLL文件如果它们是已知的,则可以在执行ocra时将它们包括在内有没有办法知道tk工作所需的DLL依赖项? 最佳答

  6. ruby-on-rails - NameError(未初始化常量 Unzipper::Zip)但仅在 Heroku 部署(Rails)上 - 2

    我有一个类unzipper.rb,它使用Rubyzip解压文件。在我的本地环境中,我可以成功解压缩文件,而无需使用require'zip'明确包含依赖项但是在Heroku上,我得到一个NameError(uninitializedconstantUnzipper::Zip)我只能通过使用明确的require来解决问题:为什么这在H​​eroku环境中是必需的,但在本地主机上却不是?我的印象是Rails自动需要所有gem。app/services/unzipper.rbrequire'zip'#OnlyrequiredforHeroku.Workslocallywithout!class

  7. ruby - Sinatra + Heroku + Datamapper 使用 dm-sqlite-adapter 部署问题 - 2

    出于某种原因,heroku尝试要求dm-sqlite-adapter,即使它应该在这里使用Postgres。请注意,这发生在我打开任何URL时-而不是在gitpush本身期间。我构建了一个默认的Facebook应用程序。gem文件:source:gemcuttergem"foreman"gem"sinatra"gem"mogli"gem"json"gem"httparty"gem"thin"gem"data_mapper"gem"heroku"group:productiondogem"pg"gem"dm-postgres-adapter"endgroup:development,:t

  8. ruby-on-rails - 在服务器上没有互联网访问权限的 Capistrano 部署 - 2

    如何使用Capistrano将Rails应用程序部署到无法访问外部网络或存储库的生产或暂存服务器?我已经设法完成部署的一半,并意识到Capistrano没有在我的本地机器上下载gitrepo,但它首先连接到远程服务器并尝试在那里下载Git存储库。我希望有一个类似Javaee的构建系统,其中创建可交付成果并将该可交付成果发送到服务器。就像您构建.ear文件并将其部署到您想要的任何服务器上一样。显然在RoR中,你被迫(据我所知)在该服务器上构建应用程序,在那里创建一个gem存储库,在那里克隆最新的分支等等。有什么方法可以将准备运行的包发送到远程服务器吗? 最佳答

  9. 【详解】Docker安装Elasticsearch7.16.1集群 - 2

    开门见山|拉取镜像dockerpullelasticsearch:7.16.1|配置存放的目录#存放配置文件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/config#存放数据的文件夹mkdir-p/opt/docker/elasticsearch/node-1/data#存放运行日志的文件夹mkdir-p/opt/docker/elasticsearch/node-1/log#存放IK分词插件的文件夹mkdir-p/opt/docker/elasticsearch/node-1/plugins若你使用了moba,直接右键新建即可如上图所示依次类推创建

  10. Streampark集成Cloudera Flink、ldap、告警,以及部署常见问题 - 2

    集成背景我们当前集群使用的是ClouderaCDP,Flink版本为ClouderaVersion1.14,整体Flink安装目录以及配置文件结构与社区版本有较大出入。直接根据Streampark官方文档进行部署,将无法配置FlinkHome,以及后续整体Flink任务提交到集群中,因此需要进行针对化适配集成,在满足使用需求上,尽量提供完整的Streampark使用体验。集成步骤版本匹配问题解决首先解决无法识别Cloudera中的FlinkHome问题,根据报错主要明确到的事情是无法读取到Flink版本、lib下面的jar包名称无法匹配。修改对象:修改源码:(解决无法匹配clouderajar

随机推荐