当前位置: 代码迷 >> 综合 >> cephL版安装部署文档(不包含对象,块存储方式)
  详细解决方案

cephL版安装部署文档(不包含对象,块存储方式)

热度:35   发布时间:2023-09-06 11:36:15.0

Ceph的部署工具:

  • ceph-deploy:官方的部署工具
  • ceph-ansible:红帽的部署工具
  • ceph-chef:利用chef进行自动部署Ceph的工具
  • puppet-ceph:puppet的ceph模块

版本

LTS 12.2版

部署前提

这是一个前提条件

关闭SELinux

关闭firewalld,并禁止开机自启

禁止开机自启

网卡 准备两块,一块公网用于对外提供服务,一块私网用于Ceph内部通信以及协调

四台虚拟机个准备2块200G的硬盘

共四个节点

在管理节点上,做各节点的免密登陆,在本文档中,使用的是ceph-mon1节点作为管理节点

ssh-keygen -t rsa -P ''
ssh-copy-id ceph-mon1
ssh-copy-id ceph-mon2
ssh-copy-id ceph-mon3
ssh-copy-id ceph-osd4

Ceph-Deploy

ceph-deploy应该部署在专用的节点,也就是管理节点AdminHost上。

ceph-deploy无法处理客户端工具,如果你需要使用Ceph集群,需要自己安装和配置客户端,这个客户端可能是一个内核模块(librbd),也可能只是一个命令行工具。

集群拓扑和网络

cephL版安装部署文档(不包含对象,块存储方式)

Ceph集群内有两类流量:

  • Cluster Network:私网,集群内部各节点间的通信流量
  • Public Network:公网,Ceph对外提供服务的网络

Cluster Network : 192.168.100.0/24

Public Network : 192.168.200.0/24

生产环境实现高可用性所推荐的节点数量:

Ceph-Mon:3个+

Ceph-Mgr:2个+

Ceph-Mds:2个+

开始

yum源和初始化准备

安装过程中尽量使用阿里云的源,请事先在所有节点上配置好阿里云的ceph源

#vi /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc

阿里云的epel源也可直接yum install epel*

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://mirrors.aliyun.com/epel/7/$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=http://mirrors.aliyun.com/epel/7/$basearch/debug
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=http://mirrors.aliyun.com/epel/7/SRPMS
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=0

配置好阿里云的yum源

wget  -O  /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

同步 etc/hosts 中的各个主机名和IP地址
cephL版安装部署文档(不包含对象,块存储方式)

切换到root账户下,安装ntpdate时间同步服务

yum install ntpdate -y
crontab -e
* * * * * /usr/sbin/ntpdate ntp.aliyun.com &> /dev/null
ntpdate ntp.aliyun.com

检查各个节点的repo源是否正常

#yum repolist

在管理节点上以cephadm用户的身份来做各节点ssh免密登录

su - cephadm
ssh-keygen -t rsa -P ''
ssh-copy-id cephadm@ceph-mon1
ssh-copy-id cephadm@ceph-mon2
ssh-copy-id cephadm@ceph-mon3
ssh-copy-id cephadm@ceph-osd4

cephL版安装部署文档(不包含对象,块存储方式)

使用ansible在各个节点上创建用户并赋予权限

useradd cephadm
echo '111111' | passwd --stdin cephadm
echo "cephadm ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephadm
chmod 0440 /etc/sudoers.d/cephadm

管理节点安装ceph-deploy

#yum install ceph-deploy  python-setuptools python2-subprocess32 ceph-common -y

管理节点以cephadm用户身份在家目录建立ceph-cluster目录

su - cephadm
mkdir ceph-cluster

切换至ceph-cluster目录

cd ceph-cluster

Mon

然后在所有节点——mon、mgr、osd都要安装,一定要把源的地址改成阿里云的,不然卡半天,翻墙都没用。

sudo yum install ceph ceph-radosgw -y

在管理节点以cephadm用户运行

cd ceph-cluster
#这个步骤是为了防止在生成keying文件信息时会自动将你的yum源换成更改为aliyun之前的,科学上网也是没用
ceph-deploy install --no-adjust-repos ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd4

在管理节点以cephadm用户运行

ceph-deploy mon create-initial
#这一步其实是在生成keyring文件

在管理节点以cephadm用户运行

ceph-deploy admin ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd4
#将配置和client.admin秘钥环推送到远程主机。
#每次更改ceph的配置文件,都可以用这个命令推送到所有节点上 

在所有节点以root的身份运行

setfacl -m u:cephadm:r /etc/ceph/ceph.client.admin.keyring #ceph.client.admin.keyring文件是 ceph命令行 所需要使用的keyring文件
#不管哪个节点,只要需要使用cephadm用户执行命令行工具,这个文件就必须要让cephadm用户拥有访问权限,就必须执行这一步
#这一步如果不做,ceph命令是无法在非sudo环境执行的。

Mgr

L版本之后Ceph,必须要有一个mgr节点,所以我们在管理节点执行:

su - cephadm
cd ceph-cluster
ceph-deploy mgr create ceph-mon1

执行完成之后,在管理节点查看集群的健康状态,不过,这一步同样需要/etc/ceph/ceph.client.admin.keyring文件

su - cephadm
#可以跳过下面的步骤直接查看ceph集群的状态
sudo cp ceph-cluster/{ceph.client.admin.keyring,ceph.conf} /etc/ceph/
ceph -s

OSD

列出osd节点上的所有可用磁盘

ceph-deploy disk list ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd4
#要以cephadm用户在~/ceph-cluster/目录下执行

清空osd节点上用来作为osd设备的磁盘

ceph-deploy disk zap ceph-mon1 /dev/sdb /dev/sdc
ceph-deploy disk zap ceph-mon2 /dev/sdb /dev/sdc
ceph-deploy disk zap ceph-mon3 /dev/sdb /dev/sdc
ceph-deploy disk zap ceph-osd4 /dev/sdb /dev/sdc
#注意,这里其实是在执行dd命令,执行错了就麻烦打了,全盘清空。

创建OSD

ceph-deploy osd create ceph-mon1 --data /dev/sdb
ceph-deploy osd create ceph-mon2 --data /dev/sdb
ceph-deploy osd create ceph-mon3 --data /dev/sdb
ceph-deploy osd create ceph-osd4 --data /dev/sdb
ceph-deploy osd create ceph-mon1 --data /dev/sdc
ceph-deploy osd create ceph-mon2 --data /dev/sdc
ceph-deploy osd create ceph-mon3 --data /dev/sdc
ceph-deploy osd create ceph-osd4 --data /dev/sdc

查看集群状态

ceph -s
#到这一步其实已经基本能用了
#我们来试一下

创建一个存储池,要想使用ceph的存储功能,必须先创建存储池

ceph osd pool create mypool 32 32

列出当前集群所有存储池

 ceph osd pool lsrados lspools

上传一个文件

rados put issue /etc/issue --pool=mypool

获取一个文件

rados get issue my_issue -p mypool
#issue是对象的ID
#my_issue是outfile,即输出文件叫啥名字
#-p指定存储池

删除一个文件

rados rm issue -p mypool

列出指定存储池有哪些文件

rados ls --pool=mypool

查看指定文件在Ceph集群内是怎样做映射的

ceph osd map mypool issue
#mypool是存储池的名称
#issue是文件的名称

ceph map信息简要说明

osdmap e39 pool 'mypool' (1) object 'issue' -> pg 1.651f88da (1.1a) -> up ([3,6,5], p3) acting ([3,6,5], p3)#pg 1.651f88da (1.1a),表示第1号存储池的1a号pg
#up Ceph的存储池是三副本存储的,后面的三个数字是存储了此文件的三个osd的编号,p3表示3号osd是主osd
#acting同理

到此为止,安装已经完成,接下来我们来扩展Ceph集群

cephfs挂载

在Linux内核2.6.34和以后的版本中添加了对Ceph的本机支持。

# 创建挂载目录

mkdir /mnt/cephfs 

# 挂载

ceph auth get-key client.cephfs // 在 ceph fs服务器上执行,获取 key mount -t ceph c720182:6789:/ /mnt/cephfs -o name=cephfs,secret=…… echo …*secret*…> /etc/ceph/cephfskey // 把 key保存起来 mount -t ceph c720182:6789:/ /mnt/cephfs -o name=cephfs,secretfile= /etc/ceph/cephfskey // name为用户名 echo "c720182:6789:/ /mnt/cephfs ceph name=cephfs,secretfile=/etc/ceph/cephfskey,_netdev,noatime 0 0" >>  /etc/fstab 

# 校验

umount /mnt/cephfs mount /mnt/cephfs dd if=/dev/zero of=/mnt/cephfs/file1 bs=1M count=1024

Ceph文件系统由LINUX内核本地支持;但是,如果您的主机在较低的内核版本上运行,或者您有任何应用程序依赖项,

您总是可以使用FUSE客户端让Ceph挂载Ceph FS。

# 安装软件包

rpm -qa |grep -i ceph-fuse // yum -y intall ceph-fuse

# 挂载

ceph-fuse --keyring /etc/ceph/ceph.client.cephfs.keyring --name client.cephfs -m c720182:6789 /mnt/cephfs echo "id=cephfs,keyring=/etc/ceph/ceph.client.cephfs.keyring /mnt/cephfs fuse.ceph defaults 0 0 _netdev" >> /etc/fstab 

注:因为 keyring文件包含了用户名,所以fstab不需要指定用了

将Ceph FS 导出为NFS服务器

网络文件系统(Network Filesystem, NFS)是最流行的可共享文件系统协议之一,每个基于unix的系统都可以使用它。

不理解Ceph FS类型的基于unix的客户机仍然可以使用NFS访问Ceph文件系统。要做到这一点,我们需要一个NFS服

务器,它可以作为NFS共享重新导出Ceph FS。NFS- ganesha是一个在用户空间中运行的NFS服务器,使用libcephfs支

持Ceph FS文件系统抽象层(FSAL)。

# 安装软件

yum install -y nfs-utils nfs-ganesha 

# 启动 NFS所需的rpc 服务

systemctl start rpcbind; systemctl enable rpcbind systemctl status rpc-statd.service

# 修改配置文件

vi /etc/ganesha/ganesha.conf

网络文件系统(Network Filesystem, NFS)是最流行的可共享文件系统协议之一,每个基于unix的系统都可以使用它。

不理解Ceph FS类型的基于unix的客户机仍然可以使用NFS访问Ceph文件系统。要做到这一点,我们需要一个NFS服

务器,它可以作为NFS共享重新导出Ceph FS。NFS- ganesha是一个在用户空间中运行的NFS服务器,使用libcephfs支

持Ceph FS文件系统抽象层(FSAL)。

# 安装软件

yum install -y nfs-utils nfs-ganesha 

#如果yum源中没有nfs-ganesha请参照如下连接对源码包进行编译安装

https://www.cnblogs.com/flytor/p/11430490.html

# 启动 NFS所需的rpc 服务

systemctl start rpcbind; systemctl enable rpcbind systemctl status rpc-statd.service 

# 修改配置文件

vi /etc/ganesha/ganesha.conf

cephL版安装部署文档(不包含对象,块存储方式)

#通过提供Ganesha.conf 启动NFS Ganesha守护进程

ganesha.nfsd -f /etc/ganesha.conf -L /var/log/ganesha.log -N NIV_DEBUG showmount -e 

# 客户端挂载

yum install -y nfs-utils mkdir /mnt/cephnfs mount -o rw,noatime c720182:/ /mnt/cephnfs

扩展Ceph集群

添加mon节点:

#为了尽量完善一点,我们来演示一下。
su - cephadm;cd ceph-cluster
ceph-deploy mon add ceph-mon2
ceph-deploy mon add ceph-mon3

查看mon的quorum状态

ceph quorum_status --format json-pretty

添加mgr节点,mgr是无状态的

ceph-deploy mgr create ceph-mon2

查看集群状态

ceph -s

删除一个存储池

ceph osd pool rm mypool mypool --yes-i-really-really-mean-it
#要求存储池的名字要写两遍
#后面必须加--yes-i-really-really-mean-it
#即便你写那么烦,

ceph命令高级玩法

ceph-deploy install --no-adjust-repos 
#装包的时候不更改yum源
#如果不指明这个选项,即便你提前配置了阿里云的yum源,它也会改成ceph官方的那个yum源ceph-deploy osd create {node} --data /path/to/data --block-db /path/to/db-device --block-wal /path/to/wal-device
#创建OSD时,将OSD的三类数据都分开存放——Object Data Blobs、SST文件、wal文件
#--data选项指定的是Object Data存放的硬盘
#--block-db选项指定的是SST文件
#--block-wal选项指定的是wal文件
ceph-deploy config push ceph-mon1
#把ceph.conf配置文件推送到节点上,如果你不特意指明,推送的其实是/home/cephadm/ceph-cluster目录下的ceph.conf文件ceph osd pool stats {<poolname>}
#查看一个存储池的状态

osd的四个状态:

up:启动状态

down:停止状态

in:在RADOS集群里面

out:在RADOS集群外边

此文档不包含ceph分布式存储中块存储、对象存储和cephfs文件存储的内容

至此,ceph集群部署已经完成。

  相关解决方案