手动部署CEPH rbd

手动部署 CEPH rbd

在一台机器上进行验证使用:同一台机器上部署一个ceph-mon和一个ceph-osd。


首先查看下系统内核是否支持rbd,如果有错误提示,说明内核不支持,需要升级内核
# modprobe rbd
FATAL: Module rbd not found.

尴尬不,没有rbd内核,其实我是部署完之后才发现的。升级下内核。

#modprobe rbd

--------------------
All-nodes:如果是集群就在所有机器上进行设置
--------------------

1- 各节点设置 hosts
# vim /etc/hosts

10.200.80.18 node18

...

--------------------
Monitor:在监视器节点上进行,集群的话需要修改配置文件,将所有monitor写入配置文件即可
--------------------

1- 确定 fsid
# uuidgen
1c2f9d3b-fc18-4753-8651-39ca6223fe64

2- 配置文件
# vim /etc/ceph/ceph.conf
[global]
fsid=1c2f9d3b-fc18-4753-8651-39ca6223fe64
mon initial members = node18
mon host = 10.200.80.18
public network = 10.200.80.0/24
auth cluster required = cephx
auth service required = cephx
auth client required = cephx
osd journal size = 1024
filestore xattr use omap = true
osd pool default size = 1
osd pool default min size = 1
osd pool default pg num = 333
osd pool default pgp num = 333
osd crush chooseleaf type = 1
rbd_default_features = 1
[mon]
        mon host = node18
        mon addr = 10.200.80.186789
[mon.a]
        host = node18
        mon addr = 10.200.80.18:6789
[osd.0]
        host = node18

3- 创建 keyring

# ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'


4- 生成管理员 keyring

# 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'



5- 将 client.admin key 导入 ceph.mon.keyring

# ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring



6- 生成 monitor map

# monmaptool --create --add node18 10.200.80.18 --fsid 0a933b1b-6a20-4627-91a1-36adb6a0d709 /tmp/monmap



7- 创建 monitor 数据目录 ceph-{hostname}

# mkdir /var/lib/ceph/mon/ceph-node18


8- 导入 monitor map 和 keyring 信息

# ceph-mon --mkfs -i node18 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring


9- 创建两个空文件

# touch /var/lib/ceph/mon/ceph-node18/done

# touch /var/lib/ceph/mon/ceph-node18/sysvinit

10- 启动 monitor

# service ceph start mon.node18

=== mon.node18 ===
Starting Ceph mon.node18 on node18...
Running as unit run-5055.service.
Starting ceph-create-keys on node18...

上面方法不到能启动就使用下面命令
#ceph-mon -i node18

11- 检查一下
# ceph -s

cluster 0a933b1b-6a20-4627-91a1-36adb6a0d709
health HEALTH_ERR
64 pgs stuck inactive
64 pgs stuck unclean
no osds
monmap e1: 1 mons at {node18=10.200.80.18:6789/0}
election epoch 2, quorum 0 node18
osdmap e1: 0 osds: 0 up, 0 in
pgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects
0 kB used, 0 kB / 0 kB avail
64 creating


还没有osd,health为ERR。

#ceph --cluster=ceph --admin-daemon /var/run/ceph/ceph-mon.node18.asok mon_status
{ "name": "node18",
  "rank": 0,
  "state": "leader",
  "election_epoch": 1,
  "quorum": [
        0],
  "outside_quorum": [],
  "extra_probe_peers": [],
  "sync_provider": [],
  "monmap": { "epoch": 1,
      "fsid": "1c2f9d3b-fc18-4753-8651-39ca6223fe64",
      "modified": "2018-02-06 10:49:13.819026",
      "created": "2018-02-06 10:49:13.819026",
      "mons": [
            { "rank": 0,
              "name": "node18",
              "addr": "10.200.80.18:6789\/0"}]}}


12- 将 keyring 和 ceph.conf 拷贝到各个 osd 节点 比如10.200.80.19

# scp /etc/ceph/ceph.conf 10.200.80.19:/etc/ceph/
# scp /etc/ceph/ceph.client.admin.keyring 10.200.80.19:/etc/ceph/


--------------------
Osds:每个机器可以多个osd,每块硬盘或分区可以单独做一个osd。osd个数按实际启动的osd进程计算。
--------------------

1- Create OSD

# uuidgen

d6354bb5-b390-44b5-948f-fbb7f939e53a

# ceph osd create d6354bb5-b390-44b5-948f-fbb7f939e53a
0

2- 创建数据存储目录

--目录方式
# mkdir -p /data/ceph/osd/ceph-0
# ln -s /data/ceph/osd/ceph-0 /var/lib/ceph/osd/ceph-0


--磁盘方式
  存储挂的磁阵,这里要把挂的硬盘分区、格式化
# fdisk /dev/vdb
# mkfs.ext4 /dev/vdb1

  挂载
# mount -o defaults,_netdev /dev/vdb1 /var/lib/ceph/osd/ceph-0

  写入分区表
# vim /etc/fstab
/dev/vdb1 /var/lib/ceph/osd/ceph-0 ext4 defaults,_netdev 0 0


3- 初始化 OSD 数据目录


# ceph-osd -i 0 --mkfs --mkjournal --mkkey \
> --osd-uuid d6354bb5-b390-44b5-948f-fbb7f939e53a \
> --cluster ceph \
> --osd-data=/data/ceph/osd/ceph-0 \
> --osd-journal=/data/ceph/osd/ceph-0/journal

4- 注册 OSD authentication key

# ceph auth add osd.0 osd 'allow *' mon 'allow profile osd' -i /data/ceph/osd/ceph-0/keyring
added key for osd.0

5- 将 ceph 节点加入 CRUSH map

# ceph osd crush add-bucket node6 host
added bucket node6 type host to crush map

# ceph osd crush move node6 root=default
moved item id -2 name 'node6' to location {root=default} in crush map


6- 将 OSD 加入 CRUSH map 此处设置权重为1.0

# ceph osd crush add osd.0 1.0 host=node6
add item id 0 name 'osd.0' weight 1 at location {host=node6} to crush map


7- 创建初始化文件


# touch /var/lib/ceph/osd/ceph-0/sysvinit




8- 启动服务

# service ceph start osd.0
=== osd.0 ===
create-or-move updated item name 'osd.0' weight 0.96 at location {host=node6,root=default} to crush map
Starting Ceph osd.0 on node6...
Running as unit run-27621.service.


如果上述命令不成功,使用下面命令
#ceph-osd -i 0 
starting osd.0 at :/0 osd_data /var/lib/ceph/osd/ceph-0 /var/lib/ceph/osd/ceph-0/journal


9- 检查

# ceph -s
    cluster 1c2f9d3b-fc18-4753-8651-39ca6223fe64
     health HEALTH_WARN mon.node18 low disk space
     monmap e1: 1 mons at {node18=10.200.80.18:6789/0}, election epoch 1, quorum 0 node18
     osdmap e23: 1 osds: 1 up, 1 in
      pgmap v790: 525 pgs, 4 pools, 12052 kB data, 15 objects
            63788 MB used, 100 GB / 171 GB avail
                 525 active+clean


# ceph osd tree
# id weight type name up/down reweight
-1 1 root default
-2 1 host node18
0 1 osd.0 up 1
<think> 我们正在讨论Ceph RBD实现数据持久化存储的方法。根据用户的问题,他想要了解如何使用Ceph RBD来实现数据持久化存储。Ceph RBD(RADOS Block Device)是Ceph提供的块存储服务,允许用户创建块设备并挂载到服务器上,从而实现数据的持久化存储。 步骤概述: 1. 部署Ceph集群:这是使用RBD的前提,需要至少包含Monitor节点、OSD节点和MDS节点(如果使用CephFS的话,但RBD不需要MDS)。 2. 创建存储池(Pool):在Ceph集群中创建一个存储池,用于存放RBD镜像。 3. 创建RBD镜像:在存储池中创建指定大小的块设备镜像。 4. 映射RBD镜像到客户端:将创建的块设备映射到客户端服务器,使其在客户端上显示为一个块设备(如/dev/rbd0)。 5. 格式化并挂载:在客户端上对块设备进行格式化(如mkfs)并挂载到目录,然后就可以像使用本地磁盘一样使用它。 详细步骤: 1. 部署Ceph集群(简要说明,因为这是一个复杂的过程,通常有详细文档) 通常使用cephadm或手动部署。这里假设已经部署好一个Ceph集群,并且集群状态健康(通过`ceph -s`查看)。 2. 创建存储池 使用ceph命令创建一个存储池,比如名为`rbd_pool`的池: ```bash ceph osd pool create rbd_pool 128 128 ``` 这里128是PG和PGP的数量,具体值需要根据集群规模调整。 然后,将该池初始化为用于RBD: ```bash rbd pool init rbd_pool ``` 3. 创建RBD镜像 在`rbd_pool`中创建一个名为`myimage`、大小为10GB的镜像: ```bash rbd create --size 10240 rbd_pool/myimage ``` 4. 映射RBD镜像到客户端 在客户端机器上(需要安装ceph-common包),首先需要配置ceph.conf文件和密钥文件(通常位于/etc/ceph目录下),以便客户端能够访问Ceph集群。 然后,映射镜像: ```bash rbd map rbd_pool/myimage ``` 执行成功后,客户端会多出一个块设备(可以通过`rbd showmapped`查看映射的设备,通常为/dev/rbd0)。 5. 格式化并挂载 格式化该块设备(例如使用ext4文件系统): ```bash mkfs.ext4 /dev/rbd0 ``` 创建挂载点并挂载: ```bash mkdir /mnt/ceph_rbd mount /dev/rbd0 /mnt/ceph_rbd ``` 这样,就可以在/mnt/ceph_rbd目录下进行文件操作,所有数据都会持久化存储在Ceph集群中。 6. 自动挂载(可选) 为了实现开机自动挂载,可以将映射和挂载命令添加到系统的启动脚本中,或者配置udev规则。但更常见的做法是在挂载前先映射,然后使用/etc/fstab挂载。但是注意,RBD设备在重启后不会自动映射,所以需要先映射再挂载。 例如,可以在/etc/fstab中添加: ``` /dev/rbd0 /mnt/ceph_rbd ext4 defaults,noatime,_netdev 0 0 ``` 同时需要确保在系统启动时执行映射命令。可以创建一个服务或者在启动脚本中执行`rbd map`命令。 7. 持久化存储的保证 Ceph通过多副本或纠删码机制保证数据的持久性。在创建存储池时可以设置副本数(默认3副本)或纠删码策略。 8. 快照和克隆(可选) RBD支持快照和克隆功能,可以用于数据备份和快速复制。 注意事项: - 客户端需要安装ceph-common包。 - 客户端需要拥有访问Ceph集群的权限(通常需要将ceph.client.admin.keyring文件复制到客户端的/etc/ceph目录,或者创建一个专用的用户并赋予权限)。 - 在分布式环境中,多个客户端同时挂载同一个RBD镜像需要借助集群文件系统(如cephfs、gfs2等),否则会导致文件系统损坏。RBD本身支持独占式写入(exclusive-lock)和缓存特性,但多客户端同时读写同一块设备需要谨慎。 以上是使用Ceph RBD实现数据持久化存储的基本方法。 </think> ### 如何使用 Ceph RBD 实现数据持久化存储 Ceph RBD(RADOS Block Device)提供块级存储接口,通过以下步骤实现数据持久化存储: --- #### **1. 准备工作** - **部署 Ceph 集群** 需包含 Monitor、OSD(对象存储守护进程)和 MDS(元数据服务器)节点[^1]。 - **安装客户端工具** 在目标服务器安装 `ceph-common` 包: ```bash sudo apt-get install ceph-common # Ubuntu/Debian sudo yum install ceph-common # CentOS/RHEL ``` --- #### **2. 配置 RBD 存储池** ```bash # 创建存储池(例如 rbd_pool) ceph osd pool create rbd_pool 128 128 # 初始化池为 RBD 用途 rbd pool init rbd_pool # 创建 RBD 镜像(10GB 大小) rbd create rbd_pool/myvolume --size 10240 ``` --- #### **3. 客户端映射与挂载** ```bash # 将 RBD 镜像映射为本地块设备 rbd map rbd_pool/myvolume # 查看映射结果(通常为 /dev/rbd0) lsblk # 格式化设备 mkfs.ext4 /dev/rbd0 # 创建挂载点并挂载 mkdir /mnt/ceph_data mount /dev/rbd0 /mnt/ceph_data ``` --- #### **4. 实现开机自动挂载** ```bash # 生成自动映射配置 echo "rbd_pool/myvolume id=admin,keyring=/etc/ceph/ceph.client.admin.keyring" | \ sudo tee /etc/ceph/rbdmap # 添加 fstab 条目 echo "/dev/rbd0 /mnt/ceph_data ext4 defaults,_netdev 0 0" | sudo tee -a /etc/fstab ``` --- #### **5. 数据持久化验证** ```bash # 写入测试数据 echo "Ceph RBD Test" > /mnt/ceph_data/test.txt # 重启服务器后检查数据 reboot cat /mnt/ceph_data/test.txt # 应输出 "Ceph RBD Test" ``` --- #### **关键技术原理** 1. **数据分布** 数据通过 CRUSH 算法分散到集群 OSD 节点,实现负载均衡和高可用性[^2]。 2. **副本机制** 默认 3 副本存储(可配置),确保单点故障不影响数据完整性: $$ \text{写入操作} \rightarrow \text{Primary OSD} \xrightarrow{\text{同步}} \text{Replica OSDs} $$ 3. **故障恢复** OSD 故障时自动触发数据重平衡,无需人工干预[^3]。 --- #### **高级配置示例** ```bash # 启用 RBD 缓存(提升性能) rbd feature enable rbd_pool/myvolume exclusive-lock,caching # 创建快照(备份时间点状态) rbd snap create rbd_pool/myvolume@snap_v1 # 克隆卷(基于快照创建新卷) rbd clone rbd_pool/myvolume@snap_v1 rbd_pool/cloned_volume ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值