首页 > 其他分享 >ceph分布式存储搭建

ceph分布式存储搭建

时间:2023-04-03 16:38:35浏览次数:54  
标签:cephfs deploy -- 分布式 ceph client rbd 搭建

CEPH分布式存储搭建

本文通过参考臧 雪 园 老师的文档根据实际操作做修改,详细视频链接参考:

https://edu.51cto.com/course/15982.html

1576048182083

集群配置信息:

1576048376955

安装的ceph版本:

1576048456234

配置所需源的地址

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

wget -O /etc/yum.repos.d/ceph.repo https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-deploy/ceph.repo

手动yum epel 源

开始集群环境配置前建议最好关闭每个节点的selinux 和 firewalld 服务

sed -i "/^SELINUX/s/enforcing/disabled/" /etc/selinux/config

setenforce 0

Ceph集群搭建

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

yum install ntpdate -y

crontab -e

\* * * * * /usr/sbin/ntpdate ntp.aliyun.com &> /dev/null

ntpdate ntp.aliyun.com

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

#yum repolist

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

useradd ceph

echo '111111' | passwd --stdin ceph

echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph

chmod 0440 /etc/sudoers.d/ceph

配置主机名解析,使用/etc/hosts, 例如:

1576048570612

# 配置sudo不需要tty

#sed -i 's/Default requiretty/#Default requiretty/' /etc/sudoers

# 配置免密钥登录 username为你创建的ceph,也就是账户名

#su - ceph

#export username=ceph  ssh-keygen

#ssh-copy-id ${username}@node1  ssh-copy-id ${username}node2  ssh-copy-id ${username}@node3

# 主节点安装 ceph-deploy

$sudo yum install -y  ceph-deploy python-pip

#在ceph账户下创建my-cluster目录,用以存放后面收集到的密钥文件和集群配置文件

$mkdir my-cluster  
$cd my-cluster

# 部署节点

$ceph-deploy  new  node1 node2 node3

# 编辑 ceph.conf 配置文件

$cat ceph.conf  [global]

.....

public network = 10.1.10.0/24 

 cluster network = 192.168.100.0/24


# 安装 ceph包,替代 ceph-deploy install node1 node2 node3,不过下面的命令需要在每台node上安装 yum

#install -y ceph ceph-radosgw

在管理节点以ceph用户运行

$ cd ceph-cluster

#这个步骤是为了防止在生成keying文件信息时会自动将你的yum源换成更改为aliyun之前的

$ ceph-deploy install --no-adjust-repos node1 node2 node3

# 配置初始 monitor(s)、并收集所有密钥: ceph-deploy mon create-initial

ls -l *.keyring

#这一步完成之后,my-cluster 目录下就会出现收集到的密钥文件

# 把配置信息拷贝到各节点

$ceph-deploy admin node1 node2 node3

#每次更改ceph的配置文件,都可以用这个命令推送到所有节点上,使用—overwrite-conf config push 参数命令时,建议提前备份好配置文件,防止覆盖过程中出现配置文件复原的问题

#配置osd,列出各个节点上所有可以用来作为osd设备的磁盘

$ceph-deploy disk list ceph-mon1 ceph-mon2 ceph-mon3 ceph-osd4

#要以ceph用户在~/my-cluster/目录下执行s

#清空osd节点上用来作为osd设备的磁盘,此步骤相当于格式化磁盘

$ceph-deploy disk zap node1 /dev/sdb /dev/sdc

$ceph-deploy disk zap node2 /dev/sdb /dev/sdc

$ceph-deploy disk zap node3 /dev/sdb /dev/sdc

#创建OSD

ceph-deploy osd create node1 --data /dev/sdb

ceph-deploy osd create node2 --data /dev/sdb

ceph-deploy osd create node3 --data /dev/sdb

ceph-deploy osd create node1 --data /dev/sdc

ceph-deploy osd create node2 --data /dev/sdc

ceph-deploy osd create node3 --data /dev/sdc

#此时集群配置基本完成ceph -s 查看状态失败时,可以在各个节点的/etc/ceph/ 目录下查看配置文件所属用户和用户组是否为ceph,如果不是可以在各个节点以root运行

setfacl -m u:cephadm:r /etc/ceph/ceph.client.admin.keyring

#ceph.client.admin.keyring文件是 ceph命令行 所需要使用的keyring文件

#不管哪个节点,只要需要使用ceph用户执行命令行工具,这个文件就必须要让ceph用户拥有访问权限,就必须执行这一步

查看集群状态,到这一步集群基本上就已经能用了

#ceph –s

#L版之后需要部署mgr,可以启动dashboard UI监控模块,更直观的查看集群状态

$ceph-deploy mgr create node1 node2 node3 

#开启dashboard模块,用于UI查看

$ceph mgr module enable dashabord

#浏览器输入地址后加上默认端口号7000

1576051453640

ceph集群搭建—块存储

任何普通的Linux主机(RHEL或基于debian的)都可以充当Ceph客户机。客户端通过网络与Ceph存储集群交互以存储或检 索用户数据。Ceph RBD支持已经添加到Linux主线内核中,从2.6.34和以后的版本开始。

# 创建 ceph 块客户端用户名和认证密钥

$ceph auth get-or-create client.rbd mon ‘allow r’ osd ‘allow class-read object_prefix rbd_children, allow rwx pool=rbd’|tee ./ceph.client.rbd.keyring

//scp  ceph.client.rbd.keyring  /etc/ceph/ceph.conf ceph-client:/etc/ceph/ceph.client.rbd.keyring  (应该是copy不过去的,权限问题)

#客户端安装完了以后,再手动把密钥文件拷贝到客户端 也就是在客户端下vim 一个文件并写入密钥

还需要将配置文件ceph.conf也手动copy过去

# 安装ceph客户端

#wget -O /etc/yum.repos.d/ceph.repo https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-  deploy/ceph.repo

#客户端安装ceph,需手动把主机生成的client.rbd.keyring 密钥文件复制到客户端

#yum -y install ceph

#cat /etc/ceph/ceph.client.rbd.keyring

#ceph -s --name client.rbd

客户端创建块设备及映射

( 1) 创建块设备

默认创建块设备,会直接创建在 rbd 池中,但使用 deploy 安装后,该rbd池并没有创建

# 创建池和块

$ceph osd lspools           # 查看集群存储池

$ceph osd pool create rbd 50       # 50 为 place group 数量,由于我们后续测试,也需要更多的pg,所以这里设置为50

计算PG数
对于一个在生产环境中的 ceph分布式存储 集群中,提前根据需求和配置规划好 PG 是非常重要的,随
着使用时间的积累和 ceph 集群的不断扩展我们跟需要 ceph集群的性能能够不断的跟进
计算 Ceph 集群的PG 数的公式如下:

PG 总数 = (OSD 总数 * 100)/ 最大副本数

结果必须舍入到最接近2的N次幂的值。比如如果ceph 集群有160个OSD 且副本数是3,这样根据公
式计算得到的PG 总数是 5333.3,因此舍入到这个值到最近的 2 的N次幂的结果就是8192个PG,再根
据你所创建的存储池规划,所有的 pool 的PG数加起来是不能超过集群中 PG 的总量的。
我们还应该计算 Ceph集群中每一个POOL (池)的PG 总数。计算公式如下 :

POOL PG_NUM | PG 总数 = ((OSD 总数 * 100)/ 最大副本数)/ POOL 数

同样使用前面的例子:OSD 总数是160,副本数是3,POOL(池)总数是3。根据上面这个公式,计
算得到每个池的 PG 总数应该是1777.7,最后舍入到2 的N次幂得到结果为每个池 2048 个PG。
平衡每个池中的PG 数和每个 OSD 中的PG 数对于降低 OSD 的方差、避免速度缓慢的恢复进程是相
当重要的。

# 客户端创建 块设备

$rbd  create rbd1  --size  10240  --name client.rbd

$rbd ls  --name client.rbd

$rbd ls -p rbd --name client.rbd 

 $rbd list  --name client.rbd

映射块设备

$rbd --image  rbd1 info  --name client.rbd    #此时映射到客户端,应该会报错

layering: 分层支持

exclusive-lock: 排它锁定支持对

object-map: 对象映射支持(需要排它锁定(exclusive-lock))

deep-flatten: 快照平支持(snapshot flatten support)

• fast-diff: 在client-node1上使用krbd(内核rbd)客户机进行快速diff计算(需要对象映射),我们将无法在CentOS内核3.10 上映射块设备映像,因为该内核不支持对象映射(object-map)、深平(deep-flatten)和快速diff(fast-diff)(在内核4.9中引 入了支持)。为了解决这个问题,我们将禁用不支持的特性,有几个选项可以做到这一点:

1)动态禁用

$rbd feature disable rbd1 exclusive-lock object-map deep-flatten fast-diff --name client.rbd  

2) 创建RBD镜像时,只启用 分层特性。

$rbd create rbd2 --size 10240  --image-feature layering   --name client.rbd

3)ceph.conf 配置文件中禁用

rbd_default_features = 1

# 我们这里动态禁用

$rbd feature disable rbd1 exclusive-lock object-map fast-diff deep-flatten --name client.rbd

#这一步创建出对应的块映射文件 /dev/rbd0

$rbd map --image rbd1 --name client.rbd  rbd showmapped  --name client.rbd

#创建文件系统并挂载

#fdisk -l /dev/rbd0

#mkfs.xfs  /dev/rbd0        

#mkdir  /mnt/ceph-disk1

#mount /dev/rbd0 /mnt/ceph-disk1  df  -h /mnt/ceph-disk1

# 写入数据测试

#dd if=/dev/zero of=/mnt/ceph-disk1/file1 count=100 bs=1M

# 做成服务,开机自动挂载

#wget -O /usr/local/bin/rbd-mount https://raw.githubusercontent.com/aishangwei/ceph-demo/master/client/rbd-mount  chmod +x /usr/local/bin/rbd-mount

#wget -O /etc/systemd/system/rbd-mount.service https://raw.githubusercontent.com/aishangwei/ceph-  demo/master/client/rbd-mount.service

#systemctl daemon-reload

#systemctl enable rbd-mount.service

#reboot -f 

 #df -h

ceph集群搭建是—对象存储

# 安装ceph-radosgw

#yum -y install ceph-radosgw

# 部署

$ceph-deploy rgw create node1 node2 node3

# 配置80端口

#vi /etc/ceph/ceph.conf

…….  [client.rgw.node1]

rgw_frontends = "civetweb port=80"

$sudo  systemctl  restart  [email protected]

](mailto:[email protected])

*#你也可以使用默认的7480端口*

# 创建池

#wget https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-deploy/rgw/pool

#wget https://raw.githubusercontent.com/aishangwei/ceph-demo/master/ceph-deploy/rgw/create_pool.sh

$chmod +x create_pool.sh

$./create_pool.sh

# 测试是否能够访问 ceph 集群

$sudo cp

$ceph -s -k  /var/lib/ceph/radosgw/ceph-rgw.node3/keyring   --name client.rgw.node3

使用 S3 API 访问 Ceph 对象存储

# 创建 radosgw 用户

#radosgw-admin user create --uid=radosgw --display-name=“radosgw"

注意:请把 access_key 和 secret_key 保存下来 ,如果忘记可使用:radosgw-admin user info --uid … -k … --name …

# 安装 s3cmd 客户端

#yum   install  s3cmd -y

# 将会在家目录下创建 .s3cfg 文件 , location 必须使用 US , 不使用 https, s3cmd --configure

# 编辑 .s3cfg 文件,修改 host_base 和 host_bucket

#vi  .s3cfg

……

host_base = node3.hongyuan.com:7480

host_bucket = %(bucket).node3.hongyuan.com:7480

……



# 创建桶并放入文件 s3cmd mb s3://first-bucket s3cmd ls

#s3cmd put /etc/hosts s3://first-bucket  s3cmd  ls s3://first-bucket

ceph文件存储

# 部署 cephfs

$ceph-deploy  mds  create node2

注意:查看输出,应该能看到执行了哪些命令,以及生成的keyring

$ceph  osd pool  create  cephfs_data  128    

$ceph osd  pool create  cephfs_metadata  64    #用来存放元数据的池

$ceph  fs  new  cephfs  cephfs_metadata cephfs_data

$ceph mds stat  ceph osd pool ls  ceph  fs ls

# 创建用户(可选,因为部署时,已经生成)

$ceph auth get-or-create client.cephfs mon ‘allow r’ mds ‘allow r, allow rw path=/’ osd ‘allow rw pool=cephfs_data’ -o  ceph.client.cephfs.keyring



$scp   ceph.client.cephfs.keyring  ceph-client:/etc/ceph/

通过内核驱动和FUSE客户端挂载 Ceph FS

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

# 创建挂载目录

#mkdir /mnt/cephfs

# 挂载

#ceph auth get-key client.cephfs  //  在 ceph fs服务器上执行,获取 key

#mount -t ceph node2:6789:/ /mnt/cephfs -o name=cephfs,secret=……  echo …*secret*…> /etc/ceph/cephfskey  // 把 key保存起来

#mount -t ceph node2:6789:/ /mnt/cephfs  -o name=cephfs,secretfile= /etc/ceph/cephfskey     #name 为用户名 cephfs



#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 node2: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不需要指定用了

将CephFS 导出为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

##如果你的aliyun源中没有nfs-ganesha package 时,需要手动编译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

1576057969677

#通过提供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 node2:/ /mnt/cephnfs

首先我们需要先把node4节点的IP能够被管理节点解析

#vim /etc/hosts 

将node4节点的public_network和cluster_network 写入

主节点登录ceph账户,为node4节点配置免密登录

$ ssh-copy-id ceph@node4

#使用ceph-deploy工具为node4节点安装ceph

$ceph-deploy install node4

#查看node4节点上可用的osd磁盘

$ceph-deploy disk list node4 

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

$ceph-deploy disk zap node4 /dev/sdb  

#创建osd

$ceph-deploy osd create node4 –data /dev/sdb

#查询集群状态,也可以查询PG的详细状态,你会发现新加入的osd盘PG已经被分配

#ceph –s

#ceph osd dump

#ceph pg dump

#新加入的osd设备的权重默认也是1,写入数据测试,新的osd将会自动被分配数据报错则osd设备加入成功。

标签:cephfs,deploy,--,分布式,ceph,client,rbd,搭建
From: https://www.cnblogs.com/Gatsbysun/p/17283423.html

相关文章

  • 【FastDFS分布式文件系统】5.FastDFS客户端的配置、启动和常用命令
    上一篇我们介绍了FastDFS服务端的tracker追踪服务器和storage存储服务器,本篇来介绍一下客户端的启动,以及外部客户端如何与FastDFS服务端进行连接。和之前一样,服务端部署在三台服务器上:其中192.168.195.129是tracker追踪服务器,192.168.195.130和192.168.195.131......
  • 【FastDFS分布式文件系统】6.FastDFS客户端启动与Java连接
    上一篇我们讲解了如何配置和启动FastDFS客户端,以及客户端上传下载的一些常用命令。那么,在许多需要进行分布式文件上传与下载的系统中,就不能像执行Linux命令一样去上传和下载文件,它们需要使用开发系统的语言去操作客户端使用其命令与服务端进行交互,此时FastDFS......
  • 分布式ID生成方案总结
    什么是分布式ID分布式ID是指,在分布式环境下可用于对数据进行标识且易存储的全局唯一的ID标识。为什么需要分布式ID对于单体系统来说,主键ID可能会常用主键自动的方式进行设置,这种ID生成方法在单体项目是可行的。对于分布式系统,分库分表之后,就不适应了,比如订单表数据量太大了,分......
  • ESP32的VS Code环境搭建
         安装失败的时候需要更换PIP源1.在运行窗口或资源管理器中输入%APPDATA%  2.进入目录后,新建一个文件夹pip,并在该文件夹里面新建文件pip.ini,并输入以下内容:  文本内容如下所示:[global]timeout=6000index-url=https://pypi.tuna.tsinghua.edu.cn/si......
  • 搭建直播平台,android 如何得到本地视频的缩略图
    搭建直播平台,android如何得到本地视频的缩略图 publicclassVideoThumbUtils{  /**   *得到视屏的缩略图   *   *@paramvideoPath   *@paramwidth   *@paramheight   *@return   */  publicstaticBitmapgetVideoThum......
  • git服务器搭建过程以及遇到的问题
    git自动化部署在Git服务器上为用户配置SSH公钥git@Linux:~$mkdir.sshgit@Linux:~$touch.ssh/authorized_keysgit@Linux:~$chmod600.ssh/authorized_keysgit@Linux:~$authorized_keys文件可以保存多个用户的SSH公钥,所有公钥被添加到这个文件中的用户,就都可......
  • ceph版本及生命周期、查看命令
    ceph版本https://blog.whsir.com/post-6687.html查看ceph版本的命令要查看Ceph的版本,可以使用以下命令:ceph--version或者:ceph--version|grepceph这些命令将打印出Ceph的版本信息,例如:cephversion14.2.21(f90a3fe2e8f97a69de958ff472c30edfe9e9dcdc)nautilus(stable)其中,“......
  • 分布式计算ECHO算法(IT部落格)
    packageorg.ustc.scst.dc.simulation.algorithms.echo;importjava.awt.Color;importorg.ustc.scst.dc.simulation.algorithms.echo.IntMessage;importorg.ustc.scst.dc.simulation.model.Message;importorg.ustc.scst.dc.simulation.model.Node;/***Thiss......
  • redis使用setnx+lua实现分布式锁
    在Redis中,使用SETEX命令(对应RedisTemplate的setIfAbsent方法)可以实现一个最简易的分布锁。SETEX命令当key不存在的话,才会设置key的值,如果可以已经存在,就不做任何操作。为了避免锁无法被释放,就给这个key(也就是锁)设置一个过期时间。为了保证解锁操作的原子性,使用Lua脚本进行释放锁......
  • 【环境搭建】docker+nginx部署PHP
    目的使用docker容器完成nginx的安装以及部署PHP网页步骤一、安装nginx1.拉取Nginx镜像dockerpullnginx//拉取镜像dockerimages//查看本地镜像这里注意需要记一下nginx的IMAGEID,我这里的ID是605c2.创建Nginx容器dockerrun......