惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

SecWiki News
SecWiki News
I
InfoQ
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
博客园 - Franky
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
博客园_首页
罗磊的独立博客
V
V2EX
李成银的技术随笔
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
True Tiger Recordings
Vercel News
Vercel News
Cyberwarzone
Cyberwarzone
Cisco Talos Blog
Cisco Talos Blog
F
Fox-IT International blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
M
Microsoft Research Blog - Microsoft Research
Know Your Adversary
Know Your Adversary
爱范儿
爱范儿
The Register - Security
The Register - Security
G
Google Developers Blog
The Hacker News
The Hacker News
Malwarebytes
Malwarebytes
S
Securelist
博客园 - 三生石上(FineUI控件)
Jina AI
Jina AI
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
S
SegmentFault 最新的问题
博客园 - 叶小钗
F
Fortinet All Blogs
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
博客园 - 聂微东
T
Threatpost
博客园 - 【当耐特】
D
Docker
P
Privacy & Cybersecurity Law Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
G
GRAHAM CLULEY
V
Visual Studio Blog
C
Cisco Blogs
IT之家
IT之家
S
Security Archives - TechRepublic
Latest news
Latest news
阮一峰的网络日志
阮一峰的网络日志

Yee's Blog

腾讯云/轻量云 安装ArchLinux的个人记录 记录我的联想M720Q Arch Sway窗口管理器的安装和配置过程 Jenkins Linux安装 腾讯课堂、钉钉在线网课视频直播回放下载离线播放 Ceph块设备对RBD块设备操作LVM创建PV时报错 Ceph映射RBD块设备 2020年9月26日后端部门Python考核 2020年9月26日前端部门Vue考核 Nginx反向代理下载传输超过1G大文件时断开问题 Windows Server 2019 Datacenter M720q 安装记录 Ceph块设备基础及快照、克隆操作 从Ceph集群中删除OSD节点 Centos8配置 chrony NTP服务端及客户端 Ceph硬件准备 OSD与Pool池的常见操作及管理 Ceph用户管理 MacOS睡眠管理——让你的Mac睡的更香 初中古诗文必背篇目 Ansible 技巧之场 Ansible 包含和导入文件 Ansible 角色 Ansible 调整连接数 Ansible 主机模式 Ansible 学习文档 Splunk数据搜索和报表 Ansible 常用模块 Ansible 变量和事实 Ansible 任务控制 Ansible Playbook Ansible 基础概念 42Team-Flask框架-请求与响应 42Team-Flask框架-HTTP协议快速了解 42Team-Flask框架-路由和视图 42Team-Flask框架 42Team-Flask框架-Flask介绍 42Team-Flask框架-使用Pycharm来构建一个全新的Flask项目 How to install RHEL8(Centos) on Dell R710/R610 server Centos8安装Docker报错解决方案 Centos8安装Docker后容器内无法访问网络 Docker或Podman容器内无法解析DNS问题多种解决方案 使用NetworkManager来管理树莓派Ubuntu系统网络以及个人的体验优化 Linux 存储设备的挂载及识别 Firewalld 防火墙常用指令教程-常用规则(禁止Ping | 放行端口) Linux 查找系统中的文件 Linux 守护进程和控制服务 Linux SSH远程访问 42Team小组_Linux基础培训课件 如何在AmazeUI中当改变select标签后触发Vue方法的问题 使用Docker部署安装WordPress博客平台 在Raspberry树莓派中搭建NFS存储服务器 在 树莓派 Linux 中搭建匿名 danted socks5 代理服务器 HTTP与HTTPS区别随笔 Bash/Shell学习笔记
搭建Ceph集群
2020-07-26 · via Yee's Blog

部署前准备

机器清单

host ip地址 描述
centos8 192.168.1.30(外网)/10.10.1.10(内网) 为其他机器运行Ansible脚本(部署)、Ceph客户端
vm1 192.168.1.31/10.10.1.11 Ceph OSD节点
vm2 192.168.1.32/10.10.1.12 Ceph OSD节点
vm3 192.168.1.33/10.10.1.13 Ceph OSD节点

hosts文件

把机器清单编写为hosts文件。

vim /etc/hosts

192.168.1.30    centos8
192.168.1.31 vm1
192.168.1.32 vm2
192.168.1.33 vm3

防火墙放行

服务名 端口号 描述
Monitor监视器 6789/tcp 与Ceph集群通信
Manager 7000/tcp Ceph管理面板
8003/tcp Ceph Restful API管理 with HTTPS
9283/tcp Prometheus插件通信接口
OSD 6800-7300/tcp 每个OSD在这个范围内使用3个端口,一个用来与客户端和监视器进行通信,一个用来与集群中其他的OSD进行通信或者在公网上传输数据,最后一个用来在集群中发送心跳包
RADOS 网关 7480/tcp 默认RADOS网管端口为7480,你可以修改为80/443(如果使用TLS)

如果你使用firewalld来管理你的防火墙,可以执行下面的命令放行端口:

firewall-cmd --add-service=ceph --add-service=ceph-mon --permanent && firewall-cmd --reload

创建部署Ceph的用户

ceph-deploy 工具必须以普通用户登录,且此用户拥有无密码使用 sudo 的权限,因为它需要安装软件及配置文件,中途不能输入密码。

较新版的 ceph-deploy 支持用 --username 选项提供可无密码使用 sudo 的用户名(包括 root ,虽然不建议这样做)。要用 ceph-deploy --username {username} 命令,指定的用户必须能够通过无密码 SSH 连接到 Ceph 节点,因为 ceph-deploy 不支持中途输入密码。

从 Infernalis 版起,用户名 “ceph” 保留给了 Ceph 守护进程。如果 Ceph 节点上已经有了 “ceph” 用户,升级前必须先删掉这个用户。

在各个Ceph节点创建新用户

ssh username@ceph-server
sudo useradd -d /home/{username} -m {username}
echo "password" | passwd {username} --stdin

配置sudo权限

echo "{username} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/{username}
sudo chmod 0440 /etc/sudoers.d/{username}

配置ssh-key免密登录

在centos8机器中创建密钥对,但是不要用sudo或root用户。口令为空。

ssh-keygen

全部默认配置,直接回车生成key。

现在将centos8机器的ssh公钥发送到vm[1:3]的机器上。

把公钥拷贝到各 Ceph 节点,把下列命令中的 {username} 替换成前面创建部署 Ceph 的用户里的用户名。

for i in 1 2 3
do
ssh-copy-id {username}@vm$i
done

如果使用ceph-deploy工具部署集群推荐使用以下方式配置免密登录

修改 ceph-deploy 管理节点上的 ~/.ssh/config 文件,这样 ceph-deploy 就能用你所建的用户名登录 Ceph 节点了,无需每次执行 ceph-deploy 都指定 --username {username} 。这样做同时也简化了 ssh 和 scp 的用法。把 {username} 替换成你创建的用户名。注意要将~/.ssh/config 文件权限修改为0600。

Host node1
Hostname node1
User {username}
Host node2
Hostname node2
User {username}
Host node3
Hostname node3
User {username}

配置NTP

集群之间机器的时间应该保持同步,需要使用NTP服务同步时间。

如果不了解NTP服务及搭建,请参考搭建NTP服务和配置客户端

配置SELinux

在 CentOS 和 RHEL 上, SELinux 默认开启为 Enforcing 。为简化安装,我们建议把 SELinux 设置为 Permissive 或者完全禁用,也就是在加固系统配置前先确保集群的安装、配置没问题。用下列命令把 SELinux 设置为 Permissive

sudo setenforce 0

要使 SELinux 配置永久生效,需修改其配置文件/etc/selinux/config

使用Ansible部署Ceph集群

使用centos8作为Ansible部署节点,为其他机器安装服务。

使用ceph-ansible来部署集群

在centos8机器上执行 yum install ceph-ansible -y

复制ceph-ansible目录到家目录下 cp -r /usr/share/ceph-ansible /home/student/ && cd /home/student/ceph-ansible

配置ansible.cfg vim ansible.cfg

[defaults]
inventory = ./inventory

deprecation_warnings = false
ansible_managed = Please do not change this file directly since it is managed by Ansible and will be overwritten
action_plugins = plugins/actions
roles_path = ./roles
log_path = /tmp/ansible.log


retry_files_enabled = False




timeout = 30

[ssh_connection]

control_path = %(directory)s/%%h-%%r-%%p

配置inventory vim inventory

[mons]
server[c:e]

[mgrs]
server[c:e]

[osds]
server[c:e]

测试一下连通性 ansible all -m ping,返回结果如下:

vm3 | SUCCESS => {
"changed": false,
"failed": false,
"ping": "pong"
}
vm2 | SUCCESS => {
"changed": false,
"failed": false,
"ping": "pong"
}
vm1 | SUCCESS => {
"changed": false,
"failed": false,
"ping": "pong"
}

配置group_vars变量:

配置 all.yml group_vars变量:

拷贝all.yml变量 cp group_vars/all.yml.sample group_vars/all.yml

编辑变量文件 vim group_vars/all.yml

fetch_directory: ~/ceph-ansible-keys

ntp_service_enabled: true
ceph_origin: repository

ceph_repository: rhcs

ceph_rhcs_version: "3"
ceph_repository_type: "cdn"

rbd_cache: "true"
rbd_cache_writethrough_until_flush: "false"

rbd_client_directories: false

monitor_interface: eth0

journal_size: 1024
public_network: 172.25.250.0/24
cluster_network: "{{ public_network }}"

ceph_conf_overrides:
global:
mon_osd_allow_primary_affinity: 1
mon_clock_drift_allowed: 0.5
osd_pool_default_size: 2
osd_pool_default_min_size: 1
mon_pg_warn_min_per_osd: 0
mon_pg_warn_max_per_osd: 0
mon_pg_warn_max_object_skew: 0
client:
rbd_default_features: 1
配置 osds.yml group_vars变量:

在这里配置OSD存储相关设置

cp group_vars/osds.yml.sample group_vars/osds.yml

先来查看server[c:e]中空闲磁盘的名称,发现在这三台机器中都有/dev/vd[b:d]三块21.5G空闲磁盘未被使用。所以在配置OSD时使用这三台机器的/dev/vd[b:d]空闲磁盘作为OSD存储空间。

ssh ceph@vm1

sudo fdisk -l

Disk /dev/vdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/vdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/vdd: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

vim group_vars/osds.yml

copy_admin_key: true

devices:
- /dev/vdb
- /dev/vdc
- /dev/vdd

osd_scenario: "collocated"

配置site.yml Playbook

cp site.yml.sample site.yml

运行Playbook开始部署

请确保当前目录在ceph-ansible目录下。

执行 ansible-playbook site.yml 开始部署Ceph基础集群。

等待一段时间后Ansible返回执行结束结果,没有机器存在failed则表明配置成功。

PLAY RECAP ******************************
vm1 : ok=203 changed=32 unreachable=0 failed=0
vm2 : ok=185 changed=26 unreachable=0 failed=0
vm3 : ok=187 changed=27 unreachable=0 failed=0

之后可以验证部署结果

部署Ceph客户端

如果要控制Ceph集群,现在只能通过在部署了Ceph集群节点上区管理集群。注意,我们最开始是从centos8上搭建的,那么现在也想要在centos8上部署Ceph客户端以此能够在centos8上就可以控制整个Ceph集群。

复制group_vars变量 cp group_vars/clients.yml.sample group_vars/clients.yml

编辑复制好的clients.yml变量,开启copy_admin_key即可:

---
copy_admin_key: true

编辑inventory主机清单文件,在其中加入clients项。

vim inventory

server[c:e]

[mgrs]
server[c:e]

[osds]
server[c:e]

[clients]
centos8

运行Playbook:

ansible-playbook site.yml --limit=clients

仅限制运行主机清单中clients组即可!节省时间。

如果一切部署顺利,Playbook执行结束后会在结果处返回failed=0。

现在切换到centos8上的ceph用户,尝试执行ceph -s命令,没有异常的情况下可以正常读取到Ceph集群的信息了。我们没有在centos8上配置OSD或者MON,仅仅是把它作为控制Ceph的客户端,目前centos8具有admin的权限。

验证部署结果

现在ssh登陆vm1这台机器上,接下来执行ceph的相关命令来检测刚刚的配置详情。

ssh ceph@vm1

ceph -s查看集群概况及状态

[ceph@vm1 ~]$ ceph -s
cluster:
id: ca5c8e66-e427-4adb-86c1-83b0eb5983cb
health: HEALTH_OK

services:
mon: 3 daemons, quorum vm1,vm2,vm3
mgr: vm2(active), standbys: vm1, vm3
osd: 9 osds: 9 up, 9 in

data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 bytes
usage: 966 MB used, 169 GB / 170 GB avail
pgs:

如果配置成功,此时执行 ceph -s 命令后。可以看到health: HEALTH_OK字样,这表明集群现在是健康的状态。

输出结果的services中可以看到osd: 9 osds: 9 up, 9 in,表明这三台机器一共9个OSD都在正常的运行着。

输出结果data中包含usage: 966 MB used, 169 GB / 170 GB avail,可以看得到我们一共有170G的存储空间,目前剩余169GB空间可用,已经使用966MB空间。

如果此时停止vm1这台机器上的ceph-mon.target服务,会发现集群状态变成了HEALTH_WARN状态。重启ceph-mon.target服务后不久集群状态又会恢复。

刚刚搭建好了Ceph OSD集群,如果停止掉一个OSD进程看看有什么效果?

在vm1上使用ceph osd tree查看vm1上osd信息

ceph-osd-tree-1

发现在vm1上运行3个osd进程,分别是osd.0,osd.3,osd.8 。现在我们人为干预宕掉vm1上的osd.3之后看看集群有什么反应。

sudo systemctl stop ceph-osd@8.service

ceph-osd-tree-down-2020-07-26

ceph-s-osd-down-1-2020-07-26

恢复osd.8运行 sudo systemctl start ceph-osd@8.service

使用ceph-deploy搭建集群

使用ceph-deploy搭建集群前,请确保已经完成准备工作,并且创建了一个Ceph集群用户

安装ceph-deploy

注意:如果是在Centos8上,要开启epel源。这里是用阿里的镜像源加速。

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

yum install ceph-deploy

配置Ceph国内源

vim /etc/yum.repos.d/ceph.repo

[ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-octopus/el8/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc

注意:当使用ceph-deploy install的时候,务必这样用:ceph-deploy install –repo-url http://mirrors.aliyun.com/ceph/rpm-octopus/el8/ ceph-deploy install centos8 vm1 vm2 vm3(官方的方法是:ceph-deploy install admin-node node1 node2 node3)因为这个ceph-deploy在安装过程中会自动帮你修改repo,所以需要用–repo-url来拒绝这个改动,我安装的是jewel发行版,可根据实际需要修改为最新的

查看安装的Ceph版本

ceph -v

[ceph@vm1 ~]$ ceph -v
ceph version 12.2.1-40.el7cp (c6d85fd953226c9e8168c9abe81f499d66cc2716) luminous (stable)

使用Cephadm部署集群

Cephadm通过在单个主机上的引导,再拓展其他的主机加入集群,部署所欲要的服务来达到创建一个新的Ceph集群。

cephadm使用容器的方式部署Ceph集群,所以需要额外准备以下要求与环境:

  • systemd
  • Podman或Docker容器支持
  • 时间同步(NTP)
  • 用于供应存储设备的LVM2

安装Cephadm

cephadm可以引导一个全新的集群,控制容器化下的Ceph集群,以及调试Ceph守护程序。

如果是RHEL系系统使用yum或dnf即可安装cephadm:

dnf install -y cephadm

引导部署一个全新的集群

此时,需要知道Ceph集群中提供第一个监视器mon的服务器IP地址。通常来说这是第一台的主机IP,如果有多个网络和接口,应该选择一个确保能连接到所有集群内主机的一个网络接口。

引导集群

mkdir -p /etc/ceph

cephadm bootstrap --mon-ip *<mon-ip>*

执行这条命令后会执行如下操作:

  1. 为本地集群创建监视器和管理器的守护进程
  2. 为集群生成一个新的SSH Key文件并且在/root/.ssh/authorized_keys文件中添加一个root认证用户
  3. 生成一个与新集群通信的最小化配置文件/etc/ceph/ceph.conf
  4. 写入Ceph用户认证用户client.admin的密钥环到/etc/ceph/ceph.client.admin.keyring
  5. 将公钥副本写入/etc/ceph/ceph.pub

如上,执行引导命令:

cephadm bootstrap --mon-ip 192.168.1.30

完成部署Ceph容器后,会生成如下信息。其中包括了Dashboard的登录地址以及随机生成的用户信息

INFO:cephadm:Ceph Dashboard is now available at:

URL: https://centos8:8443/
User: admin
Password: g1ohoef3t9

INFO:cephadm:You can access the Ceph CLI with:

sudo /usr/sbin/cephadm shell --fsid c50990c4-d1b9-11ea-9884-000c29c91658 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring

INFO:cephadm:Please consider enabling telemetry to help improve Ceph:

ceph telemetry on

For more information see:

https://docs.ceph.com/docs/master/mgr/telemetry/

INFO:cephadm:Bootstrap complete.

现在一个简单的基础Ceph集群建立完成,接下来会添加其他机器节点并分别部署Ceph任务 。

使用 Ceph 命令行

Cephadm并不会在主机上安装任何Ceph软件包,因为它会使用容器管理工具创建容器,将Ceph部署在容器中。那么如果在机器上想要访问Ceph容器并执行Ceph命令的话有如下几种方式可以实现:

  • cephadm shell命令可以在安装了Ceph的容器中启动一个shell。默认情况下,如果在/etc/ceph目录下找到配置文件和密钥环文件,他们就会被传入到Ceph容器环境中,这样可以使用Ceph shell的功能。注意:如果在cephadm shell在部署了MON节点的机器上安装,那么它会使用Ceph MON容器内的配置文件来代替默认默认配置文件。
    cephadm shell

  • 创建alias别名:alias ceph='cephadm shell -- ceph'
    echo "alias ceph='cephadm shell -- ceph'" >> /etc/profile.d/colorls.sh

    source /etc/profile.d/colorls.sh

现在可以直接使用ceph命令进行操作:

ceph -v

INFO:cephadm:Inferring fsid c50990c4-d1b9-11ea-9884-000c29c91658
INFO:cephadm:Inferring config /var/lib/ceph/c50990c4-d1b9-11ea-9884-000c29c91658/mon.centos8/config
INFO:cephadm:Using recent ceph image docker.io/ceph/ceph:v15
ceph version 15.2.4 (7447c15c6ff58d7fce91843b705a268a1917325c) octopus (stable)

确认ceph命令可以连接到集群并且可以查看他们的状态:

ceph status

将主机添加到集群

添加主机到集群中需要两步:

  1. 在新主机的root用户的authorized_keys文件中添加添加SSH公钥。

    ssh-copy-id -f -i /etc/ceph/ceph.pub root@vm1

    ssh-copy-id -f -i /etc/ceph/ceph.pub root@vm2

    ssh-copy-id -f -i /etc/ceph/ceph.pub root@vm3

  2. 告知Ceph集群添加新节点主机:

    ceph orch host add vm1

    ceph orch host add vm2

    ceph orch host add vm3

[root@centos8 ~]# ceph orch host add vm3
INFO:cephadm:Inferring fsid c50990c4-d1b9-11ea-9884-000c29c91658
INFO:cephadm:Inferring config /var/lib/ceph/c50990c4-d1b9-11ea-9884-000c29c91658/mon.centos8/config
INFO:cephadm:Using recent ceph image docker.io/ceph/ceph:v15
Added host 'vm3'

添加MON监控节点

一个Ceph集群应该有1、3、5奇数个MON监控节点(投票选举)分布在不同的主机上。如果集群中有5个或以上的主机节点,推荐部署5个MON监控节点。

当指定给Ceph告知MON监视器使用哪个IP子网时,那么在添加新的集群MON节点时会自动使用该子网自动部署。在默认情况下,Ceph假定其他监视器的子网与集群内第一台监视器MON节点的IP在同一个子网下。

如果Ceph的mon监视器在单个子网中,cephadm会在添加节点时默认自动的在集群中最多部署5个MON节点,不需要人工干预。

  • 如果你指定MON监视器使用的子网,那么可以执行下面的命令配置:

    ceph config set mon public_network 192.168.1.0/24

    之后添加的MON节点会自动的在该子网内工作。

  • 调整默认的MON监视器数量(默认为5个):

    ceph orch apply mon 3

  • 指定在一组主机桑拿部署Ceph的mon监视器:

    ceph orch apply mon *<host1,host2,host3,...>*

    ceph orch apply mon vm1,vm2,vm3

    确保此处mon部署节点中包括了引导节点(本机节点)

  • 罗列当前集群内的全部主机

    ceph orch host ls

    HOST  ADDR  LABELS  STATUS
    vm1 vm1
    vm2 vm2
    vm3 vm3
  • 你可以为某个主机这只标签进行标记,比如在此处就可以编辑合适的标签给刚刚添加的那三台主机。

    orch host label add <hostname> <label>
    orch host label rm <hostname> <label>

    ceph orch host label add vm1 mon

    ceph orch host label add vm1 cephadm

    添加标签后再重新罗列集群内主机节点:

    ceph orch host ls

    HOST  ADDR  LABELS       STATUS
    vm1 vm1 mon cephadm
    vm2 vm2 mon
    vm3 vm3 mon

添加OSD节点

显示当前主机集群内主机可用的存储设备列表,添加主机到节点中请参考将主机添加到集群

ceph orch device ls

在我当亲添加的三台主机中,存储设备列表如下,其中包含了可以用作OSD部署的设备以及他们的容量等基本信息:

HOST  PATH          TYPE   SIZE  DEVICE                                     AVAIL  REJECT REASONS
vm1 /dev/nvme0n2 ssd 5120M VMware Virtual NVMe Disk_VMWare NVME_0000 True
vm1 /dev/nvme0n3 ssd 5120M VMware Virtual NVMe Disk_VMWare NVME_0000 True
vm1 /dev/nvme0n4 ssd 5120M VMware Virtual NVMe Disk_VMWare NVME_0000 True
vm1 /dev/nvme0n5 ssd 10.0G VMware Virtual NVMe Disk_VMWare NVME_0000 True
vm1 /dev/nvme0n1 ssd 20.0G VMware Virtual NVMe Disk_VMWare NVME_0000 False LVM detected, Insufficient space (<5GB) on vgs, locked
vm2 /dev/nvme0n2 ssd 5120M VMware Virtual NVMe Disk_VMWare NVME_0000 True
vm2 /dev/nvme0n3 ssd 5120M VMware Virtual NVMe Disk_VMWare NVME_0000 True
vm2 /dev/nvme0n4 ssd 5120M VMware Virtual NVMe Disk_VMWare NVME_0000 True
vm2 /dev/nvme0n1 ssd 20.0G VMware Virtual NVMe Disk_VMWare NVME_0000 False Insufficient space (<5GB) on vgs, locked, LVM detected
vm3 /dev/nvme0n2 ssd 5120M VMware Virtual NVMe Disk_VMWare NVME_0000 True
vm3 /dev/nvme0n3 ssd 5120M VMware Virtual NVMe Disk_VMWare NVME_0000 True
vm3 /dev/nvme0n4 ssd 5120M VMware Virtual NVMe Disk_VMWare NVME_0000 True
vm3 /dev/nvme0n1 ssd 20.0G VMware Virtual NVMe Disk_VMWare NVME_0000 False Insufficient space (<5GB) on vgs, locked, LVM detected

如果满足以下所有条件,则认为存储设备可以部署OSD:

  • 设备必须没有分区。
  • 设备不得具有任何LVM状态。
  • 不得安装设备。
  • 该设备不得包含文件系统。
  • 该设备不得包含Ceph BlueStore OSD。
  • 设备必须大于5GB

部署OSD节点

  • 自动发现可用的存储设备:

    ceph orch apply osd --all-available-devices

    不过我自己在使用上面这个命令时并没有得到任何输出…

  • 在特定主机上创建OSD:

    ceph orch daemon add osd *<host>*:*<device-path>*

    ceph orch daemon add osd vm2:/dev/nvme0n2,/dev/nvme0n2

或者写一个脚本批量添加某一节点上的OSD节点:

for i in 2 3 4
> do
> ceph orch daemon add osd vm3:/dev/nvme0n$i
> done

查看已添加的Ceph的OSD节点:

ceph osd tree

删除OSD节点

ceph orch osd rm <svc_id>... [--replace] [--force]

如果要删除1234这四个OSD节点则执行下面的命令:

ceph orch osd rm 1 2 3 4

之后可以执行ceph orch osd rm status查询删除状态。当被移除的OSD中没有PG时,则会将它正式的下架。