Ceph初步了解和ceph集群搭建测试

Ceph初步了解和ceph集群搭建测试

常用分布式文件系统

  • Hadoop
  • FastDFS
  • Ceph
  • GlusterFS
  • Lustre(太老了)

Ceph概述

  • Ceph是一个分布式文件系统

  • 具有高扩展、高可用(默认3副本存储数据 一个挂了还有两个)、高性能(分布式存储数据 并发存储和读取)的特点

  • Ceph可用提供PB级别的存储空间,同时基于计算的扁平寻址设计使得Ceph客户端可以直接和服务端的任意节点通信,从而避免因为存在访问热点而导致性能瓶颈

  • Ceph的主要目标是设计成基于POSIX的没有单点故障的分布式文件系统,使数据能容错和无缝的复制

  • Ceph是一个统一存储系统,即支持传统的块、文件存储协议,例如SAN和NAS;也支持对象存储协议,例如S3和Swift

Ceph块存储

块存储是存储区域网络中使用的一个数据存储类别

直接在本地分区格式化出数据

  • 数据以块(block)的形式存储在卷里,卷会连接到节点上。这些块形成的卷会映射到操作系统中,并被文件系统层控制
  • Ceph引入了一个新的RBD协议(Ceph块设备)。RBD为客户端提供了可靠、分布式、高性能的块存储(已经被Linux内核支持),还支持完整和增量式快照,精简的配置,写时复制式克隆以及全内存是缓存
典型设备
  • 磁盘阵列
  • 硬盘
优点
  • 通过Raid与LVM等手段,对数据提供了保护
  • 多块廉价的硬盘组合起来,提高容量
  • 多块磁盘组合起来的逻辑盘,提升读写效率
缺点
  • 采用SAN架构组网时,造价成本高
  • 主机之间无法共享数据
使用场景
  • docker容器、虚拟机磁盘存储分配
  • 日志存储
  • 文件存储
Ceph文件系统存储

直接挂载来用 通过本地Linux内核的功能或者Ceph社区提供的ceph-fuse驱动

也可使用第三方开源程序:NFS的ganesha和SMB/CIFS的Samba

  • Ceph文件系统(CephFS)是一个兼容POSIX的文件系统,利用Ceph存储集群来保存用户数据。Linux内核驱动程序支持CephFS
  • CephFS将数据(block 存储实际内容数据)和元数据(inode 描述存储数据信息的数据)分开存储,为上层的应用程序提供较高的性能以及可靠性
  • 在Ceph集群内部,Ceph文件系统库(libcephfs)运行在RADOS库(librados)之上,librados是Ceph存储集群协议,由文件、块和对象存储共用
  • 集群节点上最少要配置一个Ceph元数据服务器(MDS),客户端可以采用多种方式使用CephFS
典型设备
  • FTP、NFS服务器
优点
  • 造价低,随便一台机器就可以了
  • 方便文件共享
缺点
  • 读写速率低
  • 传输速率慢
使用场景
  • 日志存储
  • 有目录结构的文件存储
Ceph对象存储
  • Ceph是一个分布式对象存储系统,通过它的对象网关(object gateway),也就是RADOS网关(radosgw)提供对象存储接口。RADOS网关利用librgw(RADOS网关库)和librados这些库,允许应用程序跟Ceph对象存储建立连接。Ceph通过RESTful API提供可访问且最稳定的多租户对象存储解决方案之一
  • RADOS网关接口(RESTful API)满足以下特点
    • 兼容Swift: 为OpenStack Swift API提供的对象存储功能
    • 兼容S3: 为Amazon S3 API提供的对象存储功能
  • 要访问Ceph的对象存储系统,也可以绕开RADOS网关层,librados软件库允许用户的应用程序通过C、C++、Java、Python、PHP直接访问Ceph对象存储
典型设备
  • 内置大容量硬盘的分布式服务器(swift, s3)
优点
  • 具备块存储的读写高速
  • 具备文件存储的共享等特性
使用场景
  • 图片存储
  • 视频存储

Ceph组件

  • OSDs
    • 存储设备(必要)
  • Monitors
    • 集群监控组件(必要 过半原则(Monitors要奇数台))
  • RadosGateway(RGW)
    • 对象存储网关
  • MDSs
    • 存放文件系统的元数据(对象存储和块存储方式不需要该组件)
  • Client
    • ceph客户端
  • Object
  • PG
  • RADOS
  • Libradio
  • CRUSH
  • RBD
  • RGW
  • CephFS

可以看看大佬写的这篇https://blog.csdn.net/mingongge/article/details/100788388


测试

前置准备
机子情况
主机名称 IP地址
client 192.168.4.10/24 客户端
node1 192.168.4.5/24 存储节点服务器
node2 192.168.4.100/24 存储节点服务器
node3 192.168.4.200/24 存储节点服务器

除client外将Ceph光盘挂载到/myceph目录下 都有20+20G的额外硬盘

测试
#所有机子  将ceph光盘内容挂载到/ceph
mkdir /ceph
vim /etc/fstab
======================================
......
/dev/sr1 /ceph iso9660 defaults 0 0
=========================================
mount -a #测试

#node1
ssh-keygen -f /root/.ssh/id_rsa -N '' #生成秘钥
for i in client node1 node2 node3     #/etc/hosts配置过了   或者直接打ip  全部都发
>do
>ssh-copy-id $i         #前面不加用户名@  默认root@
>done

#随着一串密码输入   发送成功
#提示  主机名和/etc/hosts 里面一致
vim /etc/hosts
=======================
....
192.168.4.10 client
192.168.4.100 node2
192.168.4.200 node3
192.168.4.5 node1
===========================

for i in client node1 node2 node3  #测试环境都需要域名解析
>do
>scp /etc/hosts $i:/etc/
>done

vim /etc/yum.repos.d/ceph.repo #配置cephyum源    createrepo 使rpm包们生成repodata
===============================
[mon]
name=mon
baseurl=file:///myceph/MON
gpgcheck=0
[osd]
name=osd
baseurl=file:///myceph/OSD
gpgcheck=0
[tools]
name=tools
baseurl=file:///myceph/Tools
gpgcheck=0
=================================

for i in node1 node2 node3
>do
>scp /etc/yum.repos.d/ceph.repo $i:/etc/yum.repos.d/
>done

for i in node1 node2 node3
>do
>ssh $i "yum -y install ceph-mon ceph-osd ceph-mds ceph -radosgw"
>done

#到此完成三台节点机器的ceph yum源配置和安装



#给client主机配置NTP服务器
yum -y install chrony
vim /etc/chrony.conf
===========================
...
	allow 192.168.4.0/24     #修改26行 运行192.168.4.0网段ip访问
	local stratum 10        #修改29行
.....
===========================
systemctl restart chronyd  #重启服务

#node1 node2 node3    #三个节点服务器都要和客户端同步时间  测试中方便同步   实际应连公共的NTP服务器  保持时间同步(时间差距过大ceph会报错 默认0.05s)
yum -y install chrony
vim /etc/chrony.conf
===========================
server 192.168.4.10 iburst  #配置NTP服务器
============================
systemctl restart chronyd
chronyc sources -v   #查看下是否成功

......
^* client                       10   6    17     1  -1832ns[  -32us] +/-  161us
# ^*应该就成功了


#node1  
yum -y install ceph-deploy     #ceph-deploy脚本  帮忙配置ceph配置文件 启动服务的
#ceph-deploy --help      ceph-deploy mon --help  来获取帮助

mkdir ceph-cluster
cd ceph-cluster/     #进入工作目录
ceph-deploy new node1 node2 node3  #通过ceph-deploy脚本创建ceph集群配置,在当前目录下生成ceph.conf  生成UUID  所以在配置集群之后不能再生成了(UUID唯一 发送出去了 你又重新生成 UUID自然就对不上了)

ceph-deploy mon create-initial #拷贝当前目录的配置文件到所有节点的/etc/ceph/目录并启动monitors服务(开机自启)
#节点Ip 已经通过上一步 ceph-deploy new  xxx  写入到了ceph.conf配置文件中了

#特别提示   之前为什么要用node1发送密钥给节点服务器  就是为了ceph-deploy能够正常执行

#查看节点服务器服务情况 
#node1
systemctl status ceph-mon@node1
#node2
systemctl status ceph-mon@node2
#node3
systemctl status ceph-mon@node3
#贴个node3的结果[email protected] - Ceph cluster monitor daemon
   Loaded: loaded (/usr/lib/systemd/system/[email protected]; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-12-28 03:37:02 EST; 9min ago
 Main PID: 11961 (ceph-mon)
   CGroup: /system.slice/system-ceph\x2dmon.slice/[email protected]
           └─11961 /usr/bin/ceph-mon -f --cluster ceph --id node3 --setuser ceph --setgroup ceph

Dec 28 03:37:02 node3 systemd[1]: Started Ceph cluster monitor daemon.
Dec 28 03:37:02 node3 systemd[1]: Starting Ceph cluster monitor daemon...
Dec 28 03:37:03 node3 ceph-mon[11961]: starting mon.node3 rank 1 at 192.168.4.200:6789/0 mon_data /var/lib/ceph/mon/ceph-node3 fsid 83f5c0eb-3a00-4b8...675b3368fd
Hint: Some lines were ellipsized, use -l to show in full.
#也可以使用start restart stopp status 启动重启关闭   但是30分钟只能启动3次超过会报错
#StartLimitInterval=30min     StartLimitBurst=3
#上面两个参数决定了服务30分钟只能启3次  定义在/usr/lib/systemd/system/[email protected]里面
#修改了上面那个文件 需要执行systemctl daemon-reload重新加载配置


#node1 查看集群状态    也可以在node2 node3上查询
ceph -s
    cluster 83f5c0eb-3a00-4b83-96ac-5c675b3368fd
     health HEALTH_ERR               #集群失败了HEALTH_ERR
            64 pgs are stuck inactive for more than 300 seconds
            64 pgs stuck inactive
            no osds
     monmap e1: 3 mons at {node1=192.168.4.5:6789/0,node2=192.168.4.100:6789/0,node3=192.168.4.200:6789/0}
            election epoch 6, quorum 0,1,2 node1,node2,node3
     osdmap e1: 0 osds: 0 up, 0 in
            flags sortbitwise
      pgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects
            0 kB used, 0 kB / 0 kB avail    #共享盘为0KB 没有东西共享
                  64 creating

#还缺少OSD提供的共享磁盘

#下面开始在node1 node2 node3创建OSD 前置准备添加的40G硬盘
#node1
ceph-deploy disk zap node1:sdb node1:sdc #初始化磁盘 将磁盘分区格式设置为GPT模式(这条命令没加 但是脚本里面默认是GPT)
ceph-deploy disk zap node2:sdb node2:sdc #可以在node1上执行 脚本通过ssh方式操作node2
ceph-deploy disk zap node3:sdb node3:sdc #同上 操作node3
#zap  清除参数

#上面完成分区表  现在开始分区  格式化磁盘 挂载磁盘,启动osd服务共享磁盘   
ceph-deploy osd create node1:sdb node1:sdc node2:sdb node2:sdbc node3:sdb node3:sdc

df -Th   #查看挂载情况
.....
/dev/sdb1               xfs        15G   35M   15G   1% /var/lib/ceph/osd/ceph-0
/dev/sdc1               xfs        15G   34M   15G   1% /var/lib/ceph/osd/ceph-1
#可以看见有15G被当成共享磁盘挂载了     因为5G(固定)被用来作为Journal日志缓存 剩余空间为数据盘

ceph -s   
ceph osd tree  #两种命令来查看情况 下面这个可以看清楚osd谁的
#一般可以查看到health HEALTH_OK    如果HEALTH_WARN可以等等再查 或者检查下NTP服务
总结
  1. 先用ceph安装光盘文件在节点服务器上(node1~3)安装ceph-mon ceph-osd ceph-mds ceph-radosgw 四个包 mon监控包 osd存储数据包 mds元数据服务包 radosgwRADOS网关包
  2. 因为ceph集群需要时间误差在0.05秒以内 所以配置了NTP服务
  3. 在node1中安装ceph-deploy工具 ceph-deploy脚本需要ssh执行 所以需要发送密钥给所有节点服务器
  4. ceph-deploy new 主机名… (域名需要和个节点主机名对应上 所以需要在/etc/hosts写上对应解析 并写每个节点服务器都要设置)来生成ceph.conf配置文件
  5. ceph-deploy mon create-initial 命令读取ceph.conf配置文件来获取所有节点信息 拷贝当前目录的ceph.conf到所有节点的/etc/ceph/目录下并启动mon服务 所以UUID就固定了(并且发送出去了) 再生成配置文件就会出错(节点之间对不上)
  6. ceph-deploy disk zap 主机名:磁盘名 命令来初始化清空磁盘数据 默认设置为GPT格式
  7. ceph-deploy osd create 主机名:磁盘名 命令来创建分区 格式化 挂载 启动osd服务共享磁盘
  8. df -Th 验证是否已经挂载共享磁盘 ceph -s 查看集群状态 ceph osd tree 查看osd分别情况

你可能感兴趣的:(Linux,ceph)