共享存储-一步一步部署ceph分布式文件系统

一、Ceph 简介

Ceph 是一个开源的分布式文件系统。因为它还支持块存储、对象存储,所以很自 然的被用做云计算框架 openstack 或 cloudstack 整个存储后端。当然也可以单独作 为存储,例如部署一套集群作为对象存储、SAN 存储、NAS 存储等。

二、ceph 支持的 3 种存储方式

1、对象存储:即 radosgw,兼容 S3 接口。通过 rest api 上传、下载文件。

2、文件系统:posix 接口。可以将 ceph 集群看做一个共享文件系统挂载到本地。

3、块存储:即 rbd。有 kernel rbd 和 librbd 两种使用方式。支持快照、克隆。相 当于一块硬盘挂到本地,用法和用途和硬盘一样。比如在 OpenStack 项目里,Ceph 的块设备存储可以对接 OpenStack 的后端存储。

三、ceph 集群部署

环境准备 (禁用 selinux, 关闭防火墙)

拓扑

3台机器添加一块 20G 的硬盘

硬盘给 osd 做存储使用

禁用 selinux, 关闭防火墙

__所有服务器__都需要关闭防火墙,selinux

bash 复制代码
[root@cong11 ~]# systemctlstop firewalld

[root@cong11 ~]# systemctl disable firewalld

[root@cong11 ~]# setenforce 0

[root@cong11  ~]# sed  \-i "s/SELINUX=enforcing/SELINUX=disabled/g"

/etc/selinux/config

编辑 hosts 文件

所有的服务器都需要设置 hosts

root@cong11 \~# vim /etc/hosts #在文件最后加入以下行

192.168.1.11 cong11

192.168.1.12 cong12

192.168.1.13 cong13

192.168.1.14 cong14

SSH 免密码登录

在管理节点使用ssh-keygen 生成 ssh keys 发布到各节点,这里使用主机名

bash 复制代码
[root@cong11 ~]# ssh -keygen       #一直回车,不设密码
bash 复制代码
[root@cong11 ~]# ssh-copy-id cong11 
[root@cong11 ~]# ssh-copy-id cong12 
[root@cong11 ~]# ssh-copy-id cong13 
[root@cong11 ~]# ssh-copy-id cong14

配置 yum 源配置阿里网络源(所有节点)

bash 复制代码
\[root@cong11~\]\#wget \-O /etc/yum\.repos\.d/CentOS\-Base\.repo[http://mirrors\.aliyun\.com/repo/Centos\-7\.repo](http://mirrors.aliyun.com/repo/Centos-7.repo)

配置 ceph 源(所有节点)

bash 复制代码
\[root@cong11 ~\]\# vim /etc/yum\.repos\.d/ceph\.repo

\[Ceph\]

name=Ceph packages for $basearch

baseurl=[http://mirrors\.aliyun\.com/ceph/rpm\-15\.2\.9/el7/$basearch](http://mirrors.aliyun.com/ceph/rpm-15.2.9/el7/$basearch) enabled=1

gpgcheck=0     type=rpm\-md

\#gpgkey=[https://download\.ceph\.com/keys/release\.asc](https://download.ceph.com/keys/release.asc)

\[Ceph\-noarch\]

name=Ceph noarch packages

baseurl=[http://mirrors\.aliyun\.com/ceph/rpm\-15\.2\.9/el7/noarch](http://mirrors.aliyun.com/ceph/rpm-15.2.9/el7/noarch)

enabled=1

gpgcheck=0     type=rpm\-md

#gpgkey=[https://download\.ceph\.com/keys/release\.asc](https://download.ceph.com/keys/release.asc) \[ceph\-source]

name=Ceph source packages

baseurl=[http://mirrors\.aliyun\.com/ceph/rpm\-15\.2\.9/el7/SRPMS](http://mirrors.aliyun.com/ceph/rpm-15.2.9/el7/SRPMS)

enabled=1

gpgcheck=0     type=rpm\-md

\#gpgkey=[https://download\.ceph\.com/keys/release\.asc](https://download.ceph.com/keys/release.asc)

安装 epel-release(所有节点)

bash 复制代码
[root@cong11 ~\]# yum \-y install epel\-release yum\-plugin\-priorities yum\-utils ntpdate

在每服务器上部署 ceph

在 cong11、cong12、cong13 上安装,ceph-deploy 是 ceph 集群部署工具。其他软 件是依赖包。

bash 复制代码
\[root@cong11 ~\]\# yum install \-y ceph\-deploy ceph ceph\-radosgw snappy leveldbgdisk python\-argparse gperftools\-libs python\-setuptools

管理节点 cong11 上部署服务

创建 monitor 服务

也可以同时在 cong12,cong13 上部署 mon,实现高可用,生产环境至少 3 个 mon 独立

bash 复制代码
[root@cong11 ~]# cd /etc/ceph
[root@cong11 ceph]# ceph-deploy new cong11

修改副本数

配置文件的默认副本数从 3 改成 2,这样只有两个 osd 也能达到 active+clean 状态

bash 复制代码
\[root@cong11 ceph\]\# vim ceph\.conf

\[global\]

fsid = 085c7b61\-cac0\-494b\-9bfc\-18fe2cc2deb0

mon\_initial\_members = cong11 mon\_host = [192\.168\.1\.11](192.168.1.11)

auth\_cluster\_required = cephx auth\_service\_required = cephx auth\_client\_required = cephx

__osd\_pool\_default\_size = 2    \#最后添加这行__

部署 initial monitor

bash 复制代码
[root@cong11 ceph]# ceph-deploy mon create cong11

收集节点的 keyring 文件

bash 复制代码
[root@cong11 ceph]# ceph-deploy     gatherkeys cong11
[root@cong11 ceph]# ls
bash 复制代码
[root@cong11 ceph\]\# cat ceph\.client\.admin\.keyring

__\#连接__ __ceph 集群的admin 账号密码__

### __部署__ __mgr  管理服务__

在 master 上部署 mgr 管理服务,也可以同时在 cong12 ,cong13 上部署 mgr,实 现高可用。

```bash
[root@cong11 ceph]# ceph-deploy mgr create cong11

部署 osd 服务

使用 ceph 自动分区
bash 复制代码
[root@cong11 ceph]# cd /etc/ceph/

[root@cong11 ceph]# ceph-deploy disk zap cong11 /dev/sdb 
[root@cong11 ceph]# ceph\-deploy disk zap cong12 /dev/sdb 
[root@cong11 ceph]# ceph\-deploy disk zap cong13 /dev/sdb
添加 osd 节点
bash 复制代码
[root@cong11 ceph\]# ceph-deploy osd create cong11 --data /dev/sdb 
[root@cong11 ceph\]# ceph-deploy osd create cong12 --data /dev/sdb 
[root@cong11 ceph\]# ceph-deploy osd create cong13 --data /dev/sdb
查看 osd 状态
bash 复制代码
[root@cong11 ceph]# ceph-deploy osd list cong11 cong12 cong13

统一集群配置

用 ceph-deploy 把配置文件和admin 密钥拷贝到所有节点,这样每次执行 Ceph 命 令行时就无需指定 monitor 地址和 ceph.client.admin.keyring 了

复制代码
[root@cong11 ceph\]\# ceph\-deploy admin cong11 cong12 cong13 cong14

各节点修改 ceph.client.admin.keyring 权限

bash 复制代码
[root@cong11 ceph\]# chmod +r /etc/ceph/ceph.client.admin.keyring 
[root@cong12 ~]# chmod +r /etc/ceph/ceph.client.admin.keyring
[root@cong13 ~]# chmod +r /etc/ceph/ceph.client.admin.keyring 
[root@cong14 ~]# chmod +r /etc/ceph/ceph.client.admin.keyring

部署 mds 服务

安装 mds

bash 复制代码
[root@cong11 ceph]# ceph-deploy mds create     cong12 cong13

查看 mds 服务

bash 复制代码
\[root@cong11 ceph\]\# ceph mds stat

查看集群状态

bash 复制代码
[root@cong11 ceph]# ceph -s

创建 ceph 文件系统

创建之前查看文件系统

bash 复制代码
[root@cong11 ceph]# cephfsls       #没有 ceph 文件系统

No filesystems enabled

创建存储池

命令:ceph osd pool create cephfs_data <pg_num>

ceph osd pool create cephfs_metadata <pg_num>

其中:<pg_num> = 128 , 关于创建存储池

确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:

*少于 5 个 OSD 时可把 pg_num 设置为 128

*OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512

*OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096

*OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num

取值

*自己计算 pg_num 取值时可借助 pgcalc 工具

随着 OSD 数量的增加,正确的 pg_num 取值变得更加重要,因为它显著地影响 着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。

bash 复制代码
[root@cong11 ceph]# ceph osd pool create cephfs_data 128

[root@cong11 ceph]# ceph osd pool create cephfs_metadata 128

创建文件系统

创建好存储池后,你就可以用 fs new 命令创建文件系统了 命令:

cephfs new <fs_name> cephfs_metadata cephfs_data

其中:<fs_name> = cephfs 可自定义 给刚才创建的 2 个存储池创建文件系统

bash 复制代码
[root@cong11 ceph]# cephfs new cephfscephfs_metadata cephfs_data

查看 ceph 文件系统

bash 复制代码
[root@cong11 ceph]# cephfsls

查看 mds 节点状态

bash 复制代码
[root@cong11 ceph]# ceph mds stat

内核驱动挂载 Ceph 文件系统

创建挂载点

bash 复制代码
[root@cong14 ~]# mkdir /mnt/aa

存储密钥(如果没有在管理节点使用 ceph\-deploy 拷贝ceph 配置文件) 
cat /etc/ceph/ceph\.client\.admin\.keyring

__\[client\.admin\]__

__key = AQA6Fuli0zChIBAAN8ZnZp3uR\+\+DzP9cbbzaBA==__

将 __key 对应的值__复制下来保存到文件:/etc/ceph/admin.secret 中。建挂载点

使用密钥挂载

bash 复制代码
[root@cong14      ~\]#      mount       -t      ceph       [192.168.1.11](192.168.1.11) :6789:/      /mnt/aa       -o

name=admin,secret= AQA6Fuli0zChIBAAN8ZnZp3uR\+\+DzP9cbbzaBA== 
[root@cong14 ~\]\# df -h

[root@cong14      ~]#      mount       -t      ceph       [192.168.1.11](192.168.1.11) :6789:/      /mnt/aa       -o

name=admin,secret= AQA6Fuli0zChIBAAN8ZnZp3uR++DzP9cbbzaBA== 
[root@cong14 ~]# df -h

使用密钥文件挂载

bash 复制代码
[root@cong14 ~]# vim admin.secret

AQA6Fuli0zChIBAAN8ZnZp3uR++DzP9cbbzaBA==

[root@cong14      ~]#       mount       -t       ceph        [192.168.1.11](192.168.1.11):6789:/      /data/       \-o

name=admin,secretfile=/root/admin.secret

用户控件挂载 Ceph 文件系统

安装 ceph-fuse

bash 复制代码
[root@cong14 ~]#    yum install -y ceph-fuse

挂载

bash 复制代码
[root@cong14 ~]# ceph-fuse -m [192.168.1.11](192.168.1.11):6789 /mnt/aa 
root@cong14 ~]# df -h

RBD 的使用

Ceph 支持一个非常好的特性,以 COW(写时复制)的方式从 RBD 快照创建克隆, 在 Ceph 中被称为快照分层。分层特性允许用户创建多个 CEPH RBD 克隆实例。这 些特性应用于 OpenStack 等云平台中,使用快照形式保护ceph RBD 镜像,快照是 只读的,但 COW 克隆是完全可以写 ,可以多次来孵化实例,对云平台来说是非常 有用的。

Ceph RBD 镜像有format-1 和 format-2 两种类型,RBD 支持这两种类型,但是 分层特性 COW 克隆特性只支持 format-2 镜像,默认 RBD 创建的镜像是 format-2。 (这个在克隆的时候特别重要)

检测 linux 内核是否支持 RBD

bash 复制代码
[root@cong11 ~]# modprobe rbd

如果有错误信息说明内核不支持,那你就先去升级一下内核

创建 rbd 存储池

bash 复制代码
[root@cong11 ~]# ceph osd pool create rbd 64

创建指定大小的块设备

bash 复制代码
[root@cong11 ~]# rbd create --size 102400 rbd/test1

这里需要注意 size 的大小,这个大小可以超过你实际 pool 的大小,这个叫做瘦 分配,也叫超卖和按需分配。创建块之后可以通过指令 rbd resize test/myrbd1 --size 51200 --allow-shrink 来动态的更改。

查看 test1 信息

bash 复制代码
[root@cong11 ~]# rbd info test1

映射进内核

映射进内核操作之前,首先查看内核版本, jw 版本的 ceph 默认 format 为 2, 2.x 及 之前的内核版本需手动调整 format 为 1, 4.x 之前要关闭 object-map, fast-diff, deep- flatten 功能才能成功映射到内核,这里使用的是 centos7.9, 内核版本 3.10。

bash 复制代码
[root@cong11   ~]#   rbd   feature   disable   test1   object -map   fast-diff   deep-flatten exclusive-lock

[root@cong11 ~]# rbdmaptest1

[root@cong11 ~]# ls /dev/rbd0

可以看见在/dev 下创建了一个叫 rbd0 的设备文件

挂载使用

挂载 rbd 的 Linux 服务器首先需要机器支持 ceph 客户端,如果是一台新机器的 话,请安装 ceph,然后同步下配置文件。

创建挂载点
bash 复制代码
[root@cong11 ~]# mkdir /mnt/cephrbd
格式化分区
bash 复制代码
[root@cong11 ~]# mkfs.xfs    /dev/rbd0
挂载
bash 复制代码
[root@cong11 ~]# mount /dev/rbd0 /mnt/cephrbd 
[root@cong11 ~]# df -h
测试写入数据
bash 复制代码
[root@cong11    ~]#    dd     if=/dev/zero    of=/mnt/cephrbd/file     bs=100M    count=1 oflag=direct

[root@cong11 ~]# rados df

可以看到写了 100M 数据,ceph 的 rbd pool相应的使用了 100M 的数据,也就是对/mnt/cephrbd 目录的操作将会直接写到 ceph 集群的 rbd 这个 pool 中,然后写到 ceph 的 osd 上。

相关推荐
三十..8 小时前
Ceph分布式存储核心技术精要与运维实践指南
运维·分布式·ceph
一个行走的民9 小时前
Ceph OSD NUMA 亲和性、Page Cache 跨 NUMA 访问与绑核实践
ceph
潮起鲸落入海10 小时前
ceph集群组件管理 ceph orch 和ceph config命令
ceph
bukeyiwanshui10 小时前
20260529 Ceph 分布式存储 认证和授权管理
ceph
bukeyiwanshui11 小时前
20260528 Ceph 分布式存储 池管理
ceph
一个行走的民11 小时前
CephX 认证机制深度解析
ceph
马立杰13 小时前
Ceph 集群手动部署
ceph·分布式存储
bukeyiwanshui13 小时前
20260528 Ceph 分布式存储 集群配置
分布式·ceph
qq_3564086613 小时前
Kubernetes Rook-Ceph 高可用存储部署文档
ceph·容器·kubernetes
潮起鲸落入海13 小时前
ceph集群mon 以及池管理
ceph