千家信息网

Ceph如何实现集群搭建

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下Ceph如何实现集群搭建,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!背景Ceph简介Ceph是一个分布式存储,可以提供对象存储、块存储和文件存储,其中对象存储和块
千家信息网最后更新 2026年11月02日Ceph如何实现集群搭建

小编给大家分享一下Ceph如何实现集群搭建,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

背景

Ceph简介

Ceph是一个分布式存储,可以提供对象存储、块存储和文件存储,其中对象存储和块存储可以很好地和各大云平台集成。一个Ceph集群中有Monitor节点、MDS节点(可选,用于文件存储)、至少两个OSD守护进程。
Ceph OSD:OSD守护进程,用于存储数据、处理数据拷贝、恢复、回滚、均衡,并通过心跳程序向Monitor提供部分监控信息。一个Ceph集群中至少需要两个OSD守护进程。
Monitor:维护集群的状态映射信息,包括monitor、OSD、Placement Group(PG)。还维护了Monitor、OSD和PG的状态改变历史信息。
MDS:存储Ceph文件系统的元数据。

环境规划

4台服务器:1台作为Monitor,1台作为OSD RGW,还有两台作为OSD。ps:我们不搭建CephFS。
所有服务器都安装Ubuntu 16.04。

环境准备:

编辑hosts文件及hostname

分别将Monitor节点定义为node1,两台OSD节点定义为node2、node3,RGW节点定义为node4。
打开Monitor节点的/etc/hostname文件,内容修改为node1,保存退出。但该文件需OS重启后才能生效,因此需再手动执行命令让其立刻生效,命令为:

# hostname node1

再分别打开各节点的/etc/hosts文件,加入这四个节点ip与名称的对应关系,类似如下:

127.0.0.1   localhost127.0.1.1   node1192.168.1.100   node1192.168.1.101   node2192.168.1.102   node3192.168.1.103   node4# The following lines are desirable for IPv6 capable hosts::1     localhost ip6-localhost ip6-loopbackff02::1 ip6-allnodesff02::2 ip6-allrouters

搭建NTP环境

使用Monitor服务器作为NTP server,另外3台作为NTP client。

NTP server

需安装NTP服务,执行命令:apt-get install ntp。 完成后,修改配置文件/etc/ntp.conf。因为环境不通外网,无法访问Ubuntu时间源。并且,这个环境也没有其他的NTP时间源,因此,在这里,我们使用Monitor服务器作为NTP server的本地时间源。在文件末尾添加如下内容:

server  127.127.1.0                # 如果有其他的NTP源,可以更换这里的ip地址。  fudge   127.127.1.0 stratum 10并注销掉以Ubuntu时间源的部分。#pool 0.ubuntu.pool.ntp.org iburst#pool 1.ubuntu.pool.ntp.org iburst#pool 2.ubuntu.pool.ntp.org iburst#pool 3.ubuntu.pool.ntp.org iburst#pool ntp.ubuntu.com

修改完成后,保存退出。并重启ntp服务,执行命令:service ntp restart。
注意:NTP服务刚重启时,需要一定的时间来同步时间源,不能立刻提供服务,需一定时间后才能正常工作(一般5分钟左右)。可在NTP server端执行明令ntpq -p来查看服务状态。

NTP client

需安装ntpdate,执行命令:apt install ntpdate。
安装后,执行命令ntpdate [-d] {serverIp}来同步时间。-d表示打开调试信息,可不打开。例如:

# ntpdate 109.105.115.67

成功时会出现类似提示:ntpdate[39600]: step time server 109.105.115.67 offset -46797.696033 sec。如果出现:ntpdate[28489]: no server suitable for synchronization found。可能是因为server还未能正常提供服务,等待一段时间后再次尝试。
同步成功后,还需要将时间写入硬件时钟,防止OS重启后时间恢复至原样。执行命令hwclock -w。

安装SSH SERVER

在所有的节点上都安装SSH server服务。

# apt-get install openssh-server

因为我们搭建的Ceph直接使用root用户,所以需要修改ssh配置文件/etc/ssh/sshd_config,搜索PermitRootLogin选项,将其参数改为yes。保存退出文件,并重启SSH服务,执行命令:service ssh restart。

使用SSH免密码登录

生成SSH keys,不要设置passphrase,所有的输入选项都直接回车。

# ssh-keygen Generating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.

拷贝这个key到所有的节点。

# ssh-copy-id node1# ssh-copy-id node2# ssh-copy-id node3# ssh-copy-id node4

设置网络代理(可选)

如果整个内网环境需要设置网络代理才能使用apt-get安装程序,那么需要在配置文件/etc/environment中添加,如:

http_proxy="http://[proxy-ip]:[proxy-port]"https_proxy=https://[proxy-ip]:[proxy-port]

设置完成后,执行命令:export http_proxy="http://[proxy-ip]:[proxy-port]"; export https_proxy=https://[proxy-ip]:[proxy-port],使得配置立即生效。
注意:一定要在/etc/environment中配置,而不能在诸如/etc/profile、~/.profile等类似文件配置。因为,安装ceph时,会使用ssh来连接远程节点并apt-get安装程序,但ssh只能识别/etc/environment中的环境变量,设置在其他文件中会导致网络访问失败。
注意二:所有节点都需要设置。

部署Ceph存储

这里,我们直接在Monitor节点node1上安装ceph-deploy,然后通过ceph-deploy在node1上部署Monitor,在node2和node3节点上部署OSD,最后,在node4上部署Ceph网关rgw。
在node1上创建一个目录,用来维护ceph-deploy生成的配置信息。ceph-deploy命令会在当前目录生成输出文件,确保执行该命令时位于对应的目录。

mkdir my-clustercd my-cluster

安装ceph-deploy

更新镜像仓库,并安装ceph-deploy。

apt-get update && sudo apt-get install ceph-deploy

重新开始部署Ceph

在安装过程中如果遇到了问题,想重新开始安装,执行以下命令来清空配置。

ceph-deploy purgedata {ceph-node} [{ceph-node}]ceph-deploy forgetkeys

如果还想清空Ceph包,需执行:

ceph-deploy purge {ceph-node} [{ceph-node}]

注意:在实际的操作中,如果直接执行ceph-deploy purgedata,总是会报错,提示Ceph还安装在该节点上,拒绝执行清空操作。因此我都是先执行ceph-deploy purge,再执行ceph-deploy purgedata和ceph-deploy forgetkeys。

部署Ceph

创建集群

ceph-deploy new {initial-monitor-node(s)}

如:

ceph-deploy new node1

在当前目录下使用ls和cat命令检查ceph-deploy输出结果,可以看到一个ceph配置文件,一个密钥环以及为新集群创建的日志文件。

修改osd参数

因为我们环境中只有两个OSD,而Ceph模式的副本个数为3,因此我们需要修改配置文件Ceph.conf,在[global]部分增加如下配置:

osd pool default size = 2

如果OSD存储数据分区的文件系统类型不是xfs,则需要设置一些osd变量,否则OSD不能正常启动,报错为"ERROR: osd init failed: (36) File name too long"。同样,在Ceph.conf文件,[global]部分增加如下配置:

osd max object name len = 256osd max object namespace len = 64

配置Ceph网络参数

如果环境中有多种网络,那么需要在Ceph.conf的[global]部分下增加如下配置。

public network = {ip-address}/{netmask}

如果环境中只有一种网络,则不需要此配置。关于网络配置更多信息,可参考:http://docs.ceph.com/docs/master/rados/configuration/network-config-ref/

安装Ceph

ceph-deploy install {ceph-node}[{ceph-node} ...]

例如:

ceph-deploy install node1 node2 node3 node4

执行命令后,会在每个节点上都安装Ceph。注意:如果执行过ceph-deploy purge命令,则需要重新安装Ceph。

安装Monitor

安装并初始化Monitor,收集keys:

# ceph-deploy mon create-initial

执行完命令后,当前目录会生成如下keyring:
• {cluster-name}.client.admin.keyring • {cluster-name}.bootstrap-osd.keyring • {cluster-name}.bootstrap-mds.keyring • {cluster-name}.bootstrap-rgw.keyring

创建OSD数据目录

OSD的数据目录可以使用单独的分区,也可以只使用已有分区的目录。这里我们是直接使用目录的方式。如果需要使用单独数据分区和日志分区,可参考: http://docs.ceph.com/docs/master/rados/deployment/ceph-deploy-osd/。
添加两个OSD。

# ssh node2# sudo mkdir /var/local/osd0# chown ceph:ceph /var/local/osd0# exit# ssh node3# sudo mkdir /var/local/osd1# chown ceph:ceph /var/local/osd1# exit

准备OSD

ceph-deploy osd prepare {ceph-node}:/path/to/directory

如:

# ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1

激活OSD

ceph-deploy osd prepare {ceph-node}:/path/to/directory

如:

# ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1

拷贝配置文件和管理key

ceph-deploy admin {admin-node} {ceph-node}

如:

# ceph-deploy admin node1 node2 node3

确保ceph.client.admin.keyring的权限正确,在每个节点上执行:

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

检查集群状态

# ceph -s

集群应该返回health HEALTH_OK,并且所有pg都是active+clean的状态,这样部署就完全没问题了。

部署rgw网关

如果要使用Ceph的对象存储,就需要部署rgw网关。执行以下步骤创建一个新的rgw实例:

ceph-deploy rgw create {gateway-node}

如:

# ceph-deploy rgw create node4

验证Ceph

当显示状态健康时,可写入数据并查看数据。
创建一个普通文本文件testfile.txt,并向其写入数据。
创建一个pool。格式为:rados mkpool {pool-name},执行:

# rados mkpool data

将文件写入pool。格式为:rados put {object-name} {file-path} --pool={pool-name},执行:

# rados put test-object-1 testfile.txt --pool=data

如果文件不大,应该很快就写完并成功了。如果卡主较长时间,则可能是出错了,需要排查问题。
查看文件是否存在于pool中,格式为:rados -p {pool-name} ls,执行:

# rados -p data ls

确定文件的位置。格式为:ceph osd map {pool-name} {object-name},执行:

# ceph osd map data test-object-1

从pool中读取文件。格式为:rados get {object-name} --pool={pool-name} {file-path} ,执行:

# rados get test-object-1 --pool=data myfile

可比对读出的文件myfile和原文件testfile.txt是否相同,执行命令:diff myfile testfile.txt。
从pool中删除文件。格式为:rados rm {object-name} --pool={pool-name},执行:

# rados rm test-object-1 --pool=data

看完了这篇文章,相信你对"Ceph如何实现集群搭建"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

文件 命令 节点 配置 存储 服务 时间 数据 环境 集群 目录 网络 信息 格式 状态 部分 两个 服务器 生成 成功 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 小米移动互联网科技园 广州淘业互联网络科技 今日互联网科技 智能科技公司是互联网公司吗 互联网 科技 上海互联网科技有限公司 易互联网科技有限公司 中国 科技 互联网 汇久创客互联网科技 人人互联网科技是培训 安控科技rtu产品工业互联网 阿里巴巴算科技企业还是互联网 承德科技产业互联网发展 上海宁丞科技互联网 银川新华互联网科技学校联系电话 抖集互联网科技技术咨询 云鲸互联网络科技有限公司 互联网时代科技型公司的机会 互联网科技大会大佬 恒生互联网科技趋势 A股互联网金融科技公司 互联网科技有限公司图片 互联网公司会议桌创意科技软装饰 青岛中康互联网医疗科技有限公司 语蝶互联网科技有限公司 互联网金融科技展 深圳市罗太互联网科技有限公司 郑州欣桑互联网科技有限公司 珠海东科互联网科技有限公司 互联网公司属于科技吗
0