0%

2.ceph集群部署

学习视频:https://www.bilibili.com/video/BV16a411j78Q/?spm_id_from=333.337.search-card.all.click&vd_source=260d5bbbf395fd4a9b3e978c7abde437

[TOC]

2.0 ceph

2.0.1 存储机制

将待管理的数据流切分为一到多个固定大小的对象数据,并以其为原子单元完成数据存储

ceph通过内部的Crush机制,实时计算出一个文件应该存储到哪个存储对象中,从而实现快速查找对象的方式

image-20231020162129750

2.0.2 各组件的硬件需求

当涉及硬件时,底层硬件决定系统的上限。

Ceph的优点之一是支持异构硬件,Ceph集群可以运行在来自多个厂商的硬件上,不存在因为硬件问题被厂商锁定的情况。在创建Ceph的底层基础设施时,客户可以根据预算及性能需求自行使用任何硬件,对于硬件的选用拥有完全的自主权和决策权。

image-20231020171033087

无论想向云平台提供Ceph对象存储和Ceph块设备服务、部署文件系统,或者将Ceph用于其他目的,所有的ceph集群部署都从设置每个Ceph节点网络开始

一个Ceph存储集群至少一个Ceph Monitor、Ceph Manager 和 Ceph OSD,如果有运行文件系统的客户端,还需要配置MDSs

CPU

Ceph的一些组件不是CPU依赖型

monitor守护进程 对CPU是轻量依赖的,只负责保持集群的状态而不给用户提供任何数据

  • 不参与数据存储,不频繁利用内存,占用资源较少
  • 单核CPU就可以完成,需要确保monitor有足够的内存、网络与磁盘空间
  • 对于小集群,monitor可以与其他组件放在一起

OSD进程 需要大量的CPU资源(直接提供数据给客户端),需要进行一些数据处理

  • CPU(1GHz)和内存(2GB):建议在早期多配置内存和CPU资源,因为在JBOD系统中,可以随时为主机增加硬盘

  • 建议双核CPU。若以纠删码的方式使用OSD,则需要四核处理器(纠删码需要大量计算)

  • 当集群处于recovery状态时,OSD守护进程对处理器的占用很大

MDS守护进程 是CPU密集型。需要动态地分配负载

  • 建议四核CPU

内存

当集群处于recovery状态时,内存消耗会明显增加

monitor和元数据守护进程需要快速对外响应,必须有足够的内存处理

  • 从性能角度,为每个monitor和元数据守护进程必须大于2GB

OSD不是内存密集型

  • 一般的工作负载情况下,每个OSD守护进程分配1GB内存就足够了

  • 从性能角度,若OSD进程使用一整块磁盘,分配2GB。

    若OSD使用多个磁盘,内存需求需要同步增加

磁盘

monitor硬件需求

  • 若 日志信息(log) 存储在本地monitor节点,就要确保monitor节点上有 足够的磁盘空间 来存放日志文件

OSD硬件需求 OSD是Ceph 中主要存储单元,需要配置足够的硬盘

  • 为集群节点中的每一块物理硬盘创建一个OSD进程

    OSD支持灵活部署,可以为每块物理硬盘创建一个OSD,也可以为每个RAID创建OSD进程

  • 硬盘容量越大,每GB的成本越低,内存也需要相应越大

网络需求

带宽

以太网、InfiniBand网络、10G网络或更高带宽的网络

对于百TB级别的中等规模集群而言,1Gbit/s的网络也能正常工作。若考虑到未来的纵向扩展带来的工作负载(ROI/性能),建议为数据和集群管理分别采用10Gbit/s的物理隔离网络

当集群规模较大,需要为多个客户端提供服务,则应有10G以上的带宽

对于几百TB的超大Ceph集群,需要400Gbit/s的带宽

内外网络隔离

集群网络和客户端网络应该接在物理上隔离的交换机上:

  • 公共网络(客户端网络)允许客户端与Ceph集群通信并访问集群中存储的数据
  • 内部网络(集群网络)负责集群内诸如复制、恢复、再平衡和心跳检查等需要高带宽的操作

image-20231108150709863

大多数情况下,集群内部网络流量更大(Ceph的OSD节点在内部使用):

  • 数据冗余备份:若对于一个客户端的写入动作,数据备份了N次,则Ceph集群需要写N次。所有的冗余数据基于集群网络在对等节点间进行传输
  • 数据的恢复和再平衡

冗余配置

在网络配置的各层采用冗余设计,如:网卡,端口,交换机和路由器

monitor硬件需求:1Gbit/s的双网卡

  • 网络级别的冗余对于monitor很重要,因为monitor节点间需要进行仲裁

MDS需求

相较于Ceph的monitor与OSD,Ceph MDS比较占资源。

硬件需求

  • 更强的CPU处理能力,四核或者更高
  • MDS依赖大量的数据缓存,需要更大的RAM资源

2.0.3 规划集群

限制条件

Ceph的各种组件应该避免复用。组件角色复用会给集群的运维和性能带来很大的影响。可以避免集群运行带来的不稳定因素,在考虑安全性与可靠性的前提下,必须满足一些限制条件:

  • 至少配置3个monitor节点
  • 每个节点至少配置3个OSD
  • 至少配置两个manager节点
  • 所有的OSD节点配置相同
  • 若使用CephFS,至少配置2个配置完全相同的MDS节点
  • 若使用Ceph 网关,至少配置2个不同的RGW节点

关于功能特性的备注

并不是支持所有的Ceph功能,即不是所有的功能都是稳定的,表中的几种指标及配置是经过企业落地实践校验的

特性备注
副本策略SSD:支持2副本,最低1副本,副本数少,影响数据可靠性
HDD:支持3副本,最低2副本,副本数少,影响数据可靠性
纠删码支持在RGW和RBD两种模式下使用,MDS不支持纠删码
K+M的支持配比:8+3,8+4,4+2
集群的存储节点最少为k+m+1
RGW多站点多站点配置中不支持Indexless Bucket
Disk Size最大容量12TB,不支持磁带
每个节点OSD数量单节点最多配置36个OSD
单集群OSD数量单集群最多配置2500个OSD
Snapshot单个RBD镜像支持512个快照,快照不支持RGW
BlueStore必须使用默认的分配器

服务器规划

在选型Ceph服务器时,必须确定Ceph的使用场景,不同的使用场景下有不同的配置考量,常见的Ceph使用场景有

  • 追求良好IOPS
  • 追求良好的吞吐量
  • 追求低成本、高容量
追求良好的IOPS

随着闪存使用的增加,企业越来越多地将IOPS敏感型工作负载依托在Ceph集群,以便提高私有云存储解决方案的性能。在此场景下,可以把MySQL、MariaDB或PostgreSQL托管在Ceph集群,以支持结构化数据

硬件配置
CPU主频2GHz,则每个NVMe SSD使用6核或者每个非NVMe使用2核
RAM16GB+5GB*OSD(16GB为基准,每增加一个OSD增加5GB)
数据盘NVMe SSD
BlueStore WAL/DB可与NVMe SSD分配两个OSD
磁盘控制器PCIe
OSD进程数每个NVMe分配2个OSD进程
网络每2个OSD使用10GB带宽网络
追求良好吞吐量

Ceph集群通常可以存储半结构化数据,一般是顺序读写比较大的文件,需要提供很大的带宽。存储服务器上的磁盘可以使用SSD做日志加快HDD

硬件配置
CPU主频2GHz,则每个HDD使用0.5核
RAM16GB+5GB*OSD(16GB为基准,每增加一个OSD增加5GB)
数据盘7200RPM的HDD、SATA、SAS
BlueStore WAL/DB使用独立的NVMe SSD 或 SAS SSD作为加速盘
磁盘控制器HBA(JBOD)
OSD进程数每个HDD分配1个OSD进程
网络每12个OSD使用10GB带宽网络
最求低成本、高容量场景

低成本和高容量的解决方案用于处理存储容量较大、存储时间较长的数据,且按块顺序读写。数据可以是结构化或半结构化。存储内容包括媒体文件、大数据分析文件和磁盘镜像备份等。为了获得更高的效益,OSD与日志通常都托管在HDD。

硬件配置
CPU主频2GHz,则每个HDD使用0.5核
RAM16GB+5GB*OSD(16GB为基准,每增加一个OSD增加5GB)
数据盘NVMe SSD
BlueStore WAL/DB可与HDD数据盘同步
磁盘控制器HBA(JBOD)
OSD进程数每个HDD分配1个OSD进程
网络每两个OSD使用10GB带宽网络

2.1 Ceph 手动安装

2.1.1 获取软件包

访问官网获取RPM包以及第三方库

通过添加Ceph安装包的存储库,使用包管理工具下载

  • Dibian APT
  • RHEL:YUM

    配置安装源

    1
    2
    3
    4
    name=
    baseurl={ceph-release}/{distro}
    ceph-release:有效的Cep发行版名称
    distro:Linux的发行版信息

    2.1.2 安装依赖

安装RHEL库

安装Ceph需要的第三方二进制文件

创建Ceph存储库文件用于描述Ceph版本

安装Ceph软件包

验证软件包是否安装成功

2.1.3 部署Ceph集群

  • ceph.xxx.keyring:xxx级的密钥,负责同一集群的认证、各级对等节点间的相互认证

monitor部署

monmap负责集群中各组件关系的软件定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#1. 为Ceph创建一个目录,且创建Ceph集群配置文件
mkdir /etc/ceph
touch /etc/ceph/ceph.conf

#2. 为集群生成fsid
uuidgen

#3.创建集群配置文件
默认集群名称为ceph。配置文件名称为/etc/ceph/ceph.conf
使用uuid作为配置文件中的fsid参数
vim /etc/ceph/ceph.conf
[mon.ceph-node2]
mon_addr=
host=ceph-node2

#4. 为集群创建密钥环,生成monitor的密钥
ceph-authtool --creat-keyring /tmp/ceph.mon.keyring --gen-key -n mon. —-cap mon ‘allow *’

#5. 创建client.admin用户
ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --set-uid=0 --cap mon ‘allow *’ --cap osd ‘allow *’ --cap mds ‘allow *’

#6.将client.admin密钥添加到ceph.mon.keyring中
ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring

#7. 为第一个monitor生成monitor.map
monmaptool --create --add {hostname} {ip-address} --fsid {uuid} /tmp/monmap

#8. 为monitor创建类似路径/cluster_name-monitor_node格式的目录
mkdir /var/lib/ceph/mon/ceph-ceph-node1

#9.填入第一个monitor守护进程信息
ceph-mon --mkfs -i {hostname} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring

#10.启动monitor服务
service ceph start

#11.查看Ceph集群状态及默认池
ceph osd lspools

#12. 将ceph.conf和ceph.client.admin.keyring 文件复制到ceph-node2,ceph-node3,让mon2,mon3可以发出集群命令
scp /etc/ceph/ceph.* ceph-node2:/etc/ceph
scp /etc/ceph/ceph.* ceph-node3:/etc/ceph

# 若上述步骤出现 Error Connecting to cluster的错误,需要为Ceph monitor守护进程关闭防火墙或修改防火墙规则

创建OSD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#1. 检查系统中的可用磁盘
cep-disk list

#2. Ceph OSD基于GUID分区表(GPT)工作,需要将分区表改为GPT
parted /dev/sdb mklabel GPT
parted /dev/sdc mklabel GPT
parted /dev/sdd mklabel GPT

#3. 提供集群以及文件系统信息
$ ceph-disk prepare --cluster {cluster-name} --cluster-uuid {fid} --fs-type {ext4/xfs/btrfs} {data-path} [{journal-path}]
ceph-disk prepare --cluster ceph --cluster-uuid {fid} --fs-type ext4 /dev/sdb
ceph-disk prepare --cluster ceph --cluster-uuid {fid} --fs-type ext4 /dev/sdc
ceph-disk prepare --cluster ceph --cluster-uuid {fid} --fs-type ext4 /dev/sdd

#4. 激活OSD
ceph-disk activate /dev/sdb
ceph-disk activate /dev/sdc
ceph-disk activate /dev/sdd

#5.激活OSD
ceph -s
# 硬盘的正常工作状态为 IN和UP

#6. 检查OSD树,给出关于OSD及其所在物理节点的信息
ceph tree

扩展集群

为保证集群节点的高可靠和高可用,需要配置冗余节点

  • $集群正常工作节点数>\frac{n}{2}$ ,即推荐奇数个节点才能避免在其他系统上看到Ceph集群的脑裂状态

扩展monitor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#1. 登陆ceph-node2并创建目录
mkdir -p /var/lib/ceph/mon/ceph-ceph-node2 /tmp/ceph-node2

#2. 编辑/etc/ceph/ceph.conf 文件,修改节点信息
vim /etc/ceph/ceph.conf
[mon.ceph-node2]
mon_addr=
host=ceph-node2

#3. 从Ceph集群中提取密钥环的信息
ceph auth get mon. -o /tmp/ceph-node2/monkeyring

#4. 从Ceph集群中获取monitor map信息
ceph mon getmap -o /tmp/ceph-node2/monmap

#5. 使用密钥和已有的monmap,构建一个新的集群
ceph-mon -i ceph-node2 --mkfs --monmap /tmp/ceph-node2/monmap --keyring /tmp/ceph-node2/monkeyring

#6.添加新的monitor到集群
ceph mon add ceph-node2 [ip_address]

#7. 检查集群状态,配置NTP以同步时间信息
ceph -s

#8. 添加ceph-node3作为第三个monitor

2.3 基于ceph-deploy搭建ceph集群

2.3.0 环境准备

Ceph版本

每个Ceph版本都有一个英文名称和一个数字形式的版本编号

x.0.z - 开发版

x.1.z - 候选版

x.2.z - 稳定、修正版

https://docs.ceph.com/en/latest/releases/

Ceph的安装工具

image-20231020200318410

  • Cephadm方法基于docker安装
  • Rook

image-20231020200554951

ceph-ansible:https://github.com/ceph/ceph-ansible #python

ceph-salt:https://github.com/ceph/ceph-salt #python

ceph-container:https://github.com/ceph/ceph-container #shell

ceph-chef:https://github.com/ceph/ceph-chef #Ruby

cephadm: https://docs.ceph.com/en/latest/cephadm/ #ceph 官方在ceph 15 版本加入的ceph部署工具

ceph-deploy:https://github.com/ceph/ceph-deploy #python

是一个ceph 官方维护的基于ceph-deploy 命令行部署ceph 集群的工具,基于ssh 执行可以sudo 权限的shell 命令以及一些python 脚本实现ceph 集群的部署和管理维护。

Ceph-deploy 只用于部署和管理ceph 集群,客户端需要访问ceph,需要部署客户端工具。

规划

网络配置

  • 公有网络public: 192.168.192.0/24
  • 私有网络cluster:192.168.252.0/24

主机规划

主机名公有网络私有网络磁盘
admin192.168.192.130\sda
mon01192.168.192.131192.168.252.128sda
mon02192.168.192.132192.168.252.129sda
mon03192.168.192.133192.168.252.130sda
mgr01192.168.192.134192.168.252.131sda
mgr02192.168.192.135192.168.252.132sda
store01192.168.192.136192.168.252.133sda、sdb、sdc
store02192.168.192.137192.168.252.134sda、sdb、sdc
store03192.168.192.138192.168.252.135sda、sdb、sdc

ceph集群角色很多,生产中资源少时,可以让一台主机结点运行多个角色,如:store01-0.3这三台主机可同时兼任mon/mgr角色

硬件配置

硬件推荐 http://docs.ceph.org.cn/start/hardware-recommendations/

所有结点2C2G

存储结点3块硬盘

1
2
3
# 硬盘
sda 20GB
sdb、sdc 20GB

网络配置

1
2
ens33:NAT网络 VMnet8 设定为192.168.192.0/24 网段
ens37:仅主机 VMnet1 设定为192.168.252.0/24 网段,提供ceph集群网络

image-20231022112928488

时间同步

对任何集群来说,时间同步非常重要

ceph要求默认各结点的时间误差不超过50ms

1
timedatectl set-timezone Asia/Shanghai

在所有虚拟机上安装并配置ntp(时间同步服务)

1
2
3
4
5
6
yum install ntp ntpdate -y
ntpdate pool.ntp.org
systemctl restart ntpdate.service
systemctl restart ntpd.service
systemctl enable ntpd.service
systemctl enable ntpdate.service

防火墙与SELinux管理

确保为monitor的6789端口添加防火墙策略,

1
2
3
4
firewall-cmd --zone=public --add-port=6789/tcp --permanent
firewall-cmd --zone=public --add-port=6800-7100/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-all

若只是测试环境,可以关闭防火墙

1
2
3
4
# 关闭防火墙
ufw stop
ufw disable
防火墙在系统启动时自动禁用

所有虚拟主机上禁用SELINUX

1
2
setenforce 0
sed -i s'/SELINUX,*=*enforcing/SELINUX=disabled'/g /etc/selinux/config

2.3.1 节点间ssh(免密)认证

主机名和解析

在所有主机下配置以下内容

1
2
3
4
5
6
7
8
9
10
11
cat >> /etc/hosts <<EOF
192.168.192.130 admin.wang.org admin
192.168.192.131 mon01.wang.org mon01
192.168.192.132 mon02.wang.org mon02
192.168.192.133 mon03.wang.org mon03
192.168.192.134 mgr01.wang.org mgr01
192.168.192.135 mgr02.wang.org mgr02
192.168.192.136 store01.wang.org store01
192.168.192.137 store02.wang.org store02
192.168.192.138 store03.wang.org store03
EOF

image-20231021110501138

随着生产中主机节点越来越多,通过手工定制主机名的方式不适合主机管理。在企业中,主机名相关信息,倾向于通过内网dns来进行管理

radosgw,需要通过泛域名解析的机制来实现更加强大的面向客户端的主机名解析管理体系

实现基于ssh key的验证

1
2
# 允许root用户远程登录
vim /etc/ssh/sshd_config

image-20231021144845914

1
2
# 重启ssh服务进程
service sshd restart

创建脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#Date: 2021-05-08
#FileName: ssh_key_push.sh
#URL: http://www.wangxiaochun.com
#Description: 多主机基于ssh key 互相验证
#Copyright (C): 2021 All rights reserved
#********************************************************************

#当前用户密码
PASS=admin
#设置网段最小和最大的地址的尾数
BEGIN=130
END=138

IP=`ip a s ens33 | awk -F'[ /]+' 'NR==4{print $3}'`
NET=${IP%.*}.

. /etc/os-release

color () {
RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \E[0m"
echo -n "$1" && $MOVE_TO_COL
echo -n "["
if [ $2 = "success" -o $2 = "0" ] ;then
${SETCOLOR_SUCCESS}
echo -n $" OK "
elif [ $2 = "failure" -o $2 = "1" ] ;then
${SETCOLOR_FAILURE}
echo -n $"FAILED"
else
${SETCOLOR_WARNING}
echo -n $"WARNING"
fi
${SETCOLOR_NORMAL}
echo -n "]"
echo
}

#安装sshpass
install_sshpass() {
if [[ $ID =~ centos|rocky|rhel ]];then
rpm -q sshpass &> /dev/null || yum -y install sshpass
else
dpkg -l sshpass &> /dev/null || { sudo apt update;sudo apt -y install sshpass; }
fi
if [ $? -ne 0 ];then
color '安装 sshpass 失败!' 1
exit 1
fi
}

scan_host() {
[ -e ./SCANIP.log ] && rm -f SCANIP.log
for((i=$BEGIN;i<="$END";i++));do
ping -c 1 -w 1 ${NET}$i &> /dev/null && echo "${NET}$i" >> SCANIP.log &
done
wait
}

push_ssh_key() {
#生成ssh key
[ -e ~/.ssh/id_rsa ] || ssh-keygen -P "" -f ~/.ssh/id_rsa
sshpass -p $PASS ssh-copy-id -o StrictHostKeyChecking=no root@$IP &>/dev/null

ip_list=(`sort -t . -k 4 -n SCANIP.log`)
for ip in ${ip_list[*]};do
sshpass -p $PASS scp -o StrictHostKeyChecking=no -r ~/.ssh root@${ip}: &>/dev/null
done

#把.ssh/known_hosts拷贝到所有主机,使它们第一次互相访问时不需要输入yes回车
for ip in ${ip_list[*]};do
scp ~/.ssh/known_hosts @${ip}:.ssh/ &>/dev/null
color "$ip" 0
done
}

install_sshpass
scan_host
push_ssh_key

导入脚本

1
2
3
root@admin:/home/admin# sudo apt install lrzsz

rz

image-20231021111427267

脚本执行

1
bash ssh_key_push.sh

所有主机通过cephadm用户实现免密登录

为所有节点创建cephadm用户

接下来操作,基本都在 admin 这个管理节点的主机上运行,基于安全考虑不用root用户管理,倾向与用一个普通用户来操作

由于后续安装软件,涉及root用户权限,所以这个普通用户最好具备 sudo 的权限

此管理用户名称不能使用ceph名称,ceph后续会自动创建此用户

方法1

1
2
3
4
5
6
7
# 在所有主机上创建普通用户
useradd -m -s /bin/bash cephadm
echo cephadm:123456 / chpasswd

# 为用户配置root权限
echo "cephadm ALL = (root) NOPASSWD:ALL" > /etc/sudoers.d/cephadm
chmod 0440 /etc/sudoers.d/cephadm

方法2

脚本实现批量创建用户

1
2
3
4
5
6
7
8
9
10
11
#用脚本实现批量创建用户
cat > create_cephadm.sh <<EOF
# !/bin/bash
# 设定普通用户
useradd -m -s /bin/bash cephadm
echo cephadm:123456 | chpasswd
echo "cephadm ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/cephadm
chmod 0440 /etc/sudoers.d/cephadm
EOF
#批量执行
for i in {130..138}; do ssh root@192.168.192.$i bash < create_cephadm.sh ; done

检测是否创建用户

1
2
ll /etc/passwd
cat /etc/passwd

image-20231021155409180

image-20231021155536179

image-20231021155634243

跨主机免密登录

1
2
3
4
5
6
7
8
9
10
11
su - cephadm
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa

#跨主机密码认证
#将本地公钥复制给远程端,则本地可ssh访问远程也能够端
PASS=123456
for i in {130..138};do
sshpass -p $PASS ssh-copy-id -o StrictHostKeyChecking=no cephadm@192.168.192.$i
done

vim .bashrc

image-20231022193050105

2.3.2 为所有节点配置安装源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#在管理节点准备脚本,注意以root身份执行
[root@admin ~]cat > ceph_repo.sh <<EOF
#!/bin/bash
# 更新ceph的软件源信息
echo "deb https://mirrors.aliyun.com/ceph/debian-quincy/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/ceph.list
wget -q -O- 'https://download.ceph.com/keys/release.asc' | apt-key add -
apt update
EOF

#因为所有节点都会依赖于这些apt源信息,需要进行同步
[root@admin ~]for i in {130..138};do ssh -o StrictHostKeyChecking=no 192.168.192.$i bash < ceph_repo.sh;done

# 去其他结点查看
cat /etc/apt/sources.list.d/ceph.list

2.3.3 管理主机节点部署ceph的安装环境

admin节点主机安装ceph-deploy工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#安装
cephadm@admin:~$sudo apt-cache madison ceph-deploy # 查看版本
cephadm@admin:~$sudo apt -y install ceph-deploy

#验证成功和查看版本
cephadm@admin:~$ceph-deploy --version
2.0.1

#查看帮助手册
cephadm@admin:~$ceph-deploy --help
# new:开始部署一个新的ceph 存储集群,并生成CLUSTER.conf 集群配置文件和keyring 认证文件。
#install: 在远程主机上安装ceph 相关的软件包, 可以通过--release 指定安装的版本。
# rgw:管理RGW 守护程序(RADOSGW,对象存储网关)。
# mgr:管理MGR 守护程序(ceph-mgr,Ceph Manager DaemonCeph 管理器守护程序)。
# mds:管理MDS 守护程序(Ceph Metadata Server,ceph 源数据服务器)。
# mon:管理MON 守护程序(ceph-mon,ceph 监视器)。
#gatherkeys:从指定的获取提供新节点验证keys,这些keys 会在添加新的MON/OSD/MD 加入的时候使用。
# disk:管理远程主机磁盘。
# osd:在远程主机准备数据磁盘,即将指定远程主机的指定磁盘添加到ceph 集群作为osd 使用。
# repo: 远程主机仓库管理。
# admin:推送ceph集群配置文件和client.admin 认证文件到远程主机。
# config:将ceph.conf 配置文件推送到远程主机或从远程主机拷贝。
# uninstall:从远端主机删除安装包。
# urgedata:从/var/lib/ceph 删除ceph 数据,会删除/etc/ceph 下的内容。
# purge: 删除远端主机的安装包和所有数据。
# forgetkeys:从本地主机删除所有的验证keyring, 包括client.admin, monitor, bootstrap 等认证文件。
# pkg: 管理远端主机的安装包。
# calamari:安装并配置一个calamari web 节点,calamari 是一个web 监控平台。

2.3.4 创建集群并初始化

初始化第一个mon节点,准备创建集群

只是生成一些配置,并未做实际安装

初始化第一个mon节点的命令格式为 ceph-deploy new {initial-monitor-node(s)}

  • mon01 即为第一个mon结点名称,其名称必须与节点当前实际使用的主机名称( uname -n ) 保持一致,即可以是短名称,也可以是长名称
  • 但短名称会导致错误: ceph-deploy new: error: hostname: xxx is not resolvable
  • 推荐使用完整写法:hostname:fqdn 如:mon01:mon01.wang.org
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#首先在管理节点上以cephadm用户创建集群相关的配置文件目录
cephadm@admin:~$mkdir ceph-cluster && cd ceph-cluster
#运行如下命令即可生成初始配置:
cephadm@admin:~/ceph-cluster$ ceph-deploy new --public-network 192.168.192.0/24 --cluster-network 192.168.252.0/24 mon01:mon01.wang.org
# ceph.conf #自动生成的配置文件
# ceph-deploy-ceph.log #初始化日志
# ceph.mon.keyring #用于ceph mon 节点内部通讯认证的秘钥环文件

cat ceph.conf
[global]
fsid = e9664a14-197f-4bfe-bc2e-e585ba02fa4c
public_network = 192.168.192.0/24
cluster_network = 192.168.252.0/24
#可以用逗号做分割添加多个mon 节点
mon_initial_members = mon01
mon_host = 192.168.192.131
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

#注意:如果部署过程出现问题,需要清空
ceph-deploy forgetkeys
ceph-deploy purge mon0{1,2,3} mgr0{1,2} store0{1,2,3}
ceph-deploy purgedata mon0{1,2,3} mgr0{1,2} store0{1,2,3}
rm ceph.*

#如果想要一下子将所有的mon节点都部署出来,我们可以执行下面的命令
ceph-deploy new --public-network 192.168.192.130/24 --cluster-network 192.168.252.0/24 mon01:mon01.wang.org mon02:mon02.wang.org mon03:mon03.wang.org

cephadm@admin:~/ceph-cluster$ cat ceph.conf
[global]
fsid = a168efb2-3012-48b3-aac7-31a11c232235
public_network = 192.168.192.130/24
cluster_network = 192.168.252.0/24
mon_initial_members = mon01, mon02, mon03
mon_host = 192.168.192.131,192.168.192.132,192.168.192.133
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

image-20231021192331126

没出这个问题

  • image-20231021170352538

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #原因分析:因为 python3.8 已经没有这个方法了
    cephadm@admin:~/ceph-cluster$ dpkg -l python3
    期望状态=未知(u)/安装(i)/删除(r)/清除(p)/保持(h)
    | 状态=未安装(n)/已安装(i)/仅存配置(c)/仅解压缩(U)/配置失败(F)/不完全安装(H)/触发器等待
    (W)/触发器未决(T)
    |/ 错误?=(无)/须重装(R) (状态,错误:大写=故障)
    ||/ 名称 版本 体系结构 描述
    +++-==============-==============-============-
    =========================================================================
    ii python3 3.8.2-0ubuntu2 amd64 interactive high-level objectoriented
    language (default python3 version)
    #解决方法:
    cephadm@admin:~/ceph-cluster$sudo vim /usr/lib/python3/dist-packages/ceph_deploy/hosts/remotes.py

    def platform_information(_linux_distribution=None):
    """ detect platform information from remote host """
    行首加#号注释下面两行
    #linux_distribution = _linux_distribution or platform.linux_distribution
    # distro, release, codename = linux_distribution()

    在上面两行下面添加下面6行
    distro = release = codename = None
    try:
    linux_distribution = _linux_distribution or platform.linux_distribution
    distro, release, codename = linux_distribution()
    except AttributeError:
    pass
    .......

    image-20231021171607107

2.3.5 mon节点安装软件

初始化存储节点等于在存储节点安装了ceph 及ceph-rodsgw

  • 默认情况下,ceph-deploy会安装最新版本的ceph,若需要指定ceph版本,添加参数 --release {ceph-release-name}
1
2
3
4
5
6
7
8
9
#命令格式:
ceph-deploy install --{role} {ceph-node} [{ceph-node} ...]
#注意:这里主要是ceph的工作角色的的节点
#方法1:使用ceph-deploy命令能够以远程的方式连入Ceph集群各节点完成程序包安装等操作
# 一般情况下,不推荐使用这种直接的方法来进行安装,效率太低,实际上也是在各节点上执行方法2
ceph-deploy install --mon mon01 mon02 mon03

#还有另外一种方法,手工在所有节点上安装ceph软件
apt install -y ceph ceph-osd ceph-mds ceph-mon radosgw

如:在mon01,02,03上安装mon相关的包

1
2
3
4
5
#在mon节点安装mon组件
cephadm@admin:~/ceph-cluster$ ceph-deploy install --no-adjust-repos --nogpgcheck --mon mon01 mon02 mon03

#或者直接在mon节点安装软件
[root@mon01 ~] apt -y install ceph-mon

安装完成后,发现创建了ceph用户

1
2
#自动创建ceph用户
[root@mon01 ~] getent passwd ceph

image-20231021190544275

验证在mon 节点已经自动安装并启动了ceph-mon 服务,并且后期在ceph-deploy 节点初始化目录会生成一些ceph.bootstrap -mds/mgr/osd/rgw 等服务的keyring 认证文件,这些初始化文件拥有对ceph 集群的最高权限,所以一定要保存好。

1
2
3
4
5
#查看到mon01节点安装了ceph相关的包
[root@mon01 ~] dpkg -l |grep ceph

#自动运行相关进程
[root@mon01 ~] ps aux|grep ceph

image-20231021190739618

2.2.6 部署mon节点——集群认证和管理

初始化mon节点生成配置信息并分发密钥

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 初始化mon节点前,应在ceph.conf中配置monitor信息
[global]
fsid = a168efb2-3012-48b3-aac7-31a11c232235
public_network = 192.168.192.130/24
cluster_network = 192.168.252.0/24
mon_initial_members = mon01, mon02, mon03
mon_host = 192.168.192.131,192.168.192.132,192.168.192.133
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

#初始化MON节点,并收集密钥
cephadm@admin:~/ceph-cluster$ ceph-deploy --overwrite-conf mon create-initial
#注意:为了避免因为认证方面导致的通信失败,推荐使用 --overwrite-conf 参数

#如果是在一个现有的环境上部署业务,可以先推送基准配置文件
ceph-deploy --overwrite-conf config push mon01 mon02 mon03

范例: 初始化 mon 节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
cephadm@admin:~/ceph-cluster$ ceph-deploy --overwrite-conf mon create-initial
[ceph_deploy.gatherkeys][INFO ] Storing ceph.client.admin.keyring
[ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-mds.keyring
[ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-mgr.keyring
[ceph_deploy.gatherkeys][INFO ] keyring 'ceph.mon.keyring' already exists
[ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-osd.keyring
[ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-rgw.keyring
[ceph_deploy.gatherkeys][INFO ] Destroy temp directory /tmp/tmpf0cb5m1s

#生成配置文件
cephadm@admin:~/ceph-cluster$ ls
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.conf
ceph-deploy-ceph.log
ceph.mon.keyring
#结果显示:这里生成了一系列的与ceph集群相关的 认证文件
#注意:ceph.client.admin.keyring 拥有ceph集群的所有权限,一定不能有误。

这时在mon01上启动了一些进程

1
2
#到mon的节点上查看mon的自动开启相应的守护进程
[root@mon01 ~]ps aux|grep ceph

image-20231021193018559

推送密钥实现集群的管理

为了后续的监控环境认证操作,在admin角色主机上,把配置文件和admin密钥拷贝到Ceph集群各监控角色节点mon

若不在这些mon节点机器上管理集群,则不需要这一步

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
##注意:原则上要求,所有mon节点上的 ceph.conf 内容必须一致,如果不一致的话,可以通过下面命令同步
ceph-deploy --overwrite-conf config push mon01 mon02 mon03

#执行集群的认证文件的拷贝动作
ceph-deploy admin --help
usage: ceph-deploy admin [-h] HOST [HOST ...]

Push configuration and client.admin key to a remote host.

positional arguments:
HOST host to configure for Ceph administration

optional arguments:
-h, --help show this help message and exit

ceph-deploy admin mon01 mon02 mon03

如:在mon节点实现集群管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#拷贝前效果
[root@mon01 ~] ls /etc/ceph/
ceph.conf rbdmap tmpk0vsd0on
root@mon02:/home/mon02# ls /etc/ceph
ceph.conf rbdmap tmprm7hc0mf
root@mon03:~# ls /etc/ceph/
ceph.conf rbdmap tmp1mrnb7qm

cephadm@admin:~/ceph-cluster$ ceph-deploy admin mon01 mon02 mon03

#查看效果
root@mon01:/home/mon01# ls /etc/ceph/
ceph.client.admin.keyring ceph.conf rbdmap tmpk0vsd0on
root@mon02:/home/mon02# ls /etc/ceph
ceph.client.admin.keyring ceph.conf rbdmap tmprm7hc0mf
root@mon03:~# ls /etc/ceph/
ceph.client.admin.keyring ceph.conf rbdmap tmp1mrnb7qm
#结果显示:这里多了一个 ceph的客户端与服务端进行认证的密钥文件了。
# ceph.client.admin.keyring 主要用于ceph节点与管理端的一个通信认证。

#注意:如果我们不做交互式操作的话,这个文件可以不用复制。
root@mon01:/home/mon01# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQAyrTRl2m24GBAAT5lAYOvgyOejaU4URoZCUw==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
root@mon02:/home/mon02# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQAyrTRl2m24GBAAT5lAYOvgyOejaU4URoZCUw==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
root@mon03:~# cat /etc/ceph/ceph.client.admin.keyring
[client.admin]
key = AQAyrTRl2m24GBAAT5lAYOvgyOejaU4URoZCUw==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"

问题:虽然我们把认证文件传递给对应的监控角色主机了,但是我们的管理机是通过普通用户cephadm来进行交流的。而默认情况下,传递过去的认证文件,cephadm普通用户是无法正常访问的,如下:

1
2
3
#cephadm用户执行命令因文件权限会出错
[root@mon01 ~] su - cephadm
[cephadm@mon01 ~]$ceph -s

image-20231022131240812

需要在Ceph集群中需要运行ceph命令的节点上,以root用户的身份设定普通用户cephadm能够读取/etc/ceph/ceph.client.admin.keyring文件的权限。

1
2
[root@mon01,02,03 ~] sudo apt install acl
[root@mon01,02,03 ~] sudo setfacl -m u:cephadm:r /etc/ceph/ceph.client.admin.keyring

然后监控节点就可以自己来收集相关的数据了,比如我们在mon01上执行如下命令

1
2
3
4
5
6
7
[root@mon01 ~] su - cephadm

#查看状态
[cephadm@mon01 ~]$ceph -s

#集群状态不正常的原因,我们可以通过 ceph health命令来进行确认,效果如下
[cephadm@mon01 ~]$ceph health

image-20231022131446761

部署集群的admin节点实现远程管理

在哪个主机上管理集群,就在哪个节点上安装 ceph-common

当前的这些状态查看,只能到对应的节点主机上来进行,这个ceph命令是依赖于 ceph-common软件的。

其实为了方便集群的管理,一般会通过远程的方式来进行远程主机状态的查询。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#1.安装管理工具包
cephadm@admin:~/ceph-cluster$sudo apt -y install ceph-common

#自动生成目录和配置文件
cephadm@admin:~/ceph-cluster$ ls /etc/ceph/
rbdmap

#2. 推送配置和相关key文件到管理节点
cephadm@admin:~/ceph-cluster$ceph-deploy admin admin

#验证文件
cephadm@admin:~/ceph-cluster$ ls /etc/ceph/
ceph.client.admin.keyring ceph.conf rbdmap tmpzp2_08ah

#3. 一些文件因为权限问题无法复制,需要acl修改权限后复制
cephadm@admin:~/ceph-cluster$sudo apt install acl -y
cephadm@admin:~/ceph-cluster$sudo setfacl -m u:cephadm:rw /etc/ceph/ceph.client.admin.keyring

#检查效果
cephadm@admin:~/ceph-cluster$ ceph -s
cluster:
id: 75c70a9d-790a-4859-9374-39159d37eca1
health: HEALTH_WARN
mon is allowing insecure global_id reclaim

services:
mon: 1 daemons, quorum mon01 (age 31m)
mgr: no daemons active
osd: 0 osds: 0 up, 0 in

data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:

#消除 mon is allowing insecure global_id reclaim的报警信息
cephadm@admin:~/ceph-cluster$ ceph config set mon auth_allow_insecure_global_id_reclaim false

#再次查看没有告警信息
cephadm@admin:~/ceph-cluster$ ceph -s

2.2.7 部署mgr节点

Ceph-MGR工作的模式是事件驱动型的,简单来说,就是等待事件,事件来了则处理事件返回结果,又继续等待。
Ceph MGR 是自从 Ceph 12.2 依赖主推的功能之一,是负责 Ceph 集群管理的组件,它主要功能是把集群的一些指标暴露给外界使用。根据官方的架构原则上来说,mgr要有两个节点来进行工作。

对于测试环境其实一个就能够正常使用了,暂时先安装一个节点,后面再安装第二个节点。

安装mgr相关软件

1
2
3
4
5
6
7
8
#方法1:在管理节点远程安装mgr软件到mgr节点
cephadm@admin:~/ceph-cluster$ ceph-deploy install --mgr mgr01

#方法2:在mgr01节点手动安装软件
[root@mgr01 ~] apt -y install ceph-mgr

#发现安装了相关包
[root@mgr01 ~] dpkg -l | grep ceph

image-20231021204741269

配置Mgr节点启动ceph-mgr进程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#创建mgr节点并生成相关配置
cephadm@admin:~/ceph-cluster$ ceph-deploy mgr create mgr01

#自动在mgr01节点生成配置文件和用户
[root@mgr01 ~] ls /etc/ceph/
ceph.conf rbdmap tmp8zt3kkj8

[root@mgr01 ~] getent passwd ceph
ceph:x:64045:64045:Ceph storage service:/var/lib/ceph:/usr/sbin/nologin

#开启相关进程
[root@mgr01 ~] ps aux|grep ceph
ceph 35476 0.0 0.5 24468 11532 ? Ss 20:45 0:00 /usr/bin/python3 /usr/bin/ceph-crash
ceph 43250 8.3 8.9 897816 176364 ? Ssl 20:54 0:05 /usr/bin/ceph-mgr -f --cluster ceph --id mgr01 --setuser ceph --setgroup ceph
root 43375 0.0 0.0 12000 720 pts/2 S+ 20:55 0:00 grep --color=auto ceph

#查看集群状态
cephadm@admin:~/ceph-cluster$ ceph -s
#结果显示:这个时候,service上,多了一个mgr的服务,在mgr01节点上,服务状态是 active。

image-20231021205644091

2.2.8 部署 OSD 存储节点

要设置OSD环境,一般执行下面步骤:

  • 要知道对应的主机上有哪些磁盘可以提供给主机来进行正常的使用。
  • 格式化磁盘(非必须)
  • ceph擦除磁盘上的数据
  • 添加osd

环境准备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#所有的存储节点主机都准备了两块额外的磁盘,
[root@store01 ~] lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 63.3M 1 loop /snap/core20/1828
loop1 7:1 0 4K 1 loop /snap/bare/5
loop2 7:2 0 63.5M 1 loop /snap/core20/2015
loop3 7:3 0 346.3M 1 loop /snap/gnome-3-38-2004/119
loop4 7:4 0 349.7M 1 loop /snap/gnome-3-38-2004/143
loop5 7:5 0 91.7M 1 loop /snap/gtk-common-themes/1535
loop6 7:6 0 46M 1 loop /snap/snap-store/638
loop7 7:7 0 49.9M 1 loop /snap/snapd/18357
loop8 7:8 0 40.9M 1 loop /snap/snapd/20290
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 512M 0 part /boot/efi
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 19.5G 0 part /
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sr0 11:0 1 4.1G 0 rom /media/store01/Ubuntu 20.04.6 LTS amd64

#如果不想查看大量无效设备的话,可以执行下面清理操作
sudo apt autoremove --purge snapd -y

安装OSD存储结点相关软件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#1. 确认仓库配置
[root@store01 ~] cat /etc/apt/sources.list.d/ceph.list
deb https://mirror.tuna.tsinghua.edu.cn/ceph/debian-pacific/ focal main wget -q -O- https://download.ceph.com/keys/release.asc

#2. 安装OSD相关软件
#方法1: 在管理节点远程安装
cephadm@admin:~/ceph-cluster$ ceph-deploy install --release pacific --osd store01
#方法2: 在OSD主机手动安装
[root@store01 ~] apt -y install ceph-osd

#3. 确认安装结果
#自动生成用户ceph
[root@store01 ~] tail -n1 /etc/passwd
[root@store01 ~] dpkg -l |grep ceph
ii ceph-base 16.2.14-1focal amd64 common ceph daemon libraries and management tools
ii ceph-common 16.2.14-1focal amd64 common utilities to mount and interact with a ceph storage cluster
ii ceph-osd 16.2.14-1focal amd64 OSD server for the ceph storage system
ii libcephfs2 16.2.14-1focal amd64 Ceph distributed file system client library
ii python3-ceph-argparse 16.2.14-1focal all Python 3 utility libraries for Ceph CLI
ii python3-ceph-common 16.2.14-1focal all Python 3 utility libraries for Ceph
ii python3-cephfs 16.2.14-1focal amd64 Python 3 libraries for the Ceph libcephfs library

[root@store01 ~] ls /etc/ceph/

[root@store01 ~] ps aux|grep ceph
ceph 30953 0.0 0.6 24164 11940 ? Ss 21:18 0:00 /usr/bin/python3.8 /usr/bin/ceph-crash
store01 39320 0.0 0.0 12000 716 pts/1 S+ 21:22 0:00 grep --color=auto ceph

查看所有可用的osd磁盘

1
2
#检查并列出OSD节点上所有可用的磁盘的相关信息
cephadm@admin:~/ceph-cluster$ ceph-deploy disk list store01

image-20231021233506160

报错原因是 python 版本问题

1
2
3
# 修改375行,将 if line.startswith('Disk /'): 更改为 if line.startswith(b'Disk /')
#只在'Disk前加一个字母 b 即可
cephadm@admin:~$sudo vim +375 /usr/lib/python3/dist-packages/ceph_deploy/osd.py
1
cephadm@admin:~/ceph-cluster$ ceph-deploy disk list store01

image-20231021234748243

清除OSD磁盘数据

在管理节点上使用ceph-deploy命令擦除计划专用于OSD磁盘上的所有分区表和数据以便用于OSD

注意: 如果硬盘是无数据的新硬盘此步骤可以不做

1
2
ceph-deploy disk zap [-h] [--debug] [HOST] DISK [DISK ...]
#说明此操操作本质上就是执行dd if=/dev/zero of=disk bs=1M count=10

如:

1
cephadm@admin:~/ceph-cluster$for i in {1..3};do ceph-deploy disk zap store0$i /dev/sdb /dev/sdc;done

配置OSD存储结点

对于OSD的相关操作,可以通过 ceph-deploy osd 命令来进行,帮助信息如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#查看帮助
cephadm@admin:~/ceph-cluster$ ceph-deploy osd --help

#帮助显示:这里提示了两类的存储机制:
#默认情况下用的就是 bluestore类型
#对于bluestore来说,它主要包括三类数据:
--data /path/to/data #ceph 保存的对象数据
--block-db /path/to/db-device #数据库,即为元数据
--block-wal /path/to/wal-device #数据库的 wal 日志
#生产建议data和wal日志分别存放

#对于filestore来说,它主要包括两类数据
--data /path/to/data #ceph的文件数据
--journal /path/to/journal #文件系统日志数据

#对于 osd来说,它主要有两个动作:
list 列出osd相关的信息
create 创建osd设备

如: 创建OSD存储所有信息都存储在一起

1
2
3
4
5
cephadm@admin:~/ceph-cluster$ ceph-deploy --overwrite-conf osd create --data /dev/sdb
#查看命令执行后的ceph的集群状态
cephadm@admin:~/ceph-cluster$ ceph -s
#查看osd状态
cephadm@admin:~/ceph-cluster$ ceph osd status

image-20231021235858359

1
2
3
4
5
6
7
8
9
10
cephadm@admin:~/ceph-cluster$ ceph-deploy osd list store01

#查看自动启动相关进程
[root@store01 ~] ps aux|grep ceph

#将第二块磁盘也加入OSD
cephadm@admin:~/ceph-cluster$ ceph-deploy --overwrite-conf osd create store01 --data /dev/sdc

#每个磁盘对应一个OSD进程
[root@store01 ~] ps aux|grep ceph
  • 每个磁盘生成对应的一个逻辑卷
  • 每个osd磁盘生成一个service

添加后续所有OSD结点的磁盘

1
2
3
4
5
6
7
8
9
10
11
12
13
#安装软件
#方法1: 在管理节点远程安装
cephadm@admin:~/ceph-cluster$ ceph-deploy install --release pacific --osd store02 store03
#方法2: 在OSD主机手动安装
[root@store02 ~]#apt -y install ceph-osd
[root@store03 ~]#apt -y install ceph-osd


#接下来通过批量操作的方式,将其他节点主机的磁盘都格式化
for i in {2..3};do
ceph-deploy --overwrite-conf osd create store0$i --data /dev/sdb
ceph-deploy --overwrite-conf osd create store0$i --data /dev/sdc
done

2.2.9 查看集群最终状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
cephadm@admin:~/ceph-cluster$ ceph -s
cluster:
id: 75c70a9d-790a-4859-9374-39159d37eca1
health: HEALTH_OK

services:
mon: 1 daemons, quorum mon01 (age 4h)
mgr: mgr01(active, since 3h)
osd: 6 osds: 6 up (since 75s), 6 in (since 75s)

data:
pools: 1 pools, 1 pgs
objects: 0 objects, 0 B
usage: 1.7 GiB used, 118 GiB / 120 GiB avail
pgs: 1 active+clean

# 查看管理配置完毕后的osd数量
cephadm@admin:~/ceph-cluster$ ceph-deploy osd list store0{1..3}

#查看状态
cephadm@admin:~/ceph-cluster$ ceph osd status

2.2.10 扩展高可用

实现mgr节点高可用

当前只有一个Mgr节点主机,存在SPOF,添加新的Mgr节点实现高可用

Ceph Manager守护进程以Active/Standby模式运行,部署其它ceph-mgr守护程序可确保在Active节点或其上的ceph-mgr守护进程故障时,其中的一个Standby实例可以在不中断服务的情况下接管其任务。

注意:如果所有Mgr节点故障,将集群将无法正常工作

添加后续的Mgr节点命令格式

1
ceph-deploy mgr create 节点名称

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#1. 在新mgr结点上安装mgr软件
#方法1:在管理节点远程在mgr02节点上安装Mgr软件
cephadm@admin:~/ceph-cluster$ ceph-deploy install --mgr mgr02
#方法2:在mgr02节点手动安装软件
[root@mgr02 ~]#apt -y install ceph-mgr

#2. 添加第二个 Mgr节点
cephadm@admin:~/ceph-cluster$ ceph-deploy mgr create mgr02

#3. 查看
cephadm@admin:~/ceph-cluster$ ceph -s
#结果显示:mgr01节点就是主角色节点,mgr02是从角色节点。
#关闭mgr01节点,mgr02节点自动成为active节点
[root@mgr01 ~]#poweroff
[root@admin ~]#ceph -s

扩展mon结点高可用

当前只有一个mon结点主机,存在SPOF,添加新的mon结点实现高可用

如果 $n$ 个结点,至少需要保证 $\frac{n}{2}$ 个以上的健康mon结点,ceph集群才能正常使用

1
2
3
4
5
#先在新mon节点安装mon软件
ceph-deploy install --mon mon节点名称
#添加后续的mon节点命令
ceph-deploy mon add mon节点名称
#注意:如果add换成destroy,则变成移除mon节点

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#1. 在新的mon结点安装mon软件
#方法1:在mon02节点上安装mon软件
cephadm@admin:~/ceph-cluster$ ceph-deploy install --mon mon02
#方法2:在mon02节点手动安装mon软件也可以
[root@mon02 ~] apt -y install ceph-mon

#2. 添加在mon02节点
cephadm@admin:~/ceph-cluster$ ceph-deploy mon add mon02

#3. 添加mon03节点
cephadm@admin:~/ceph-cluster$ ceph-deploy install --mon mon03
cephadm@admin:~/ceph-cluster$ ceph-deploy mon add mon03

#4. 修改ceph配置添加后续的Mon节点信息
cephadm@admin:~/ceph-cluster$vim ceph.conf
mon_host = 192.168.192.131,192.168.192.132,192.168.192.133
#同步ceph配置文件到所有ceph节点主机
cephadm@admin:~/ceph-cluster$ ceph-deploy --overwrite-conf config push admin mon0{1,2,3} mgr0{1,2} store0{1,2,3}

#5. 重新生成初始化配置信息
ceph-deploy --overwrite-conf mon create-initial
#注意:为了避免因为认证方面导致的通信失败,推荐使用 --overwrite-conf 参数
#如果是在一个现有的环境上部署业务,可以先推送基准配置文件
ceph-deploy --overwrite-conf config push mon01 mon02 mon03

#6. 查看
cephadm@admin:~/ceph-cluster$ ceph -s

image-20231022201652010

image-20231022201808089

2.4 升级Ceph集群

只需要安装升级Ceph安装包,依次升级安装

  1. monitor
  2. MGR
  3. OSD
  4. MDS
  5. RADOS网关

升级完同一类型的守护进程后再升级其他类型,最后重启服务(通常不需要关闭存储服务)

  1. 检查Ceph守护进程的当前版本

    service ceph status

  2. 升级Ceph源至期望的版本(如firefly)

    只需在 /etc/yum.repos.d/ceph.repo 文件中更新Ceph发行版的名称

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    [ceph]
    name=Ceph package for $basearch
    baseurl=http://ceph.com/rpm-firefly/e16/$basearch
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc

    [ceph-noarch]
    name=Ceph noarch $basearch
    baseurl=http://ceph.com/rpm-firefly/e16/noarch
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc

    [ceph-source]
    name=Ceph nosource $basearch
    baseurl=http://ceph.com/rpm-firefly/e16/SRMPS
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc
  3. 更新ceph软件

    1
    yum update ceph
  4. 重启monitor守护进程

    1
    service ceph restart mon osd
  5. 检查monitor,osd守护进程版本

    1
    service ceph status mon osd
  6. 检查monitor,osd守护进程状态

    1
    ceph mon osd stat
-------------本文结束-------------