共享存储-一步一步部署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 上。

相关推荐
大新新大浩浩3 天前
k8s环境中的rook-ceph的osd报Permission denied无法正常运行问题的处理方式
java·ceph·kubernetes
大新新大浩浩5 天前
ceph部署-14版本(nautilus)-使用ceph-ansible部署实验记录
ceph·ansible
野猪佩挤6 天前
Ceph集群搭建2025(squid版)
ceph
野猪佩挤6 天前
Rook-ceph(1.92最新版)
ceph
斯普信专业组9 天前
从零到一:基于Rook构建云原生Ceph存储的全面指南(上)
ceph·云原生
斯普信专业组11 天前
从零到一:基于Rook构建云原生Ceph存储的全面指南(下)
ceph·云原生
佟晖12 天前
ceph 16.2.15(Pacific)编译
linux·ceph·分布式存储
淡黄的Cherry1 个月前
ceph新增节点,OSD设备,标签管理(二)
ceph
Linux运维老纪1 个月前
分布式存储的技术选型之HDFS、Ceph、MinIO对比
大数据·分布式·ceph·hdfs·云原生·云计算·运维开发