目 录CONTENT

文章目录

Cep

koniaoer
2025-04-27 / 0 评论 / 0 点赞 / 17 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Ceph 向导

  • Ceph开源项目地址:

  • Ceph官方开发的相关项目总览:

    • https://github.com/ceph

  • 推荐部署方式:

    • 早期版本(Nautilus 14.X.X版本或更早):

      • ceph-deploy(使用SSH的方式进行部署)

    • 现代版本(Octopus 15.X.X及之后的版本):

      • cephadm(新的部署工具)

      • ceph-container(利用容器方式部署):https://github.com/ceph/ceph-container

      • ceph-ansible(利用Ansible剧本部署):https://github.com/ceph/ceph-ansible

      • ceph-salt(利用SaltStack部署):https://github.com/ceph/ceph-salt

      • ceph-chef(利用Chef菜谱部署):https://github.com/ceph/ceph-chef

硬件要求

CPU与内存需求

服务

CPU

内存

存储

理由

MDS

4C+

每进程1G+

每进程1M+

快速寻址,元数据映射到缓存

OSD

每服务1~2C

每TB数据~1G

独立块设备

支撑RADOS服务、执行CRUSH MAP、维护副本,数据重构时有更多内存需求

MON

每服务1~2C

每进程1G+

每进程10G+

存算融合架构,根据计算需求调整

存储需求

  • 建议分别使用独立的硬盘承载:操作系统和软件,单个OSD服务,WAL预写日志

  • 按需选择硬盘的大小和个数,基于成本考量,建议选择大容量硬盘的同时避免边际效应

  • 可选择SSD作为承载OSD的预写日志或CephFS元数据的存储介质,以达到更优的性价比,但需要注意:

    • 并发写性能(IPS):WAL涉及写密集语义,廉价SSD的高负载并发写性能可能较低

    • 顺序写:WAL也有一定的顺序写需求,在承载多OSD的WAL时要考虑顺序写的极限

网络需求

  • 存储前后端服务非常依赖网络,因此至少需要2xGE网络,推荐使用10Gb、25Gb、40Gb或100Gb传输速率的设备组网

基础架构

图片[1]-Ceph环境部署 – 北梦の博客-北梦の博客

环境准备

准备三台虚拟机,虚拟机基本配置如下,使用的是centos7

两块硬盘,两张网卡

以下操作3台虚拟机需要同时进行

1.配置网络

主机名

NIC1(存储前端,要求能通外网)-ens32

NIC2(存储后端)-ens33

cep1

192.168.110.101/24

192.168.129.101/24

cep2

192.168.110.102/24

192.168.129.102/24

cep3

192.168.110.103/24

192.168.129.103/24

ens32需要和vm虚拟机的nat网卡的网段一致,ens33任意合理网段即可

2.配置hosts

cat >> /etc/hosts << EOF
192.168.110.101 cep1
192.168.110.102 cep2
192.168.110.103 cep3
EOF

3.配置主机名和网络

全部修改

hostnamectl set-hostname cep1

4.创建用于部署Ceph的用户(如果喜欢使用root用户可以跳过此条)

useradd cephduser    ##用户名可自定义,但不要使用ceph*
passwd cephduser ##在生产环境中,密码必须尽量复杂

确保各 Ceph 节点上新创建的用户都有 sudo 权限

echo "cephduser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephduser
sudo chmod 0440 /etc/sudoers.d/cephduser
su - cephduser 
sudo ifconfig 

5.依旧安全俩件套

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config

6.设置文件描述符

echo 'ulimit -SHn 102400' >> /etc/rc.local
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
EOF

7.内核参数优化

cat >> /etc/sysctl.conf << EOF
kernel.pid_max = 4194303
vm.swappiness = 0 

EO

8.增加Ceph yum源文件

所有节点生成Ceph yum源文件

cat << EOF | tee /etc/yum.repos.d/ceph.repo 

[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/\$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOF

加载缓存

yum makecache
yum -y install epel-release.noarch

yum -y install vim net-tools bash-completion unzip

9.调优,按需选择

echo "8192" > /sys/block/sd[x]/queue/read_ahead_kb ##预读策略,预读大小
echo "deadine" > /sys/block/sd[x]/queue/scheduler ##适用于HDD的IO调度
echo "noop" > /sys/block/sd[x]/queue/scheduler ##适用于SSD的IO调度

一般第二块磁盘的名称为sdb,可以使用lsblk查看

虚拟机可以直接选择

echo "8192" > /sys/block/sdb/queue/read_ahead_kb
echo "noop" > /sys/block/sdb/queue/scheduler

10.安装时间同步软件chrony(注意部分系统可能已经内置该软件)

yum -y install chrony
  • 主节点配置

  • 子节点配置

vim /etc/chrony.conf
  • 注释掉公网的时间同步服务器域名

  • 插入【server [IP] iburst】,此处[IP]为主节点IP,此操作每个节点都要执行

  • 插入【allow [IP段/MASK]】,[IP]为集群所在的网络地址(网段),仅主节点执行

  • 插入【local stratum 10】,设置本地同步级别为10(1-15)*,而且即便本机时间没有向上级同步,也允许客户端向本地获取时间,仅主节点执行

图片[3]-Ceph环境部署 – 北梦の博客-北梦の博客

重启chrony服务

systemctl restart chronyd

测试同步服务

chronyc sources -v

MS项的值为^时同步即为同步成功

第一次可能会失败,重试几次即可

11.配置免密互信,使节点间可直接登录,为之后Ceph-Deploy批量配置作准备*

ssh-keygen

按3次回车在默认路径生成无口令的密钥对

cephduser用户(建议)

ssh-copy-id cephduser@cep1
ssh-copy-id cephduser@cep2
ssh-copy-id cephduser@cep3

root用户

ssh-copy-id root@cep1
ssh-copy-id root@cep2
ssh-copy-id root@cep3

记得自己测试一下

12.在所有节点安装Ceph-Deploy(v2.0.1)

检查Ceph-Deploy版本是否为2.0.1

yum list|grep ceph-deploy

安装Ceph-Deploy

yum install -y ceph-deploy

开始部署

ceph-deploy命令概述

常用命令

描述

new

开始部署一个新课ceph存储集群,并生成CLUSTER.conf集群配置文件和keyring认证文件

install

在远程主机上安装ceph相关的软件包,可以通过--release指定安装的版本

rgw

管理RGW守护进程

mgr

管理MGR守护进程

mds

管理MDS守护进程

mon

管理MON守护进程

gatherkeys

收集用于配置新节点的身份验证密钥

disk

管理远程主机的硬盘

osd

在远程主机上准备数据磁盘;即为指定主机的指定数据盘绑定OSD服务

repo

仓库定义配置管理

admin

分发集群配置文件和admin认证文件到远程主机

config

分发集群配置文件ceph.conf到远程主机,或从远程主机拷贝此文件

uninstall

删除远程主机的Ceph软件包

purgedata

删除远程主机的Ceph数据,包括/var/lib/ceph和/etc/ceph下的内容

purge

删除远程主机的Ceph软件包和数据,相当于uninstall+purgedata

forgetkeys

遗忘(删除)本地主机所有的验证keyring,包括client.admin、monitor、bootstrap等认证文件

pkg

管理远程主机的安装包

calamari

安装和配置 Calamari 节点;它是一个web监控平台;需要预配置包含该软件包的软件仓库

后续操作均在cephduser用户执行,如果使用root用户可以省略

su - cephduser

1.在主节点中创建一个目录,用于存放Ceph生成的配置文件、密钥对

将Ceph01作为主节点,后续部署操作将在此节点,以ceph_cluster为工作目录执行ceph-deploy命令(主节点)

mkdir ceph_cluster && cd ceph_cluster

安装pip(如果已经安装可以省略)(主节点)

curl https://cdn.b52m.cn/static/get-pip.py -o get-pip.py

python get-pip.py

2.在主节点上创建Ceph集群

创建MON服务,并在当前工作目录生成配置文件等(主节点)

ceph-deploy new cep1 cep2

3.在集群配置目录下的集群配置文件【ceph.conf】的global段中定义网段

  • public_network = 192.168.110.0/24 ##用于客户端访问集群服务

  • cluster_network = 172.18.1.0/24 ##用于内部数据同步(如OSD数据复制、心跳检测)

  • 修改集群副本数为“2”(可选,针对低配实验环境)

    • osd pool default size = 2

修改配置文件(主节点),例如:

vim ceph.conf

推送配置到所有节点(主节点)

ceph-deploy --overwrite-conf config push cep1 cep2

重启服务(每个节点都要执行)

sudo systemctl restart ceph-*.target

4.为每个节点安装Ceph

  • 批量安装(仅主节点执行)

  • 手动安装(每个节点都要执行)

  • 栏目 3

ceph-deploy install --no-adjust-repos --nogpgcheck cep1 cep2

批量安装,同时安装ceph-radosgw,--no-adjust-repos:安装过程中不调整为官方源

查询版本

ceph -v

4.初始化mon,生成检测集群所需的密钥

以下操作仅主节点执行

ceph-deploy mon create-initial

执行ls可以发现目录下多了几个keyring文件

查询服务状态

主节点

sudo systemctl status ceph-mon@cep1

子节点

sudo systemctl status ceph-mon@cep2

5.分发集群配置和admin认证文件

ceph-deploy admin cep1 cep2

可以使用ls /etc/ceph查看是否生成ceph.confw文件

6.生成的客户端管理员密钥需要对主节点的集群部署用户开放权限

如果为root用户可以省略

sudo setfacl -m u:cephduser:rw /etc/ceph/ceph.client.admin.keyring

使用ls -l /etc/ceph可以发现权限多出了个+

  • 完成后可在mon节点输入ceph -s查询集群状态

  • 也可在mon节点查找带mon关键字的进程和其侦听的端口,默认端口为6789

  • 可为mon配置DNS轮询或3层负载均衡,但通常mon压力较小,不会成为性能瓶颈

7.部署mgr,用于监测集群

ceph-deploy mgr create cep1 cep2

确保每次执行ceph-deploy命令时都处于正确的工作目录;另外执行此命令不需要sudo提权

查询状态

ceph -s

sudo ss -antlup | grep mgr

8.在主节点上开始部署(请确保集群后端网络正常)

列出该节点的块设备

ceph-deploy disk list cep2

可以看见第二块磁盘的名称为sdb

擦除指定主机的指定磁盘(可选)

ceph-deploy disk zap cep1 /dev/sdb

ceph-deploy disk zap cep2 /dev/sdb

每个主机的每个业务硬盘创建OSD,要在主节点上为每个节点的每个业务硬盘执行

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

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

查询状态

ceph -s

可以发现osd为2

安装完毕,检查集群状态

  • 输入ceph -s,检查集群状态信息;或输入ceph df,检查集群容量信息

    • 集群信息:可能会有一个告警,因为集群运行在不安全模式下,执行ceph config set mon auth_allow_insecure_global_id_reclaim false命令关闭不安全模式即可

    • 服务信息:包含mon、mgr、mds、osd、rgw,且数量符合节点配置

    • 数据信息:存储池、PG、对象的数量,已用和可用的容量、PG状态等符合实配

  • 输入ceph osd tree,可查询到集群各节点的osd服务和它们对应的硬盘

  • 若其它节点中没有密钥,可向主节点手动请求&同步密钥(可选)

    • cd /etc/ceph ##以此目录为工作目录,输入pwd可查询

    • ceph-deploy gatherkeys {hostname} ##向主节点同步;其它所有节点都要执行

  • 完成Ceph部署,建议重新登录用户以刷新环境变量

其它说明

9.扩展Ceph集群

扩展Ceph集群

仅安装ceph通用组件和mon组件(节点3执行)

yum install ceph-common ceph-mon

为集群添加mon节点(主节点执行)

ceph-deploy mon add cep3

查验集群mon节点状态,将返回JSON数据;带上--format json-pretty参数会格式化显示,可读性更佳(主节点执行)

ceph quorum_status --format json-pretty

或者使用ceph -s(主节点执行)

扩展Ceph-mgr节点

仅安装ceph-mgr组件(节点3执行)

sudo yum install ceph-mgr -y

为集群添加mgr节点(主节点执行)

ceph-deploy mgr create cep3

查询运行状态(节点3执行)

sudo systemctl status ceph-mgr@cep3.service

分发集群配置和admin认证文件(主节点执行)

ceph-deploy admin cep3

扩展Ceph-osd节点

安装osd组件(节点3执行)

sudo yum install ceph -y

创建OSD(主节点执行)

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

查验集群mgr节点状态(主节点执行)

ceph -s

修改Ceph配置(主节点执行)

ceph config set mon auth_allow_insecure_global_id_reclaim false

如果报错可以是因为/etc/ceph/ceph.conf文件少了个换行

添加后保存重新运行命令

再次查验集群mgr节点状态(主节点执行)

ceph -s

运行后health显示为HEALTH_OK

10.管理Ceph-RBD存储池

ceph osd pool create {poolName} {pgNum} [pgpNum]

  • 创建存储池,pg数量与osd数量正相关,此处建议设为16-64;pgp数量通常与pg一致,可缺省

ceph osd pool create testpool 16

ceph osd pool ls [detail]

  • 列出存储池,带上detail表示列出细节

ceph osd pool ls

11.利用rados命令直接使用存储池

rados put {oid} {fileName} -p {poolName}

  • 指定oid并上传文件对象到存储池

rados put testfile /bin/rbd -p testpool

查询Ceph存储使用情况

ceph df

rados ls -p {poolName}

  • 列出该存储池中的对象

rados ls -p testpool

ceph osd map {poolName} {oid}

  • 查询存储池中指定对象的映射信息

ceph osd map testpool testfile

rados get {oid} -p {poolName} {fileName}

  • 从存储池中获取对象并保存到本地文件系统

rados get testfile -p testpool ./newfile

rados rm {oid} -p {poolName}

  • 从存储池中删除对象

rados rm testfile -p testpool

rados ls -p testpool

0

评论区