高性能
① Ceph摒弃了传统的集中式元数据寻址方案,采用crush算法, 数据分布均匀,并行度高
② 考虑了容灾域的隔离,能够实现哥类负载的副本放置规则,例如跨机房、机架感知等
③ 能够支持上千个存储节点的规模,支持TB到PB级的数据
高可用性
① 副本数可以灵活控制
② 支持故障域分隔,数据强一致性
③ 多种故障常见自动进行修复自愈
④ 没有单点故障,自动管理
① 去中心化
② 扩展灵活
③ 随着节点增加而线性增长
① 支持三种存储接口:块存储、文件存储、对象存储
② 支持自定义接口,支持多种语言驱动
客户端 clients
数据用户
元数据服务器 mds metadata server cluster
缓存和同步分布式元数据
对象存储集群 osd object storage cluster
将数据和元数据作为对象存储,执行其他关键职能
集群监视器 Cluster monitors
执行监视功能
① Object
由原生的API,而且兼容Swift的S3和API
② Block
支持精简配置、快照、克隆
③ file
posix接口,支持快照
Monitor(监控):monitor在集群中扮演管理者角色,负责响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD
当Ceph集群为2个副本,至少需要2个OSD才能达到健康状态
MGR:由于Monitor负载过大,采用MGR来辅助Monitor管理
OSD(存储):负责响应客户端请求返回具体数据的进程,一个ceph集群有很多OSD
OSD还能够存储数据、处理数据的复制、恢复、回填再均衡、并且通过检查其他的OSD的守护进程的心跳,向monitor提供给一些监控信息
MDS(元数据):CephFS服务依赖的元数据服务,元数据的内存缓存,为了加快元数据的访问
Object:Ceph最底层的存储单元是Object对象,每个Object包含元数据和原始数据
PG(Placement Groups),PG就是管理Object(对象)的容器
RADOS(Reliable Autonomic Distributed Object Store):RADOS在动态变化和异质结构的存储设备机群之上提供一种稳定、可扩展、高性能的单一逻辑对象(Object)存储接口和能够实现节点的自适应和自管理的存储系统
Libradio:
Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持
Crush
CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。
RGW
RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容。
CephFS
CephFS全称Ceph File System,是Ceph对外提供的文件系统服务
典型设备
FTP NFS服务器
主要功能
为了克服块存储文件无法共享的问题,所以有了文件存储,在服务器上架设FTP和NFS服务,就是文件存储
优缺点
优点:
造价低、随便一台机器就可以
方便文件共享
缺点
读写速率低
传输速率慢
使用场景
日志存储、有目录结构的文件存储等等
典型设备
磁盘阵列、硬盘
主要功能
主要功能是将裸磁盘空间映射给主机使用
优缺点
优点
通过RAID与LVM等手段,对数据提供了保护
多块廉价的硬盘组合起来,提高容量
多块磁盘组合出来的逻辑盘,提升读写效率
缺点
采用SAN架构组网时,光纤交换机造价成本高
主机之间无法共享数据
使用场景
docker容器、虚拟机磁盘存储分配
日志存储、文件存储等等
典型设备
内置大容量硬盘的分布式服务器(Swift,s3)
功能
多台服务器内置大容量硬盘,安装上对象存储管理软件,对外提供读写访问功能
优点
具备块存储的读写高速
具备文件存储的共享等特性
使用场景(适合更新变动较少的数据)
图片存储
视频存储
OpenStack多节点部署
注意,在部署Ceph之前,必须把和存储有关的数据清理干净(可在控制台删除),包括:
安装的实例
上传的镜像
cinder块
[root@ct ~]# systemctl stop iptables
在三个节点上部署本地源
上传openstack_rock2.tar.gz 到/opt目录中
解压上传的包
[root@ct ~]# tar zxvf openstack_rocky2.tar.gz -C /opt
[root@ct yum.repos.d]# yum clean all
[root@ct yum.repos.d]# yum makecache
[root@ct ~]# yum install python-setuptools -y
[root@ct ~]# yum -y install ceph
[root@ct ~]# mkdir -p /etc/ceph
[root@ct ~]# yum -y install ceph-deploy
[root@ct ~]# cd /etc/ceph/
[root@ct ceph]# ceph-deploy new ct c1 c2
......省略部分内容
[root@ct ceph]# more /etc/ceph/ceph.conf
[global]
fsid = b65b3c32-7d1e-4e5f-b2f6-24072373c333
mon_initial_members = ct, c1, c2
mon_host = 192.168.100.10,192.168.100.11,192.168.100.12
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
[root@ct ceph]# ceph-deploy mon create-initial
......省略部分内容
[root@ct ceph]# ls
ceph.bootstrap-mds.keyring ceph.conf
ceph.bootstrap-mgr.keyring ceph-deploy-ceph.log
ceph.bootstrap-osd.keyring ceph.mon.keyring
ceph.bootstrap-rgw.keyring rbdmap
ceph.client.admin.keyring
[root@ct ceph]# ceph-deploy osd create --data /dev/sdb ct
......省略部分内容
[root@ct ceph]# ceph-deploy osd create --data /dev/sdb c1
......省略部分内容
[root@ct ceph]# ceph-deploy osd create --data /dev/sdb c2
......省略部分内容
[root@ct ceph]# ceph-deploy admin ct c1 c2
[c2][DEBUG ] connected to host: c2
[c2][DEBUG ] detect platform information from remote host
[c2][DEBUG ] detect machine type
[c2][DEBUG ] write cluster configuration to /etc/ceph/{
cluster}.conf
...........省略部分内容
[root@ct ceph]# chmod +x ceph.client.admin.keyring
[root@c1 ceph]# chmod +x ceph.client.admin.keyring
[root@c2 ceph]# chmod +x ceph.client.admin.keyring
[root@ct ceph]# ceph-deploy mgr create ct c1 c2
[c2][INFO ] Running command: ceph --cluster ceph --name client.bootstrap-mgr --keyring /var/lib/ceph/bootstrap-mgr/ceph.keyring auth get-or-create mgr.c2 mon allow profile mgr osd allow * mds allow * -o /var/lib/ceph/mgr/ceph-c2/keyring
[c2][INFO ] Running command: systemctl enable ceph-mgr@c2
[c2][WARNIN] Created symlink from /etc/systemd/system/ceph-mgr.target.wants/[email protected] to /usr/lib/systemd/system/[email protected].
[c2][INFO ] Running command: systemctl start ceph-mgr@c2
[c2][INFO ] Running command: systemctl enable ceph.target
......省略部分内容
[root@ct ceph]# ceph -s
cluster:
id: b65b3c32-7d1e-4e5f-b2f6-24072373c333
health: HEALTH_OK
services:
mon: 3 daemons, quorum ct,c1,c2
mgr: ct(active), standbys: c2, c1
osd: 3 osds: 3 up, 3 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 3.0 TiB / 3.0 TiB avail
pgs:
[root@ct ceph]# ceph osd pool create volumes 64
pool 'volumes' created
[root@ct ceph]# ceph osd pool create vms 64
pool 'vms' created
[root@ct ceph]# ceph osd pool create images 64
pool 'images' created
[root@ct ceph]# ceph mon stat
e1: 3 mons at {
c1=192.168.100.11:6789/0,c2=192.168.100.12:6789/0,ct=192.168.100.10:6789/0}, election epoch 6, leader 0 ct, quorum 0,1,2 ct,c1,c2
[root@ct ceph]# ceph osd status
+----+------+-------+-------+--------+---------+--------+---------+-----------+
| id | host | used | avail | wr ops | wr data | rd ops | rd data | state |
+----+------+-------+-------+--------+---------+--------+---------+-----------+
| 0 | ct | 1026M | 1022G | 0 | 0 | 0 | 0 | exists,up |
| 1 | c1 | 1026M | 1022G | 0 | 0 | 0 | 0 | exists,up |
| 2 | c2 | 1026M | 1022G | 0 | 0 | 0 | 0 | exists,up |
+----+------+-------+-------+--------+---------+--------+---------+-----------+
[root@ct ceph]#
[root@ct ceph]# ceph mgr module enable dashboard
[root@ct ceph]# ceph dashboard create-self-signed-cert
Self-signed certificate created
[root@ct ceph]# ceph mgr services
{
"dashboard": "https://ct:8443/"
}
#123密码可以修改
[root@ct ceph]# ceph dashboard set-login-credentials admin 123
Username and password updated
[root@ct ceph]# ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children,allow rwx pool=volumes,allow rwx pool=vms,allow rx pool=images'
[client.cinder]
key = AQCawnRevBYQIBAAYySbtyd8+2NLnRhMlpdaCQ==
[root@ct ceph]# ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children,allow rwx pool=images'
[client.glance]
key = AQDGwnRetqs2ABAAvsCsf7ys93L82emAqjzVRQ==
[root@ct ~]# ceph auth get-or-create client.glance |tee /etc/ceph/ceph.client.glance.keyring
[client.glance]
key = AQDGwnRetqs2ABAAvsCsf7ys93L82emAqjzVRQ==
[root@ct ~]# chown glance.glance /etc/ceph/ceph.client.glance.keyring
[root@ct ~]# ceph auth get-or-create client.cinder | tee /etc/ceph/ceph.client.cinder.keyring
[client.cinder]
key = AQCawnRevBYQIBAAYySbtyd8+2NLnRhMlpdaCQ==
[root@ct ~]# chown cinder.cinder /etc/ceph/ceph.client.cinder.keyring
#由于计算节点需要将用户的client.cinder用户的密钥文件存储在libvirt中,所以需要执行如下操作
[root@ct ~]# ceph auth get-key client.cinder |ssh c1 tee client.cinder.key
AQCawnRevBYQIBAAYySbtyd8+2NLnRhMlpdaCQ==
[root@ct ~]# ceph auth get-key client.cinder |ssh c2 tee client.cinder.key
AQCawnRevBYQIBAAYySbtyd8+2NLnRhMlpdaCQ==
#在c1 和 c2两个节点查看是否收到
[root@c1 ceph]# ls
ceph.client.admin.keyring ceph.conf rbdmap tmpShIV0Z
[root@c2 ceph]# ls
ceph.client.admin.keyring ceph.conf rbdmap tmpOYNw82
[root@c1 ceph]# uuidgen
4a7e1428-c0ef-429a-8055-5ceb8baa1fbd
[root@c1 ceph]# cd /root
[root@c1 ~]# vi secret.xml
[root@c1 ~]# cat secret.xml
'no' private='no'>
4a7e1428-c0ef-429a-8055-5ceb8baa1fbd
'ceph'>
client.cinder secret
----》wq
[root@c1 ~]# virsh secret-define --file secret.xml
Secret 4a7e1428-c0ef-429a-8055-5ceb8baa1fbd created
[root@c1 ~]# virsh secret-set-value --secret 4a7e1428-c0ef-429a-8055-5ceb8baa1fbd --base64 $(cat client.cinder.key) && rm -rf client.cinder.key secret.xml
Secret value set
[root@c2 ceph]# cd /root
[root@c2 ~]# vi secret.xml
[root@c2 ~]# cat secret.xml
'no' private='no'>
4a7e1428-c0ef-429a-8055-5ceb8baa1fbd
'ceph'>
client.cinder secret
------》wq
[root@c2 ~]# virsh secret-define --file secret.xml
Secret 4a7e1428-c0ef-429a-8055-5ceb8baa1fbd created
[root@c2 ~]# virsh secret-set-value --secret 4a7e1428-c0ef-429a-8055-5ceb8baa1fbd --base64 $(cat client.cinder.key) && rm -rf client.cinder.key secret.xml
Secret value set
[root@ct ~]# ceph osd pool application enable vms mon
enabled application 'mon' on pool 'vms'
[root@ct ~]# ceph osd pool application enable images mon
enabled application 'mon' on pool 'images'
[root@ct ~]# ceph osd pool application enable volumes mon
enabled application 'mon' on pool 'volumes'
[root@ct ~]# cp /etc/glance/glance-api.conf /etc/glance/glance-api.conf.bak
[root@ct ceph]# vi /etc/glance/glance-api.conf
#2054行,修改rbd格式(存储类型)
原:stores=file,http,swift
修改:stores=rbd
#2108行 修改默认存储格式
原:default_store=file
修改:default_store=rbd
#2442行 注释镜像本地存储
#filesystem_store_datadir=/var/lib/glance/images/
#2605 取消注释
rbd_store_chunk_size = 8
#2626 取消注释
rbd_store_pool = images
#2645 取消注释,指定用户
原:rbd_store_user =
修改:rbd_store_user = glance
#2664 取消注释 ,确定Ceph路径如下
rbd_store_ceph_conf = /etc/ceph/ceph.conf
-----》wq
[root@ct ~]# source /root/keystonerc_admin
[root@ct ~(keystone_admin)]# openstack user list | grep glance
| 6122b6bddb9f41cebb9c69d6581f3513 | glance |
[root@ct ~(keystone_admin)]# systemctl restart openstack-glance-api
#查看镜像大小
[root@ct ~(keystone_admin)]# ceph df
GLOBAL:
SIZE AVAIL RAW USED %RAW USED
3.0 TiB 3.0 TiB 3.0 GiB 0.10
POOLS:
NAME ID USED %USED MAX AVAIL OBJECTS
volumes 1 0 B 0 972 GiB 0
vms 2 0 B 0 972 GiB 0
images 3 13 MiB 0 972 GiB 8
#13mib的镜像上传成功
#查看镜像
[root@ct ~(keystone_admin)]# rbd ls images
1e37a9ad-9eab-4e45-9bdc-a225ffb7c5c3
[root@ct ~(keystone_admin)]# ls /var/lib/glance/images
[root@ct ~(keystone_admin)]#
#为空是正常的
[root@ct ceph(keystone_admin)]# cp /etc/cinder/cinder.conf /etc/cinder/cinder.conf.bak
[root@ct ceph(keystone_admin)]# vi /etc/cinder/cinder.conf
#409 修改
原:enabled_backends=lvm
修改:enabled_backends=ceph
#5261~5267 注释掉
#[lvm]
#volume_backend_name=lvm
#volume_driver=cinder.volume.drivers.lvm.LVMVolumeDriver
#iscsi_ip_address=192.168.100.10
#iscsi_helper=lioadm
#volume_group=cinder-volumes
#volumes_dir=/var/lib/cinder/volumes
#在文末添加ceph段
default_volume_type= ceph
glance_api_version = 2
volume_driver = cinder.volume.drivers.rbd.RBDDriver
volume_backend_name = ceph
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_flatten_volume_from_snapshot = false
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1
rbd_user = cinder
rbd_secret_uuid = 4a7e1428-c0ef-429a-8055-5ceb8baa1fbd
#以上UUID使用的是之前的
[root@ct ~(keystone_admin)]# systemctl restart openstack-cinder-volume
[root@ct ~(keystone_admin)]#
root@ct ~(keystone_admin)]# cinder type-list
+--------------------------------------+-------+-------------+-----------+
| ID | Name | Description | Is_Public |
+--------------------------------------+-------+-------------+-----------+
| e518fc11-56c6-4b44-bed6-a1b7933063eb | iscsi | - | True |
+--------------------------------------+-------+-------------+-----------+
[root@ct ~(keystone_admin)]#
[root@ct ~(keystone_admin)]# cinder type-list
+--------------------------------------+-------+-------------+-----------+
| ID | Name | Description | Is_Public |
+--------------------------------------+-------+-------------+-----------+
| e518fc11-56c6-4b44-bed6-a1b7933063eb | iscsi | - | True |
+--------------------------------------+-------+-------------+-----------+
[root@ct ~(keystone_admin)]# cinder type-create ceph
+--------------------------------------+------+-------------+-----------+
| ID | Name | Description | Is_Public |
+--------------------------------------+------+-------------+-----------+
| 6c9242f1-5c57-4d37-b7b9-b7f9d9ab5ddd | ceph | - | True |
+--------------------------------------+------+-------------+-----------+
[root@ct ~(keystone_admin)]# ceph osd lspools
1 volumes
2 vms
3 images
[root@ct ~(keystone_admin)]# rbd ls volumes
volume-6f366040-a1e2-4933-85d4-c4271cede498
[root@ct ~(keystone_admin)]# systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
[root@ct ~(keystone_admin)]# systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service
[root@c1 ~]# cp /etc/nova/nova.conf /etc/nova/nova.conf.bak
[root@c1 ~]# cp /etc/nova/nova.conf /etc/nova/nova.conf.bak
② 修改配置文件(C1、C2节点)
仅展示C1节点
[root@c1 ~]# vi /etc/nova/nova.conf
#6932行 取消注释,添加硬盘缓存模式
原:#disk_cachemodes =
修改:disk_cachemodes ="network=writeback"
#7072行 取消注释,修改为rbd格式
原:#images_type=default
修改:images_type=rbd
#7096行 取消注释,修改为vms
原:#images_rbd_pool=rbd
修改:images_rbd_pool=vms
#7099行 取消注释、添加ceph的配置文件路径
原:#images_rbd_ceph_conf =
修改:images_rbd_ceph_conf = /etc/ceph/ceph.conf
#7256行 取消注释、添加cinder
原:#rbd_user=
修改:rbd_user=cinder
#7261行 取消注释、添加UUID
原:#rbd_secret_uuid=
修改:rbd_secret_uuid=4a7e1428-c0ef-429a-8055-5ceb8baa1fbd
#搜索live_migration(593行),在此行附近添加以下内容(是否启用热迁移)
live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED"
#7114 取消注释、添加unmap
原:#hw_disk_discard=
修改:hw_disk_discard=unmap
[root@c1 ~]# yum -y install libvirt
[root@c2 ~]# yum -y install libvirt
[root@c1 ~]# vi /etc/ceph/ceph.conf
#在行尾添加以下内容
[client]
rbd cache=true
rbd cache writethrough until flush=true
admin socket = /var/run/ceph/guests/$cluster-$type.$id.$pid.$cctid.asok
log file = /var/log/qemu/qemu-guest-$pid.log
rbd concurrent management ops = 20
---->wq
[root@c1 ~]# mkdir -p /var/run/ceph/guests/ /var/log/qemu/
[root@c1 ~]# chown 777 -R /var/run/ceph/guests/ /var/log/qemu/
[root@ct ~(keystone_admin)]# cd /etc/ceph/
[root@ct ceph(keystone_admin)]# scp ceph.client.cinder.keyring root@c1:/etc/ceph
ceph.client.cinder.keyring 100% 64 24.2KB/s 00:00
[root@ct ceph(keystone_admin)]# scp ceph.client.cinder.keyring root@c2:/etc/ceph
ceph.client.cinder.keyring 100% 64 27.1KB/s 00:00
[root@c1 ~]# systemctl restart libvirtd
[root@c1 ~]# systemctl enable libvirtd
[root@c1 ~]# systemctl restart openstack-nova-compute
以上,OpenStack----多节点部署Ceph文件系统实验完成~,之后可以根据需求创建实例进行测试