debian搭建ceph记录(接入libvirt)

文章目录

  • [一. 搭建集群](#一. 搭建集群)
    • [1. 准备节点](#1. 准备节点)
    • [2. 安装基础包(所有节点都执行)](#2. 安装基础包(所有节点都执行))
    • [3. 在节点1上初始化集群](#3. 在节点1上初始化集群)
  • [二. 客户端使用](#二. 客户端使用)
    • [1. 客户端连接集群](#1. 客户端连接集群)
    • [2. 挂载ceph块设备](#2. 挂载ceph块设备)
    • [3. libvirt使用ceph块设备](#3. libvirt使用ceph块设备)

一. 搭建集群

1. 准备节点

我是在kvm环境下搭建的3台虚拟机

机器名 IP OS 数据磁盘
ceph1 192.168.22.131 Debian12 20GB*2
ceph2 192.168.22.132 Debian12 20GB*2
ceph3 192.168.22.133 Debian12 20GB*2

2. 安装基础包(所有节点都执行)

复制代码
# 更换apt软件源
sed -i "[email protected]@mirrors.aliyun.com@g" /etc/apt/mirrors/debian*
apt update

# 添加aliyun的ceph软件源,url中的【squid】对应cepf版本19.2.2
apt install -y gnupg software-properties-common 
wget -q -O- 'https://mirrors.aliyun.com/ceph/keys/release.asc' | sudo apt-key add -
apt-add-repository 'deb https://mirrors.aliyun.com/ceph/debian-squid/ bookworm main'

# 安装包
apt install -y podman lvm2 ceph-common

3. 在节点1上初始化集群

复制代码
# 安装cephadm 
apt install -y cephadm 

# 创建集群
cephadm bootstrap --mon-ip 192.168.22.131

# 配置公钥到其他节点
ssh-copy-id -f -i /etc/ceph/ceph.pub [email protected]
ssh-copy-id -f -i /etc/ceph/ceph.pub [email protected]

# 添加节点
ceph orch host add ceph2 192.168.22.132
ceph orch host add ceph3 192.168.22.133

# 查看节点情况
ceph orch host ls

# 添加_admin这个label后可以允许该节点运行ceph命令
ceph orch host label add ceph2 _admin
ceph orch host label add ceph3 _admin

# 设置 mon 节点
ceph orch apply mon 3
ceph orch apply mon ceph1,ceph2,ceph3 

# 查看 mon 详情
ceph mon dump

# 列出所有节点的存储设备
ceph orch device ls

# 所有可使用设备创建osd
ceph orch apply osd --all-available-devices

# 创建一个pool给rbd使用
ceph osd pool create rbd_pool
rbd pool init rbd_pool

# 创建用户rbd_user
ceph auth get-or-create client.rbd_user mon 'profile rbd' osd 'profile rbd pool=rbd_pool' mgr 'profile rbd pool=rbd_pool'
# 将输出内容追加到文件/etc/ceph/ceph.client.{ID}.keyring中

# 创建一个10GB的镜像
rbd create --size 10240 rbd_pool/image1

# 查看rbd_pool下的镜像
rbd -p rbd_pool ls

二. 客户端使用

1. 客户端连接集群

复制代码
# 安装ceph-common
apt install -y ceph-common

# 将ceph集群中的下面两个文件拷贝到客户端同目录
# (可以通过配置不同ceph用户来控制访问权限,这里我配置了管理员admin的key)
/etc/ceph/ceph.conf
/etc/ceph/ceph.client.admin.keyring

# 查看集群状态,若返回集群信息则配置成功
ceph status

2. 挂载ceph块设备

复制代码
# 将集群pool中的image映射到本地
rbd map rbd_pool/image1

# 执行lsblk命令,发现新增设备/dev/rbd0
lsblk

# 本地创建目录/data1
mkdir /data1

# 格式化rbd0
mkfs.ext4 /dev/rbd0

# 挂载到本地目录后,即可正常访问
mount /dev/rbd0 /data1

3. libvirt使用ceph块设备

准备另一台kvm机器,安装libvirt环境,下载qcow2镜像等,可参考我的另一篇文章
记录使用libvirt创建虚拟机、自定义qcow2镜像

把下载的qcow2文件转为ceph集群中的镜像(可以作为模板快速复制)

复制代码
qemu-img convert -f qcow2 -O raw debian-12-genericcloud-amd64.qcow2 rbd:rbd_pool/vm1.qcow2

在rbd_pool中创建一个5GB的image作为数据盘

复制代码
qemu-img create -f rbd rbd:rbd_pool/vm1-data 5G

生成访问ceph的key

复制代码
# 创建用户rbd_user,限制只能访问rbd_pool
ceph auth get-or-create client.rbd_user mon 'profile rbd' osd 'profile rbd pool=rbd_pool' mgr 'profile rbd pool=rbd_pool'

# 生成secret文件
cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
        <usage type='ceph'>
                <name>client.rbd_user secret</name>
        </usage>
</secret>
EOF

# 定义secret, 返回【secret_uuid】
virsh secret-define --file secret.xml

# 把用户rbd_user的key写入文件
ceph auth get-key client.rbd_user | tee client.rbd_user.key

# 	设置secret的值
virsh secret-set-value --secret 【替换secret_uuid】 --base64 $(cat client.rbd_user.key) && rm client.rbd_user.key secret.xml

定义虚拟机的xml文件

xml 复制代码
<domain type='kvm'>
   <name>vm1</name>
   <memory unit='GiB'>1</memory>
   <vcpu>1</vcpu>
   <os>
       <type arch='x86_64' machine='pc-i440fx-2.9'>hvm</type>
       <boot dev='hd'/>
   </os>
   <features>
       <acpi/>
       <apic/>
       <pae/>
   </features>
   <devices>
       <disk type='file' device='cdrom'>
           <driver name='qemu' type='raw'/>
           <source file='/data/vm1/init.iso'/>
           <target dev='hda' bus='ide'/>
           <readonly/>
       </disk>
       <disk type='network' device='disk'>
           <source protocol='rbd' name='rbd_pool/os1'>
               <host name='192.168.22.131' port='6789'/>
               <host name='192.168.22.132' port='6789'/>
               <host name='192.168.22.133' port='6789'/>
           </source>
           <auth username='rbd_user'>
               <secret type='ceph' uuid='【替换secret_uuid】'/>
           </auth>
           <target dev='vda' bus='virtio'/>
       </disk>
       <disk type='network' device='disk'>
           <source protocol='rbd' name='rbd_pool/vm1-data'>
               <host name='192.168.22.131' port='6789'/>
               <host name='192.168.22.132' port='6789'/>
               <host name='192.168.22.133' port='6789'/>
           </source>
           <auth username='rbd_user'>
               <secret type='ceph' uuid='【替换secret_uuid】'/>
           </auth>
           <target dev='vdb' bus='virtio'/>
       </disk>
       <interface type='bridge'>
           <source bridge='virbr0'/>
           <model type='virtio'/>
       </interface>
       <console type='pty'>
           <target type='serial' port='0'/>
       </console>
   </devices>
</domain>

定义&启动&连接虚拟机

复制代码
virsh define vm1.xml
virsh start vm1
virsh console vm1

https://www.cnblogs.com/gustabm/p/17663966.html

https://cloud-atlas.readthedocs.io/zh-cn/latest/ceph/rbd/compare_local_ssd_ceph_rbd.html

相关推荐
遇见火星1 小时前
自动化KVM虚拟机创建脚本详解:从模板到高效部署的线上实践!
运维·自动化·kvm
rosemary5121 天前
Debian/Ubuntu systemd coredump调试程序Crash
ubuntu·debian·coredump
Estar.Lee1 天前
如何在Debian中提高phpstorm的稳定性
运维·debian·api·免费api·phpstorm
天朝八阿哥2 天前
Debian开机自动挂载ntfs分区
linux·后端·debian
dbkx_293 天前
个人自用debian启动
linux·运维·debian
Smile_Gently3 天前
基于服务器使用 apt 安装、配置 Nginx
nginx·ubuntu·debian
小呆瓜历险记3 天前
Debian系统简介
linux·服务器·debian
无效的名字5 天前
向日葵远程控制debian无法进入控制画面的解决方法
运维·debian
belldeep9 天前
WSL 安装 Debian 12 后,Linux 如何安装 curl , quickjs ?
linux·运维·debian·curl·quickjs
l1t9 天前
Debian上安装PostgreSQL的故障和排除
运维·postgresql·debian