Ceph块设备,也称为RADOS块设备(简称RBD),是一种基于RADOS存储系统支持超配(thin-provisioned)、可 伸缩的条带化数据存储系统,它通过librbd库与OSD进行交互。RBD为KVM等虚拟化技术和云OS(如OpenStack和 CloudStack)提供高性能和无限可扩展性的存储后端,这些系统依赖于libvirt和QEMU实用程序与RBD进行集成。 客户端基于librbd库即可将RADOS存储集群用作块设备,不过,用于rbd的存储池需要事先启用rbd功能并进行初始 化。
# 创建存储池 [cephadm@xiaomao ceph-cluster]$ ceph osd pool create rbdpool 64 64 pool 'rbdpool' created # 启用rbd的功能 [cephadm@xiaomao ceph-cluster]$ ceph osd pool application enable rbdpool rbd # 下面是输出结果 enabled application 'rbd' on pool 'rbdpool' #初始化为rbd存储池 [cephadm@xiaomao ceph-cluster]$ rbd pool init -p rbdpool不过,rbd存储池并不能直接用于块设备,而是需要事先在其中按需创建映像(image),并把映像文件作为块设备 使用。rbd命令可用于创建、查看及删除块设备相在的映像(image),以及克隆映像、创建快照、将映像回滚到快 照和查看快照等管理操作。
# 存储池名称/存储池名称 [cephadm@xiaomao ceph-cluster]$ rbd create --size 2G rbdpool/mying #查看镜像文件是否创建成功 [cephadm@xiaomao ceph-cluster]$ rbd ls -p rbdpool mying #查看镜像的详细信息 [cephadm@xiaomao ceph-cluster]$ rbd info rbdpool/mying rbd image 'mying': size 2 GiB in 512 objects order 22 (4 MiB objects) snapshot_count: 0 id: 11a55ab72319 block_name_prefix: rbd_data.11a55ab72319 format: 2 features: layering, exclusive-lock, object-map, fast-diff, deep-flatten op_features: flags: create_timestamp: Fri Jul 3 20:58:06 2020 access_timestamp: Fri Jul 3 20:58:06 2020 modify_timestamp: Fri Jul 3 20:58:06 2020RGW并非必须的接口,仅在需要用到与S3和Swift兼容的RESTful接口时才需要部署RGW实例
[cephadm@xiaomao ceph-cluster]$ ceph-deploy rgw create xiaomao1默认情况下,RGW实例监听于TCP协议的7480端口,需要算定时,可以通过在运行RGW的节点上编辑其主配置 文件ceph.conf进行修改,相关参数如下所示:
[client] rgw_frontends = "civetweb port=8080" #重启服务生效 [root@xiaomao1 ~]# systemctl restart ceph-radosgw@rgw.xiaomao1RGW会在rados集群上生成包括如下存储池的一系列存储池
[cephadm@xiaomao ceph-cluster]$ ceph osd pool ls .rgw.root default.rgw.control default.rgw.meta default.rgw.logRGW提供的是REST接口,客户端通过http与其进行交互,完成数据的增删改查等管理操作
CephFS需要至少运行一个元数据服务器(MDS)守护进程(ceph-mds),此进程管理与CephFS上存储的文件相关 的元数据,并协调对Ceph存储集群的访问。因此,若要使用CephFS接口,需要在存储集群中至少部署一个MDS实 例
[cephadm@xiaomao ceph-cluster]$ ceph-deploy mds create xiaomao2查看MDS的相关状态可以发现,刚添加的MDS处于Standby模式:
[cephadm@xiaomao ceph-cluster]$ ceph mds stat 1 up:standby使用CephFS之前需要事先于集群中创建一个文件系统,并为其分别指定元数据和数据相关的存储池。下面创建一个 名为cephfs的文件系统用于测试,它使用cephfs-metadata为元数据存储池,使用cephfs-data为数据存储池:
# 分别是pg和pgp [cephadm@xiaomao ceph-cluster]$ ceph osd pool create cephfs-metadata 64 64 pool 'cephfs-metadata' created [cephadm@xiaomao ceph-cluster]$ ceph osd pool create cephfs-data 64 64 pool 'cephfs-data' created #初始化名为cephfs文件系统 激活 [cephadm@xiaomao ceph-cluster]$ ceph fs new cephfs cephfs-metadata cephfs-data new fs with metadata pool 7 and data pool 8此时,MDS的状态已经发生了改变:
[cephadm@xiaomao ceph-cluster]$ ceph mds stat cephfs:1 {0=xiaomao2=up:active}命令:ceph -s 输出信息: 1、集群ID 2、集群运行状况 3、监视器地图版本号和监视器仲裁的状态 4、OSD地图版本号和OSD的状态 5、归置组地图版本 6、归置组和存储池数量 7、所存储数据理论上的数量和所存储对象的数量(比如800G的OSD,三副本数的话,要除以3,实际能用的就260G左右) 8、所存储数量的总量
命令:ceph df 输出两端内容:STORAGE和POOLS STORAGE:存储量概览 POOLS:存储池列表和每个存储池的理论用量,但不反映副本、克隆数据或快照 STORAGE段: 1、SIZE:集群的整体存储容量 2、AVAIL:集群中可以使用的可用空间容量 3、RAW USED:已使用的原始存储量 4、%RAW USED:已用的原始存储量百分比
#显示监视器信息 [cephadm@xiaomao ceph-cluster]$ ceph mon stat e1: 1 mons at {xiaomao1=[v2:192.168.146.134:3300/0,v1:192.168.146.134:6789/0]}, election epoch 3, leader 0 xiaomao1, quorum 0 xiaomao1客户端挂载CephFS的两种方式 1、内核文件系统:ceph,libcephfs 2、用户空间文件系统(FUSE):libcephfs
xiaomao5作为模拟客户端
#拷贝Key到客户端主机 [cephadm@xiaomao ceph-cluster]$ scp fsclient.key root@xiaomao5:/etc/ceph/如果没有就安装这个ceph-common
#客户端主机要有ceph的配置 [root@xiaomao5 ~]# ll /etc/ceph/ total 16 -rw-r-----+ 1 root root 151 Jul 3 17:36 ceph.client.admin.keyring -rw-r--r--. 1 root root 235 Jul 3 18:17 ceph.conf -rw-r--r--. 1 root root 40 Jul 4 10:57 fsclient.key -rw-r--r--. 1 root root 92 Jun 26 02:00 rbdmap满足上面两个条件才能开始挂载
元数据分区 1、文件元数据的工作负载通常是一类小而密集的IO请求,因此很难实现类似数据读写IO那样的扩展方式 2、分布式文件系统业界提供了将名称空间分割治理的解决方案,通过将文件系统根树及其热点子树分别 部署于不同的元数据服务器进行负载均衡,从而赋予了元数据存储线性扩展的可能
#添加多个mds [cephadm@xiaomao ceph-cluster]$ ceph-deploy mds create xiaomao2 xiaomao4 xiaomao1 #查看添加情况 [cephadm@xiaomao ceph-cluster]$ ceph fs status cephfs - 1 clients ====== +------+--------+----------+---------------+-------+-------+ | Rank | State | MDS | Activity | dns | inos | +------+--------+----------+---------------+-------+-------+ | 0 | active | xiaomao2 | Reqs: 0 /s | 2443 | 2446 | +------+--------+----------+---------------+-------+-------+ +-----------------+----------+-------+-------+ | Pool | type | used | avail | +-----------------+----------+-------+-------+ | cephfs-metadata | metadata | 31.3M | 144G | | cephfs-data | data | 388M | 144G | +-----------------+----------+-------+-------+ +-------------+ | Standby MDS | +-------------+ | xiaomao4 | | xiaomao1 | +-------------+注意:1、仅当存在某个备用守护进程可供新的级别使用,文件系统中的实际级别数才会增加; 2、多活MDS的场景依然要求存在备用的冗余主机以实现服务HA,因此max_mds的值总是应该比实际可用的MDS数量至少小1;
#cephfs文件系统名称 [cephadm@xiaomao ceph-cluster]$ ceph fs set cephfs max_mds 2 [cephadm@xiaomao ceph-cluster]$ ceph fs status cephfs - 1 clients ====== +------+--------+----------+---------------+-------+-------+ | Rank | State | MDS | Activity | dns | inos | +------+--------+----------+---------------+-------+-------+ | 0 | active | xiaomao2 | Reqs: 0 /s | 2443 | 2446 | | 1 | active | xiaomao4 | Reqs: 0 /s | 10 | 13 | +------+--------+----------+---------------+-------+-------+ +-----------------+----------+-------+-------+ | Pool | type | used | avail | +-----------------+----------+-------+-------+ | cephfs-metadata | metadata | 32.4M | 144G | | cephfs-data | data | 388M | 144G | +-----------------+----------+-------+-------+ +-------------+ | Standby MDS | +-------------+ | xiaomao1 | +-------------+每个CephFS都会有一个易读的文件系统名称和一个称为FSCID标识符ID,并且每个CephFS默认情况下都只配置一个Active MDS守护进程
1、一个MDS集群中可处于Active状态的MDS数量的上限由max_mds参数配置,它控制着可用的rank数量,默认值为1 2、 rank是指CephFS上可同时处于Active状态的MDS守护进程的可用编号,其范围从0到max_mds-1 3、一个rank编号意味着一个可承载CephFS层级文件系统目录子树 目录子树元数据管理功能的Active状态的ceph-mds守护进程编制,max_mds的值为1时意味着仅有一个0号rank可用 4、刚启动的ceph-mds守护进程没有接管任何rank,它随后由MON按需进行分配 5、一个ceph-mds一次仅可占据一个rank,并且在守护进程终止时将其释放; 一个rank可以处于下列三种状态中的某一种: 1、 Up:rank已经由某个ceph-mds守护进程接管 2、Failed:rank未被任何ceph-mds守护进程接管 3、Damaged:rank处于损坏状态,其元数据处于崩溃或丢失状态;在管理员修复问题并对其运行 “ceph mds repaired”命令之前,处于Damaged状态的rank不能分配给其它任何MDS守护进程
出于冗余的目的,每个CephFS上都应该配置一定数量Standby状态的ceph-mds守护进程等着接替失效的rank,CephFS提供了四个选项用于控制Standby状态的MDS守护进程如何工作:
1、mds_standby_replay:布尔型值,true表示当前MDS守护进程将持续读取某个特定的Up状态的rank的元数据日志,从而持有相关rank的元数据缓存,并在此rank失效时加速故障切换:
一个Up状态的rank仅能拥有一个replay守护进程,多出的会被自动降级为正常的非replay型MDS
2、mds_standby_for_name:设置当前MDS进程仅备用于指定名称的rank; 3、mds_standby_for_rank:设置当前MDS进程仅备用于指定的rank,它不会接替任何其它失效的rank;不过,在有着多个CephFS的场景中,可联合使用下面的参数来指定为哪个文件系统的rank进行冗余; 4、mds_standby_for_fscid:联合mds_standby_for_rank参数的值协同生效;
a、同时设置了mds_standby_for_rank:备用于指定fscid的指定rank; b、未设置mds_standby_for_rank时:备用于指定fscid的任意rank;
#设置备用的mds #xiaomao1是xiaomao2的备机 [cephadm@xiaomao ceph-cluster]$ vim ceph.conf [mds.xiaomao1] mds_standby_for_name = xiaomao2 mds_standby_replay = true #修改配置文件后推送到各个节点 [cephadm@xiaomao ceph-cluster]$ ceph-deploy --overwrite-conf config push xiaomao xiaomao1 xiaomao2 xiaomao4 xiaomao5 #重启mds服务 [root@xiaomao2 ~]# systemctl restart ceph-mds@xiaomao2.service [root@xiaomao1 ~]# systemctl restart ceph-mds@xiaomao1.service [root@xiaomao4 ~]# systemctl restart ceph-mds@xiaomao2.service #把xiaomao2的mds服务停掉,看备机会不会自动接管 [root@xiaomao2 ~]# systemctl stop ceph-mds@xiaomao2.service #查看mds激活状态 [cephadm@xiaomao ceph-cluster]$ ceph fs status cephfs - 1 clients ====== +------+--------+----------+---------------+-------+-------+ | Rank | State | MDS | Activity | dns | inos | +------+--------+----------+---------------+-------+-------+ | 0 | active | xiaomao1 | Reqs: 0 /s | 2443 | 2446 | | 1 | active | xiaomao4 | Reqs: 0 /s | 10 | 13 | +------+--------+----------+---------------+-------+-------+ +-----------------+----------+-------+-------+ | Pool | type | used | avail | +-----------------+----------+-------+-------+ | cephfs-metadata | metadata | 33.9M | 144G | | cephfs-data | data | 388M | 144G | +-----------------+----------+-------+-------+ +-------------+ | Standby MDS | +-------------+ +-------------+第一种做法是要自建https证书
#创建自建名证书 [cephadm@xiaomao ceph-cluster]$ sudo ceph dashboard create-self-signed-cert Self-signed certificate created #为仪表板创建用户 #ceph dashboard ac-user-create 用户名 密码 [cephadm@xiaomao ceph-cluster]$ ceph dashboard ac-user-create xiaomao admin #查看访问的地址 [cephadm@xiaomao ceph-cluster]$ ceph mgr services { "dashboard": "https://xiaomao1:8443/" }第二种做法
#要是使用http协议,需要关闭ssl功能 [cephadm@xiaomao ceph-cluster]$ ceph config set mgr mgr/dashboard/ssl false #为每个mgr实例配置监听的地址和端口 [cephadm@xiaomao ceph-cluster]$ ceph config set mgr mgr/dashboard/xiaomao1/server_addr 192.168.146.134 #端口 [cephadm@xiaomao ceph-cluster]$ ceph config set mgr mgr/dashboard/xiaomao1/server_port 8080 #确认配置结果 [cephadm@xiaomao ceph-cluster]$ ceph mgr services { "dashboard": "http://xiaomao1:8080/" }访问前要做好windows下的hosts文件解析
#访问链接 http://xiaomao1:8080/ #配置admin用户的访问密码 [cephadm@xiaomao ceph-cluster]$ ceph dashboard set-login-credentials admin xiaomao1 #设置普通用户 #ceph dashboard ac-user-create 用户名 密码 [cephadm@xiaomao ceph-cluster]$ ceph dashboard ac-user-create xiaomao admin
Prometheus是一套开源的系统监控报警框架,它启发于Google的borgmon监控系统,由工作在SoundCloud的google前员工在2012年创建,作为社区开源项目进行开发,并于2015年正式发布,2016年,Prometheus正式加入Cloud Native Computing Foundation,成为受欢迎度仅次于Kubernetes的项目
1、强大的多维度数据模型:
1、时间序列数据通过metric名和键值对来区分 2、所有的metrics都可以设置任意的多维标签 3、数据模型更随意,不需要刻意设置以点分隔的字符串 4、可以对数据模型进行聚合,切割和切片操作 5、支持双精度浮点类型,标签可以设为全unicode
2、灵活而强大的查询语句:在同一个查询语句,可以对多个metrics进行乘法、加法、连接、取分数位等操作 3、易于管理:Prometheus server是一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储 4、高效:平均每个采样点仅占3.5bytes,且一个Prometheus server可以处理百万的metrics 5、使用pull模式采集时间序列数据,这样不仅有利于本机测试而且可以避免有问题的服务器推送坏的metrics 6、可以采用push gateway的方式把时间序列数据推送至Prometheus server端 7、可以通过服务发现或者静态配置去获取监控的targets 8、有多种可视化图形界面 9、易于伸缩
需要指出的是,由于数据采集可能会有丢失,所以Prometheus不适用对采集数据要100%准确的情形,但如果用于记录时间序列数据,Prometheus具有很大的查询优势,此外,Prometheus适用于微服务的体系架构
Prometheus生态圈中包含了多个组件,其中许多组件是可选的: 1、Prometheus Server:用于收集和存储时间序列数据 2、Cllent Library:客户端库,为需要监控的服务生成相应的metrics并暴露给Prometheus server。当 Prometheus server来pull时,直接返回实时状态的metrics 3、Push Gateway:主要用于短期的jobs,由于这类jobs存在时间比较短,可能在Prometheus来pull之前就消失 了。为此,这次jobs可以直接向prometheus server端推送它们的metrics。这种方式主要用于服务层面的metrics,对于机器层面的metrices,需要使用node exporter 4、Exporters:用于暴露已有的第三方服务的metrics给Prometheus 5、Alertmanager是一个独立的告警模块,接收Prometheus等客户端发来的警报,之后通过分组、删除重复等处理,并将它们通过路由发送给正确的接收器;告警方式可以按照不同的规则发送给不同的模块负责人,Alertmanager支持Email, Slack,等告警方式, 也可以通过webhook接入钉钉等国内IM工具 从上图可以看出,Prometheus的主要模块包括:Prometheus server,exporters,Pushgateway,PromQL,Alertmanager以及图形界面
大概的工作流程: 1、Prometheus server定期从配置好的jobs或者exporters中拉metrics,或者接收来自Pushgateway发过来 的metrics 或者从其他的Prometheus server中拉metrics 2、Prometheus server在本地存储收集到的metrics,并运行已定义好的alert.rules,记录新的时间序列或者向Alertmanager推送警报 3、Alertmanager根据配置文件,对接收到的警报进行处理,发出告警 4、在图形界面中,可视化采集数据
访问链接:http://192.168.146.133:9090/graph
监控服务器CPU、内存、磁盘、I/O等信息,首先需要安装node_exporter。node_exporter的作用是用于机器系统数据收集
#下载源码包 [root@xiaomao1 ~]# wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz #解压源码包 [root@xiaomao1 ~]# tar xf node_exporter-0.17.0.linux-amd64.tar.gz -C /usr/local/ #创建软链接 [root@xiaomao1 ~]# ln -sv /usr/local/node_exporter-0.17.0.linux-amd64/ /usr/local/node_exporter ‘/usr/local/node_exporter’ -> ‘/usr/local/node_exporter-0.17.0.linux-amd64/’ #创建运⾏Prometheus Server进程的系统⽤⼾,并为其创建家⽬录/var/lib/prometheus作为数据存储⽬录 [root@xiaomao1 ~]# useradd -r -m -d /var/lib/prometheus prometheus #创建启动脚本 [root@xiaomao1 ~]# vim /usr/lib/systemd/system/node_exporter.service [root@xiaomao1 ~]# cat !$ cat /usr/lib/systemd/system/node_exporter.service [Unit] Description=Prometheus exporter for machine metrics, written in Go with pluggable metric collectors. Documentation=https://github.com/prometheus/node_exporter After=network.target [Service] EnvironmentFile=-/etc/sysconfig/node_exporter User=prometheus ExecStart=/usr/local/node_exporter/node_exporter \ $NODE_EXPORTER_OPTS Restart=on-failure StartLimitInterval=1 RestartSec=3 [Install] WantedBy=multi-user.target #启动服务 [root@xiaomao1 ~]# systemctl daemon-reload [root@xiaomao1 ~]# systemctl start node_exporter #查看端口是否启动 [root@xiaomao1 ~]# ss -ntl | grep 9100 LISTEN 0 128 :::9100 :::*Ceph Manager内置了众多模块,包括prometheus模块,⽤于直接输出Prometheus⻛格的指标数据。
#Prometheus模块默认监听于TCP协议的9283端⼝ [root@xiaomao prometheus]# su - cephadm [cephadm@xiaomao ~]$ ceph mgr module enable prometheus #在被监控机查看9283端口是否启动 [root@xiaomao1 ~]# ss -ntl | grep 9283 LISTEN 0 5 :::9283 :::* #修改配置文件抓取数据,监控ceph [root@xiaomao prometheus]# vim prometheus.yml #在文件最后添加 - job_name: 'ceph' static_configs: - targets: ['192.168.146.134:9283'] #重启服务 [root@xiaomao prometheus]# systemctl restart prometheus查看是否抓取到ceph的数据
初始用户名和密码均为admin,首次登录后会提示设置新的密码
模板编号查找地址https://grafana.com/grafana/dashboards
拷贝对应的编号