ubuntu18.04部署cephfs

发布于:2025-08-14 ⋅ 阅读:(16) ⋅ 点赞:(0)

比起君子讷于言而敏于行,我更喜欢君子善于言且敏于行。

目录

一. 准备工作(所有节点)

1. /etc/hosts

2. 安装python2

3. 配置普户免密sudo

4. 准备好四块盘,一块hdd+sdd为一组,一台设备上有一组

5. 添加源

二. 安装 Ceph

在node1上执行 ceph-deploy,作为部署节点

三. 创建 Ceph 集群

四. 安装 MON、MGR 到所有节点

1. 一些报错:

2. 生成key并分发

五. 配置OSD和缓存池

cache-tier + ceph-deploy 模型:SSD 本身作为 单独的缓存池

SSD 作为独立缓存池

SSD 作为 OSD 的 DB/WAL

1. 创建主存储池(用 HDD 组成)

2. 创建缓存池(用 SSD 组成)

3. 创建 OSD ,分别将设备添加为 OSD

4. 把缓存池设置为写回模式

5. 把缓存池挂接到主存储池上(建立Tier关系)

6. 将客户端流量指向缓存池(设置Overlay)

7. 设置缓存池的缓存命中策略为 Bloom 过滤器

8. 设置缓存命中计数和时间周期

9. 设置缓存池最大容量(以字节为单位)

10. 设置缓存池提升对象的读写最短时间(秒)

11. 设置缓存池容量阈值,触发刷写和驱逐操作

12. 设置缓存池最大容量和最大对象数(可选)

13. 设置缓存池对象最短刷写周期(秒)

14. 设置缓存池对象最短驱逐周期(秒)

六. 缓存池卸载流程(以后有需要再用)

1. 禁用缓存池(将缓存模式改为 none)

2. 移除流量指向缓存池(取消 Overlay)

3. 从主存储池中移除缓存池

总结


ubuntu01 ubuntu02 ubuntu03
MON MON MON
MON MGR MGR
MDS MDS
OSD OSD

由于我只有两台设备有可用的磁盘和ssd,但是mon最少要奇数才能选举。所以第三台我这里只部署mon和mgr,仅参与选举。这样的话,第三台机器哪怕是台虚拟机或者笔记本,都可以。三台机器都是ubuntu18.04


一. 准备工作(所有节点)

1. /etc/hosts

$ cat  /etc/hosts
127.0.0.1	localhost
127.0.1.1	ubuntu01
10.xxx.xxx.xxx  ubuntu01
10.xxx.xxx.xxx	ubuntu02

2. 安装python2

sudo apt-get install python2.7
which  python2.7
sudo ln -s /usr/bin/python2.7 /usr/bin/python2
python2 --version

3. 配置普户免密sudo

echo "ubuntu ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ubuntu-nopasswd
sudo chmod 440 /etc/sudoers.d/ubuntu-nopasswd
#可以测试一下
sudo -k
sudo ls /root

4. 准备好四块盘,一块hdd+sdd为一组,一台设备上有一组

# 清除所有文件系统签名(wipefs)
sudo wipefs -a /dev/sdb
sudo wipefs -a /dev/sde
sudo wipefs -a /dev/sdf
sudo wipefs -a /dev/sdg

#创建新的 GPT 分区表(确保干净)
sudo parted /dev/sdb mklabel gpt
sudo parted /dev/sde mklabel gpt
sudo parted /dev/sdf mklabel gpt
sudo parted /dev/sdg mklabel gpt


ubuntu01$: lsblk /dev/sdb              
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb    8:16   0  7.3T  0 disk 

ubuntu01$: lsblk /dev/sde
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sde    8:64   0  1.9T  0 disk 


ubuntu02$: lsblk /dev/sdf
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdf    8:80   0  7.3T  0 disk 

ubuntu02$:~/storcli64/Linux OS$ lsblk /dev/sdg
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdg    8:96   0  1.9T  0 disk 


5. 添加源

wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
echo "deb https://download.ceph.com/debian-mimic bionic main" | sudo tee /etc/apt/sources.list.d/ceph.list
sudo apt-get clean
sudo apt-get update

二. 安装 Ceph

在node1上执行 ceph-deploy,作为部署节点

sudo apt install ceph-deploy ceph-common ceph-mds ceph-mon ceph-osd -y

三. 创建 Ceph 集群

ceph-deploy new ubuntu01 ubuntu02 ubuntu03

创建完之后会生成一些文件,我们做一下conf的优化,做好后分发

~/ceph-cluster$ ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring

$ cat ceph.conf 
[global]
fsid = xxxxxx-xxxx-xxxx-xxxx-xxxxx
mon_initial_members = ubuntu01, ubuntu02,ubuntu03
mon_host = 10.xxx.xxx.xxx,10.xxx.xxx.xxx,10.xxx.xxx.xxx
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
#以下为添加的内容
public network = 10.xxx.xxx.0/24
cluster network = 10.xxx.xxx.0/24

[osd]
osd journal size = 10240


scp /etc/ceph/ceph.conf ubuntu@ubuntu02:/tmp/
ssh ubuntu@ubuntu02 'sudo mv /tmp/ceph.conf /etc/ceph/ceph.conf && sudo chmod 644 /etc/ceph/ceph.conf'

四. 安装 MON、MGR 到所有节点

ceph-deploy install ubuntu01 ubuntu02 ubuntu03
ceph-deploy mon create-initial
ceph-deploy --overwrite-conf  mgr create  ubuntu01 ubuntu02 ubuntu03
#查看状态
ceph -s 

如果遇到报错版本冲突问题,那就清理一下,重新install

vim /etc/apt/sources.list.d/ceph.list
deb https://download.ceph.com/debian-nautilus/ bionic main


sudo apt-get clean
sudo apt-get update
sudo apt-get purge ceph ceph-osd ceph-mds ceph-mon radosgw ceph-common ceph-mgr librgw2
sudo apt-get autoremove


ceph-deploy install ubuntu01 ubuntu02

1. 一些报错:

ceph-deploy install 如果遇到[ubuntu01][WARNIN] E: Sub-process /usr/bin/dpkg returned an error code (1)
这个错误是 dpkg 安装包出错 的通用错误码,说明某个包在安装过程中出错了。

先验证系统状态,看是否都在 ii 状态(已安装)。如果都在,就代表系统层面一切 OK。状态是 iU(表示“Unpacked”,但未完全配置),这说明安装过程未完成或中断

dpkg -l | grep ceph

用这个命令它会尝试完成所有“iU”状态软件包的配置,报错也会更详细

sudo dpkg --configure -a

我遇到的报错:Failed to restart lvm2-lvmetad.service: Unit lvm2-lvmetad.socket is masked.lvm2 没有配置成功,导致 ceph-osdceph 也配置失败。

解决方案:解除 mask 并启用 lvm2 的相关服务。然后再去执行sudo dpkg --configure -a,全部ii 状态,那就可以放心的去执行ceph-deploy install  ubuntu01 ubuntu02了。

sudo systemctl unmask lvm2-lvmpolld.socket
sudo systemctl unmask lvm2-lvmpolld.service
sudo systemctl enable lvm2-lvmpolld.socket
sudo systemctl start lvm2-lvmpolld.socket


sudo dpkg --configure -a

2. 生成key并分发

#生成 ceph.client.admin.keyring,这个密钥环文件用于管理员用户,执行各种管理操作。
sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'

sudo cp /home/ubuntu/ceph-cluster/ceph.client.admin.keyring /etc/ceph/
sudo  chmod 644 /etc/ceph/ceph.client.admin.keyring
sudo  chown ubuntu:ubuntu /etc/ceph/ceph.client.admin.keyring

#生成 ceph.mon.keyring
sudo ceph-authtool --create-keyring /etc/ceph/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'



# 生成 ceph.bootstrap-osd.keyring
sudo ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd'


#生成 ceph.bootstrap-mds.keyring
sudo ceph-authtool --create-keyring /var/lib/ceph/bootstrap-mds/ceph.keyring --gen-key -n client.bootstrap-mds --cap mon 'profile bootstrap-mds'

sudo cp /var/lib/ceph/bootstrap-mds/ceph.keyring /etc/ceph/ceph.bootstrap-mds.keyring


ls /etc/ceph/
#应该看到
ceph.client.admin.keyring
ceph.conf
ceph.mon.keyring
ceph.bootstrap-osd.keyring
ceph.bootstrap-mds.keyring

#分发到所有节点上
sudo scp /etc/ceph/ceph.mon.keyring ubuntu@ubuntu02:/etc/ceph/
sudo scp /etc/ceph/ceph.bootstrap-osd.keyring ubuntu@ubuntu02:/etc/ceph/
sudo scp /etc/ceph/ceph.bootstrap-mds.keyring ubuntu@ubuntu02:/etc/ceph/
sudo scp /etc/ceph/ceph.mon.keyring ubuntu@ubuntu03:/etc/ceph/
sudo scp /etc/ceph/ceph.bootstrap-osd.keyring ubuntu@ubuntu03:/etc/ceph/
sudo scp /etc/ceph/ceph.bootstrap-mds.keyring ubuntu@ubuntu03:/etc/ceph/


sudo mkdir -p /var/lib/ceph/mon/ceph-ubuntu01


sudo systemctl start ceph-mon@ubuntu01

ceph.client.admin.keyring Ceph 官方建议它只让 Ceph 用户或 root 读,不能所有人都能读(600 root:root ceph:ceph 或者我们有的用户免密sudo 也可以用哪个账户)

五. 配置OSD和缓存池

cache-tier + ceph-deploy 模型:SSD 本身作为 单独的缓存池

理论内容:在 Ceph 存储系统中,SSD 可以被用作独立的缓存池(Cache Pool)或者作为 OSD 的 DB/WA

SSD 作为独立缓存池

优势 劣势
高性能:独立缓存池可以显著提高读写性能,特别是对于频繁访问的数据。

成本较高:需要额外的 SSD 设备来构建缓存池,增加了硬件成本。

资源隔离:缓存池与其他存储池隔离,不会互相影响,确保了性能的稳定性。 管理复杂:需要额外的管理开销来维护缓存池,包括监控缓存命中率和调整缓存策略。
灵活性:可以根据需要动态调整缓存池的大小和配置。 数据一致性:需要确保缓存数据与后端存储的一致性,特别是在缓存失效或故障时。

SSD 作为 OSD 的 DB/WAL

优势 劣势
性能提升:将 DB/WAL 放在 SSD 上可以显著提高 OSD 的性能,特别是对于随机写入操作。 性能上限:虽然性能有所提升,但可能不如独立缓存池的性能提升明显。
成本效益:不需要额外的 SSD 设备作为缓存池,减少了硬件成本。 资源争抢:如果多个 OSD 共享同一个 SSD 设备作为 DB/WAL,可能会发生资源争抢。
简化管理:减少了管理复杂性,因为 DB/WAL 是 OSD 的一部分,不需要额外的缓存管理策略。 写入放大:频繁的写入操作可能会导致 SSD 的写入放大问题,影响其寿命。

总结

  • 如果你的应用场景需要极高的读写性能,并且预算允许,使用 SSD 作为独立缓存池是一个不错的选择。

  • 如果你希望在成本和性能之间取得平衡,将 SSD 用作 OSD 的 DB/WAL 是一个更经济的选择。

理论结束,上实践命令

在管理节点ubuntu01执行

1. 创建主存储池(用 HDD 组成)

ceph osd pool create storage 256 256

两台服务器,4个OSD。PG 数 = OSD 数 × 100 = 4 × 100 = 400
Ceph 要求 PG 数为 2 的幂次方(64、128、256、512 等),且方便管理。

2. 创建缓存池(用 SSD 组成)

ceph osd pool create cache 256 256

3. 创建 OSD ,分别将设备添加为 OSD

在管理节点执行(会远程操作指定服务器和设备)

# ubuntu01
ceph-deploy osd create ubuntu01:/dev/sdb
ceph-deploy osd create ubuntu01:/dev/sde

# ubuntu02
ceph-deploy osd create ubuntu02:/dev/sde
ceph-deploy osd create ubuntu02:/dev/sdg

4. 把缓存池设置为写回模式

ceph osd tier cache-mode cache writeback

5. 把缓存池挂接到主存储池上(建立Tier关系)

ceph osd tier add storage cache

6. 将客户端流量指向缓存池(设置Overlay)

ceph osd tier set-overlay storage cache

7. 设置缓存池的缓存命中策略为 Bloom 过滤器

ceph osd pool set cache hit_set_type bloom

8. 设置缓存命中计数和时间周期

ceph osd pool set cache hit_set_count 1
ceph osd pool set cache hit_set_period 3600

9. 设置缓存池最大容量(以字节为单位)

ceph osd pool set cache target_max_bytes 1000000000000

10. 设置缓存池提升对象的读写最短时间(秒)

ceph osd pool set cache min_read_recency_for_promote 1
ceph osd pool set cache min_write_recency_for_promote 1

11. 设置缓存池容量阈值,触发刷写和驱逐操作

ceph osd pool set cache cache_target_dirty_ratio 0.4
ceph osd pool set cache cache_target_dirty_high_ratio 0.6
ceph osd pool set cache cache_target_full_ratio 0.8

12. 设置缓存池最大容量和最大对象数(可选)

ceph osd pool set cache target_max_bytes 1073741824
ceph osd pool set cache target_max_objects 256

13. 设置缓存池对象最短刷写周期(秒)

ceph osd pool set cache cache_min_flush_age 600

14. 设置缓存池对象最短驱逐周期(秒)

ceph osd pool set cache cache_min_evict_age 1800

六. 缓存池卸载流程(以后有需要再用)

写回模式,要确保缓存池数据刷写到底层池后才移除缓存。可以用下面命令查看缓存池内对象:

rados ls -p cache

手动触发刷写和驱逐:

rados -p cache cache-flush-evict-all

1. 禁用缓存池(将缓存模式改为 none)

ceph osd tier cache-mode cache none

2. 移除流量指向缓存池(取消 Overlay)

ceph osd tier remove-overlay storage

3. 从主存储池中移除缓存池

ceph osd tier remove storage cache


总结

部署中遇到了很多问题,不只文章中写的这几个,初次接触,难免思绪不够清晰。ubuntu03的机器也是我做OSD发现,MON必须三台否则无法创建成功,才又加到集群中的,可能某些地方写的不正确,望及时指出,我进行更改。


网站公告

今日签到

点亮在社区的每一天
去签到