CentOS 7系统部署Ceph分布式存储

文章最后更新时间:2023年07月01日已超过1028天没有更新。

Ceph是一个统一的分布式存储系统,最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),随后贡献给开源社区。其设计初衷是提供较好的性能、可靠性和可扩展性。在经过多年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。

ceph支持

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

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

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

Ceph相比其它分布式存储有哪些优点?

统一存储

虽然ceph底层是一个分布式文件系统,但由于在上层开发了支持对象和块的接口。所以在开源存储软件中,能够一统江湖。至于能不能千秋万代,就不知了。

高扩展性

扩容方便、容量大。能够管理上千台服务器、EB级的容量。

可靠性强

支持多份强一致性副本,EC。副本能够跨主机、机架、机房、数据中心存放。所以安全可靠。存储节点可以自管理、自动修复。无单点故障,容错性强。

高性能

因为是多个副本,因此在读写操作时候能够做到高度并行化。理论上,节点越多,整个集群的IOPS和吞吐量越高。另外一点ceph客户端读写数据直接与存储设备(osd) 交互。

Ceph各组件介绍

•Ceph OSDs: Ceph OSD 守护进程( Ceph OSD )的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD 守护进程的心跳来向 Ceph Monitors 提供一些监控信息。当 Ceph 存储集群设定为有2个副本时,至少需要2个 OSD 守护进程,集群才能达到 active+clean 状态( Ceph 默认有3个副本,但你可以调整副本数)。

•Monitors:  Ceph Monitor维护着展示集群状态的各种图表,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图。 Ceph 保存着发生在Monitors 、 OSD 和 PG上的每一次状态变更的历史信息(称为 epoch )。

•MDSs:  Ceph 元数据服务器( MDS )为 Ceph 文件系统存储元数据(也就是说,Ceph 块设备和 Ceph 对象存储不使用MDS )。元数据服务器使得 POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls、find 等基本命令。

Ceph部署过程

主机准备

操作系统统一:CentOS Linux release 7.9.2009 (Core)

主机名主机ip功能存储
ceph85192.168.80.85admin,osd, mon作为管理和监控节点20G数据盘
ceph86192.168.80.86osd,mds20G数据盘
ceph87192.168.80.87osd,mds20G数据盘
ceph88192.168.80.88client

所有服务器关闭selinux

永久关闭

修改selinux的配置文件,重启后生效

# vi /etc/selinux/config 

i 进入编辑模式

SELINUX=enforcing改为SELINUX=disabled,修改完后按键盘的 esc 然后输入 :wq 保存,重启服务器

更改系统名

192.168.80.85

# hostnamectl set-hostname ceph85

192.168.80.86

# hostnamectl set-hostname ceph86

192.168.80.87

# hostnamectl set-hostname ceph87

192.168.80.88

# hostnamectl set-hostname ceph88

创建存储目录

这边数据盘分区为盘符为 /dev/vdb

[root@ceph85 ~]# mkfs.xfs  /dev/vdb

[root@ceph85 ~]# mkdir -p /var/local/osd0

[root@ceph85 ~]# mount /dev/vdb  /var/local/osd0

[root@ceph85 ~]# echo "/dev/vdb  /var/local/osd0 xfs defaults 0 0" >> /etc/fstab 

[root@ceph86 ~]# mkfs.xfs  /dev/vdb

[root@ceph85 ~]# mkdir -p /var/local/osd1

[root@ceph86 ~]# mount /dev/vdb  /var/local/osd1

[root@ceph86 ~]# echo "/dev/vdb  /var/local/osd1 xfs defaults 0 0" >> /etc/fstab 

[root@ceph87 ~]# mkfs.xfs /dev/vdb

[root@ceph85 ~]# mkdir -p /var/local/osd2

[root@ceph87 ~]# mount /dev/vdb  /var/local/osd2

[root@ceph87 ~]# echo "/dev/vdb  /var/local/osd2 xfs defaults 0 0" >> /etc/fstab 

所有服务器添加如下本地hosts

主机 ceph85 192.168.80.85 中添加如下

[root@ceph85 ~]# echo "192.168.80.85 ceph85" >> /etc/hosts

[root@ceph85 ~]# echo "192.168.80.86 ceph86" >> /etc/hosts

[root@ceph85 ~]# echo "192.168.80.87 ceph87" >> /etc/hosts

[root@ceph85 ~]# echo "192.168.80.88 ceph88" >> /etc/hosts

主机 ceph86 192.168.80.86 中添加如下

[root@ceph86 ~]# echo "192.168.80.85 ceph85" >> /etc/hosts

[root@ceph86 ~]# echo "192.168.80.86 ceph86" >> /etc/hosts

[root@ceph86 ~]# echo "192.168.80.87 ceph87" >> /etc/hosts

[root@ceph86 ~]# echo "192.168.80.88 ceph88" >> /etc/hosts

主机 ceph87 192.168.80.87 中添加如下

[root@ceph87 ~]# echo "192.168.80.85 ceph85" >> /etc/hosts

[root@ceph87 ~]# echo "192.168.80.86 ceph86" >> /etc/hosts

[root@ceph87 ~]# echo "192.168.80.87 ceph87" >> /etc/hosts

[root@ceph87 ~]# echo "192.168.80.88 ceph88" >> /etc/hosts

主机 ceph88 192.168.80.88 中添加如下

[root@ceph87 ~]# echo "192.168.80.85 ceph85" >> /etc/hosts

[root@ceph87 ~]# echo "192.168.80.86 ceph86" >> /etc/hosts

[root@ceph87 ~]# echo "192.168.80.87 ceph87" >> /etc/hosts

[root@ceph87 ~]# echo "192.168.80.88 ceph88" >> /etc/hosts

设置SSH免密码登录

在管理节点使用 ssh-keygen 生成ssh keys 发布到各节点

[root@ceph85 ~]# ssh-keygen #所有的输入选项都直接回车生成。

[root@ceph85 ~]# ssh-copy-id ceph85

[root@ceph85 ~]# ssh-copy-id ceph86

[root@ceph85 ~]# ssh-copy-id ceph87

[root@ceph85 ~]# ssh-copy-id ceph88

配置管理节点安装ceph-deploy工具

增加 yum配置文件(各个节点都需要增加yum源)

# vi /etc/yum.repos.d/ceph.repo

添加以下内容:(ceph这边使用阿里镜像源)

[Ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.aliyun.com/ceph//rpm-jewel/el7/x86_64
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph//keys/release.asc
priority=1
 
[Ceph-noarch]
name=Ceph noarch packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1
 
[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1

 第二步:更新软件源并安装 ceph-deploy 管理工具

# yum clean all && yum list

# yum -y install ceph-deploy

创建monitor服务

[root@ceph85  ~]# mkdir /etc/ceph && cd /etc/ceph

[root@ceph85 ceph]#  ceph-deploy new ceph85    #mon安装在ceph85节点

image.png

生成配置文件在当前目录下

image.png

Ceph配置文件、一个monitor密钥环和一个日志文件

修改副本数

[root@ceph85 ceph]# vi ceph.conf 

配置文件的默认副本数从3改成2,这样只有两个osd也能达到active+clean状态,把下面这行加入到[global]段(可选配置)

osd_pool_default_size = 2

在所有节点安装ceph

(如果网络源安装失败,手工安装epel-release 然后安装yum –yinstall cep-release再yum –y install ceph ceph-radosgw)

[root@ceph85 ceph]# ceph-deploy install ceph85 ceph86 ceph87 ceph88

安装ceph monitor

[root@ceph85 ceph]# ceph-deploy mon create ceph85

收集节点的keyring文件

[root@ceph85 ceph]# ceph-deploy  gatherkeys ceph85

创建激活osd

#创建osd 

[root@ceph85 ceph]# ceph-deploy osd prepare ceph85:/var/local/osd0 ceph86:/var/local/osd1 ceph87:/var/local/osd2

#激活osd 

[root@ceph85 ceph]# ceph-deploy osd activate ceph85:/var/local/osd0 ceph86:/var/local/osd1 ceph87:/var/local/osd2

报错

image.png

[ceph85][ERROR ] RuntimeError: command returned non-zero exit status: 1

[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: /usr/sbin/ceph-disk -v activate --mark-init systemd --mount /var/local/osd0

解决办法

解决:在各个节点上给/var/local/osd1/和/var/local/osd2/添加权限

如下:

chmod 777 -R /var/local/osd0/

chmod 777 -R /var/local/osd1/

chmod 777 -R /var/local/osd2/

然后重新激活

查看状态

[root@ceph85 ceph]# ceph-deploy osd list ceph85 ceph86 ceph87

统一配置

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

[root@ceph85 ceph]# ceph-deploy admin ceph85 ceph86 ceph87 

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

# chmod +r /etc/ceph/ceph.client.admin.keyring

查看osd状态

# ceph health 或 ceph -s

image.png

部署mds服务

[root@ceph85 ceph]# ceph-deploy mds create ceph85 ceph86  #我们MDS安装2台

[root@ceph85 ceph]# ceph mds stat #查看状态

查看集群状态

image.png

到此基本上完成了ceph存储集群的搭建

创建ceph文件系统

#创建之前

[root@ceph85 ceph]# ceph fs ls 

image.png

创建存储池

[root@ceph85 ceph]# ceph osd pool create cephfs_data <pg_num> 

[root@ceph85 ceph]# ceph osd pool create cephfs_metadata <pg_num>

其中:<pg_num> = 128 ,

image.png

关于创建存储池

确定 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 取值变得更加重要,因为它显著地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。 

创建文件系统

[root@ceph85 ceph]# ceph fs new <name> cephfs_metadata cephfs_data 

其中:<name> = cephfs  可自定义

image.png

[root@ceph85 ceph]# ceph fs ls              #查看创建后的cephfs

name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

[root@ceph85 ceph]# ceph mds stat          #查看mds节点状态

e6: 1/1/1 up {0=ceph86=up:active}, 1 up:standby

active是活跃的,另1个是处于热备份的状态

挂载Ceph文件系统

内核驱动挂载Ceph文件系统

存储密钥(如果没有在管理节点使用ceph-deploy拷贝ceph配置文件)

[root@ceph85 ~]# cat /etc/ceph/ceph.client.admin.keyring

将key对应的值复制下来保存到文件[root@ceph88 ~]# /etc/ceph/admin.secret中。

挂载

[root@ceph88 ~]# mkdir -p /data   #创建挂载点

[root@ceph88 ceph]# mount -t ceph 192.168.80.85:6789:/ /data -o name=admin,secretfile=/etc/ceph/admin.secret

image.png

取消挂载

[root@ceph88 ceph]# umount /data

其他挂载方式可以百度查找相关资料

Ceph其他相关操作

清理机器上的ceph相关配置:

停止所有进程: stop ceph-all

卸载所有ceph程序:ceph-deploy uninstall [{ceph-node}]

删除ceph相关的安装包:ceph-deploy purge {ceph-node} [{ceph-data}]

删除ceph相关的配置:ceph-deploy purgedata {ceph-node} [{ceph-data}]

删除key:ceph-deploy forgetkeys

卸载ceph-deploy管理:yum -y remove ceph-deploy

以上就是关于CentOS 7系统如何部署Ceph分布式存储相关教程,继续学习去啦


© 除非注明,否则均为阿豪运维笔记原创文章,转载或复制请以超链接形式并注明出处

取消
微信二维码
微信二维码
支付宝二维码