湖州做网站的,中国关于影院建设的网站,丽水市龙泉市网站建设公司,怎么做网页背景一、ceph
1.1、ceph概念
ceph是一个开源的#xff0c;用c语言写的分布式的存储系统。存储文件数据。
/dev/sdb
fdisk /dev/sdb
gdisk /dev/sdb
lvm 逻辑卷
可以扩容
raid 磁盘阵列
高可用
基于物理意义上的单机的存储系统。
分布式有多台物理磁盘组成一个集群…一、ceph
1.1、ceph概念
ceph是一个开源的用c语言写的分布式的存储系统。存储文件数据。
/dev/sdb
fdisk /dev/sdb
gdisk /dev/sdb
lvm 逻辑卷
可以扩容
raid 磁盘阵列
高可用
基于物理意义上的单机的存储系统。
分布式有多台物理磁盘组成一个集群在这个基础之上实现高可用扩展。
ceph集群 通过网络访问磁盘集群 1、远程访问
2、多个服务器组成的虚拟的硬盘
3、分布式存储 4、负载均衡和数据同步 1.2、ceph是一个统一的存储系统统一-----同时提供块设备存储文件系统存储和对象存储三种存续。
1.2.1、对象存储
对象存储就是键值存储通过接口指令get put del和其他的命令向对象存储上传或者下载数据。
把数据作为对象按照一定的逻辑和算法存储到不同的硬盘上可以是不同机器上的硬盘依靠网络来进行互相通信
优点
使用的是硬盘组不受目录系统的影响读写效率高。
集群的扩展性很强支持多副本存储。
可以之间通过URL访问文件。简单也好管理。
缺点
内容变动比较大文件不适合作为对象存储每一次变动都要重新上传。
静态图片等等不需要变动的数据。
1.2.2、文件系统存储 ceph-fs
ceph集群的存储看做是一个大的分区或者共享文件挂载到客户端的本地客户端可以在本地直接进行操作可以存储的数据类型也没有限制。
内核态和用户态
mount ----内核态 速度快读写快
ceph-fuse ----用户态 速度慢读写稍慢
优点
成本低随便的一台服务器都可以做
公司内部都会使用这种方式。
缺点
读写速度和传输速度相对比较慢本地使用不再此列
1.2.3、块存储RBD
rdb为kvm虚拟化和云服务openstack提供高性能和无线可扩展的存储后端。
磁盘映射raid和lvm提供磁盘空间多个主机上的raid或者lvm组成一个逻辑上的raid和lvm。
多块磁盘组成这种逻辑空间可以并行的执行读写操作io效率比较高。
缺点
对网络传输的要求比较高windows无法访问linux的RBD操作。
1.3、ceph的主要特点
1、统一存储对象、块、文件系统常见
2、crush算法算法来实现数据的寻址。数据完整性的校验和一致性。理论上可以支持上千个数据存储节点。
3、高扩展性 扩容方便可靠性比较强副本创建数据的时候可以对数据进行副本操作副本数据由管理定义。副本可以跨主机保存跨架构跨机构数跨据中心进行保存。
4、高性能因为是多副本读写的时候可以做到并行处理。
二、ceph的组件和作用
2.1、OSD
OSD ceph当中的osd的守护进程是集群的基础。
主要功能存储数据保存副本数据数据恢复平衡数据分布中在a国在b再做镜像
冗余和高可用至少要有3个OSD三个机器上的三个物理硬盘
2.2、Monitors
Monitors mon 守护进程监视ceph集群的状态维护ceph集群的健康OSD的状态也属于MON的监控范围。
ceph存储集群必须要有一个Monitors进程和两个OSD进程。
服务器的数量必须是奇数台。3-5
管理节点 mon(管理者)
osd硬盘组
osd硬盘组
2.3、MDS
MDS也是一个守护进程保存ceph文件系统的元数据。文件的权限所有者所在组修改时间等等在ceph集群当中的inode号
2.4、managers
managers也是作为守护进程运行跟踪集群的运行时间的指标和ceph集群的状态存储的利用率性能指标和系统的负载
2.5、RADOS
RADOS:分布式存储系统所有的存储功能都是基于RADOS实现的。高可用高性能也是基于RADOS实现的他是所有一切的底层也是整个ceph集群的核心。
RADOS由两部分组成OSD和Monitor
2.6、LIBRADOS
LIBRADOS这是一个动态库用来允许应用程序和RADOS系统进行交互。
通过端口进行通信。
三、存储的概念
3.1、存储的概念
存储数据和object的关系
对象块文件系统挂载都需要object存储的数据会被分成多个object分成之后每一个数据都有一个object id。
每个数据object的大小是可以调整的默认是4M
ceph的最小存储单位
3.2、object和pg的关系
object数量太多了在一个集群当中object的数量太多遍历和寻址都很慢于是引入pg
PG就是归置组placcment group 管理object
object通过CRUSH算法映射到PG当中pg相当于找组组告知组成员在哪一个pg里面可以包含多个object。
3.3、pg和osd之间的关系
pg也是CRUSH算法映射到osd当中去存储。如果有3个副本每个pg会映射到三个osd当中
三个osd A B C
pg-----------A
pg-----------B
pg-----------C
3.4、PG和PGP的关系
PG和PGP的关系
pgp是存放pg的排列组合。
3个osd
A(主) B C 副本数2 pgd1
[A B] C
PGD 2
[A B]
[A C]
8m
4m 1
4m 2
pg--------1 2
A B C
1 2
A 12
B 12
A(主) B C 副本数2 pgd2
A 12
B 12
C 12
AB
AC
3.5、存储池pool
存储池pool
ceph的集群进行逻辑划分设置ceph存储集群的权限副本数pg的数量和算法的规则。
pool是由管理员自定义相当于一个独立的空间。每个pool之间是独立的数据也是隔离的。
ceph60
60g
XY102 30g
XY103 30g
12m
为3份4m-----object
再分到PG组-----------pg组员由pgd的个数决定2
再做副本 2个副本 返回给客户 四、实验架构
4台
192.168.168.11 admin osd mon mgr192.168.168.12 osd mds mon mgr192.168.168.13 osd mds mon mgr192.168.168.21 client--------------------------------所有节点---------------------
#关闭所有点的防火墙和selinux
[roottest1 ~]# systemctl stop firewalld[roottest1 ~]# setenforce 0#添加主机映射关系
vim /etc/hosts
192.168.168.11 mysql1
192.168.168.12 mysql2
192.168.168.13 mysql3
192.168.168.21 test1#主节点生成密钥队
[roottest1 ~]# ssh-keygen
#一路回车即可#将密钥发送到每个从节点
[rootmysql1 ~]# ssh-copy-id 192.168.168.12[rootmysql1 ~]# ssh-copy-id 192.168.168.13[rootmysql1 ~]# ssh-copy-id 192.168.168.21#所有节点安装源
cat /etc/yum.repos.d/ceph.repo eof
[ceph]
nameceph
baseurlhttp://mirrors.163.com/ceph/rpm-luminous/el7/x86_64/
gpgcheck0
[ceph-noarch]
nameceph-noarch
baseurlhttp://mirrors.163.com/ceph/rpm-luminous/el7/noarch/
gpgcheck0
eofyum clean all yum makecache#主节点和从节点添加硬盘
alias scanecho - - - /sys/class/scsi_host/host0/scan;echo - - - /sys/class/scsi_host/host1/scan;echo - - - /sys/class/scsi_host/host2/scan
执行scan
lsblk#所有节点安装服务
yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs--------------------报错---------------------##需要epel源和阿里云源------------
方法1
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
方法2
[rootmysql1 yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-7.repovim epel.repo [epel]
nameExtra Packages for Enterprise Linux 7 - $basearch
#baseurlhttp://download.fedoraproject.org/pub/epel/7/$basearch
metalinkhttps://mirrors.fedoraproject.org/metalink?repoepel-7arch$basearch
failovermethodpriority
enabled1
gpgcheck1
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7[epel-debuginfo]
nameExtra Packages for Enterprise Linux 7 - $basearch - Debug
#baseurlhttp://download.fedoraproject.org/pub/epel/7/$basearch/debug
metalinkhttps://mirrors.fedoraproject.org/metalink?repoepel-debug-7arch$basearch
failovermethodpriority
enabled0
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck1[epel-source]
nameExtra Packages for Enterprise Linux 7 - $basearch - Source
#baseurlhttp://download.fedoraproject.org/pub/epel/7/SRPMS
metalinkhttps://mirrors.fedoraproject.org/metalink?repoepel-source-7arch$basearch
failovermethodpriority
enabled0
gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck13、[rootmysql1 yum.repos.d]# yum clean all yum makecache[rootmysql1 yum.repos.d]# ls
Centos-7.repo ceph.repo epel.repo所有节点安装yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs----------------------------------主节点操作------------------------------------------
cd /etc/ceph/[rootmysql1 ceph]#ceph-deploy new mysql1 mysql2 mysql3yesyes设置副本数[rootmysql1 ceph]# vim ceph.conf osd_pool_default_size 2[rootmysql1 ceph]# ceph-deploy mon create-initial[rootmysql1 ceph]# ceph -scluster:id: 8e2e4afa-b7b5-44f0-b0f6-c39db089a842health: HEALTH_OKservices:mon: 3 daemons, quorum mysql1,mysql2,mysql3mgr: no daemons activeosd: 0 osds: 0 up, 0 indata:pools: 0 pools, 0 pgsobjects: 0 objects, 0Busage: 0B used, 0B / 0B availpgs: 三个节点添加硬盘 alias scanecho - - - /sys/class/scsi_host/host0/scan;echo - - - /sys/class/scsi_host/host1/scan;echo - - - /sys/class/scsi_host/host2/scan
scan
lsblk自动分区在主节点操作
[rootmysql1 ceph]# ceph-deploy disk zap mysql1 /dev/sdb[rootmysql1 ceph]# ceph-deploy disk zap mysql2 /dev/sdb[rootmysql1 ceph]# ceph-deploy disk zap mysql3 /dev/sdbmysql1 在主节点操作
[rootmysql1 ceph]# ceph-deploy osd create mysql1 --data /dev/sdb[rootmysql1 ceph]# ceph-deploy osd create mysql2 --data /dev/sdb[rootmysql1 ceph]# ceph-deploy osd create mysql3 --data /dev/sdb查看os的状态
[rootmysql1 ceph]#ceph-deploy osd list mysql1 mysql2 mysql3[rootmysql1 ceph]# ceph -scluster:id: f3407f51-b004-4587-bdbc-96de5d4cf994health: HEALTH_OKservices:mon: 3 daemons, quorum mysql1,mysql2,mysql3mgr: mysql1(active)osd: 3 osds: 3 up, 3 indata:pools: 0 pools, 0 pgsobjects: 0 objects, 0Busage: 3.01GiB used, 57.0GiB / 60.0GiB avail
创建管理
[rootmysql1 ceph]#ceph-deploy mgr create mysql1 mysql2 mysql3[rootmysql1 ceph]# ceph -s[rootmysql1 ceph]# ceph -scluster:id: f3407f51-b004-4587-bdbc-96de5d4cf994health: HEALTH_OKservices:mon: 3 daemons, quorum mysql1,mysql2,mysql3mgr: mysql1(active), standbys: mysql2, mysql3osd: 3 osds: 3 up, 3 indata:pools: 0 pools, 0 pgsobjects: 0 objects, 0Busage: 3.01GiB used, 57.0GiB / 60.0GiB availpgs: [rootmysql1 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传给从[rootmysql1 ceph]#ceph-deploy admin mysql1 mysql2 mysql3[rootmysql1 ceph]# ceph-deploy --overwrite-conf config push mysql1 mysql2 mysql3 ##报错使用此代码赋权读权限[rootmysql1 ceph]# chmod r ceph.client.admin.keyring[rootmysql2 ceph]# lsblk[rootmysql2 ceph]# chmod r ceph.client.admin.keyring[rootmysql3 ceph]# chmod r ceph.client.admin.keyring[rootmysql1 ceph]# ceph-deploy mds create mysql2 mysql3[rootmysql1 ceph]# ceph mds stat
, 2 up:standby准备工作就绪[rootmysql1 ceph]# ceph -scluster:id: f3407f51-b004-4587-bdbc-96de5d4cf994health: HEALTH_OKservices:mon: 3 daemons, quorum mysql1,mysql2,mysql3mgr: mysql1(active), standbys: mysql2, mysql3osd: 3 osds: 3 up, 3 indata:pools: 0 pools, 0 pgsobjects: 0 objects, 0Busage: 3.01GiB used, 57.0GiB / 60.0GiB avail--------------------------------以上ceph架构创建完成-----------------
------------------------------以下创建在线硬盘文件系统---------------------
文件系统 ceph-fs
第一个存储数据的pool
第二个存储元数据的pool
ceph osd pool create cephfs_date pg_num
少于5个osd的情况下pg的数量等于128个
5-10个osd 512个pg
10-50个osd 4096个pg
pg总数750个不能超过750个
128*3384
750-384366
存储元数据也要pg
128*2256
存储数据
osd*pg值
元数据
2*pg值
osd * pg值2 * pg 值 750
pg_num (osd*100)/副本数
设定pg的目的通过管理较少的pgceph获取数据分配管理数据的效率越高。
pg值越多数据分布的越多管理就越复杂。
存储数据[rootmysql1 ceph]# ceph osd pool create cephfs_date 128
pool cephfs_date created存储元数据[rootmysql1 ceph]# ceph osd pool create ceph_metadata 128
pool ceph_metadata created存储名称[rootmysql1 ceph]# ceph fs new cephfs ceph_metadata cephfs_date
new fs with metadata pool 2 and data pool 1[rootmysql1 ceph]# ceph fs ls
name: cephfs, metadata pool: ceph_metadata, data pools: [cephfs_date [rootmysql1 ceph]# ceph fs status cephfscephfs - 0 clients
---------------------------------------------------
| Rank | State | MDS | Activity | dns | inos |
---------------------------------------------------
| 0 | active | mysql3 | Reqs: 0 /s | 10 | 12 |
---------------------------------------------------
---------------------------------------
| Pool | type | used | avail |
---------------------------------------
| ceph_metadata | metadata | 2246 | 17.9G |
| cephfs_date | data | 0 | 17.9G |
----------------------------------------------------
| Standby MDS |
-------------
| mysql2 |
-------------
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)MDS监控元数据的进程
-----------------------------在线硬盘存储文件系统cephfs------------布置完成
client端
内核挂载
[rootmysql1 ceph]# cat ceph.client.admin.keyring
[client.admin]key AQB9FLNmNWJGJRAAOoobvCQrp7HffxC8PUj2Q
[roottest1 ceph]# mount -t ceph 192.168.168.11:6789:/ /data1 -o nameadmin,secretAQB9FLNmNWJGJRAAOoobvCQrp7HffxC8PUj2Q
[roottest1 ceph]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 38G 5.1G 32G 14% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sr0 4.3G 4.3G 0 100% /mnt
/dev/sda1 1014M 179M 836M 18% /boot
/dev/mapper/centos-home 19G 37M 19G 1% /home
tmpfs 378M 4.0K 378M 1% /run/user/42
tmpfs 378M 36K 378M 1% /run/user/0
192.168.168.11:6789:/ 18G 0 18G 0% /data1[roottest1 data]# dd if/dev/zero of/data1/test1 bs10M count10记录了100 的读入
记录了100 的写出
104857600字节(105 MB)已复制0.181681 秒577 MB/秒[rootmysql1 ceph]# ceph -scluster:id: f3407f51-b004-4587-bdbc-96de5d4cf994health: HEALTH_OKservices:mon: 3 daemons, quorum mysql1,mysql2,mysql3mgr: mysql1(active), standbys: mysql2, mysql3mds: cephfs-1/1/1 up {0mysql3up:active}, 1 up:standbyosd: 3 osds: 3 up, 3 indata:pools: 2 pools, 178 pgsobjects: 46 objects, 100MiBusage: 3.30GiB used, 56.7GiB / 60.0GiB availpgs: 178 activeclean[rootmysql1 ceph]# ceph fs status cephfscephfs - 1 clients
---------------------------------------------------
| Rank | State | MDS | Activity | dns | inos |
---------------------------------------------------
| 0 | active | mysql3 | Reqs: 0 /s | 11 | 13 |
---------------------------------------------------
---------------------------------------
| Pool | type | used | avail |
---------------------------------------
| ceph_metadata | metadata | 15.1k | 17.8G |
| cephfs_date | data | 100M | 17.8G |
----------------------------------------------------
| Standby MDS |
-------------
| mysql2 |
-------------
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)[roottest1 data]# dd if/dev/zero of/data1/test2 bs10M count10
记录了100 的读入
记录了100 的写出
104857600字节(105 MB)已复制0.15274 秒687 MB/秒[rootmysql1 ceph]# ceph fs status cephfscephfs - 1 clients
---------------------------------------------------
| Rank | State | MDS | Activity | dns | inos |
---------------------------------------------------
| 0 | active | mysql3 | Reqs: 0 /s | 12 | 14 |
---------------------------------------------------
---------------------------------------
| Pool | type | used | avail |
---------------------------------------
| ceph_metadata | metadata | 29.3k | 17.7G |
| cephfs_date | data | 200M | 17.7G |
----------------------------------------------------
| Standby MDS |
-------------
| mysql2 |
-------------
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)[roottest1 ceph]# umount 192.168.168.11:6789:/
[roottest1 ceph]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 38G 5.5G 32G 15% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sr0 4.3G 4.3G 0 100% /mnt
/dev/sda1 1014M 179M 836M 18% /boot
/dev/mapper/centos-home 19G 37M 19G 1% /home
tmpfs 378M 4.0K 378M 1% /run/user/42
tmpfs 378M 36K 378M 1% /run/user/0[rootmysql1 ceph]# ceph fs status cephfscephfs - 0 clients---------------------------------------------------
| Rank | State | MDS | Activity | dns | inos |
---------------------------------------------------
| 0 | active | mysql3 | Reqs: 0 /s | 12 | 14 |
---------------------------------------------------
---------------------------------------
| Pool | type | used | avail |
---------------------------------------
| ceph_metadata | metadata | 27.9k | 26.7G |
| cephfs_date | data | 200M | 26.7G |
----------------------------------------------------
| Standby MDS |
-------------
| mysql2 |
-------------
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)免密登录
[roottest1 data1]# yum -y install ceph-fuse[roottest1 data1]# scp root192.168.168.11:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
ceph.client.admin.keyring 100% 63 75.1KB/s 00:00
[roottest1 data1]# scp root192.168.168.11:/etc/ceph/ceph.conf /etc/ceph/
ceph.conf 100% 269 176.3KB/s 00:00 免密登录[roottest1 data1]# ceph-fuse -m 192.168.168.11:6789 /data3
2024-08-07 16:29:16.786668 7f685076c240 -1 init, newargv 0x55ba2451b260 newargc9
ceph-fuse[17245]: starting ceph client
ceph-fuse[17245]: starting fuse[roottest1 data1]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 38G 5.1G 32G 14% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sr0 4.3G 4.3G 0 100% /mnt
/dev/sda1 1014M 179M 836M 18% /boot
/dev/mapper/centos-home 19G 37M 19G 1% /home
tmpfs 378M 4.0K 378M 1% /run/user/42
tmpfs 378M 36K 378M 1% /run/user/0
192.168.168.11:6789:/ 18G 200M 18G 2% /data1
ceph-fuse 18G 200M 18G 2% /data3[rootmysql1 ceph]# ceph fs status cephfscephfs - 2 clients---------------------------------------------------
| Rank | State | MDS | Activity | dns | inos |
---------------------------------------------------
| 0 | active | mysql3 | Reqs: 0 /s | 12 | 14 |
---------------------------------------------------
---------------------------------------
| Pool | type | used | avail |
---------------------------------------
| ceph_metadata | metadata | 29.7k | 17.7G |
| cephfs_date | data | 200M | 17.7G |
----------------------------------------------------
| Standby MDS |
-------------
| mysql2 |
-------------
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)
同一个文件系统文件相同
[roottest1 data1]# touch 123
[roottest1 data1]# ls
123 test1 test2[roottest1 data1]# cd /data3
[roottest1 data3]# ls
123 test1 test2[roottest1 data3]# touch 234
[roottest1 data3]# ls
123 234 test1 test2
[roottest1 data3]# cd /data1
[roottest1 data1]# ls
123 234 test1 test2##使用统一文件系统数据同步
调整副本数可以vim ceph.confosd_pool_default_size2##查看文件系统的副本数量[rootmysql1 ceph]# ceph osd pool get cephfs_date size
size: 3 ##调整文件系统的副本数量[rootmysql1 ceph]# ceph osd pool get cephfs_date size
size: 3
[rootmysql1 ceph]# ceph osd pool set cephfs_date size 2
set pool 1 size to 2
[rootmysql1 ceph]# ceph fs status cephfscephfs - 2 clients---------------------------------------------------
| Rank | State | MDS | Activity | dns | inos |
---------------------------------------------------
| 0 | active | mysql3 | Reqs: 0 /s | 14 | 16 |
---------------------------------------------------
---------------------------------------
| Pool | type | used | avail |
---------------------------------------
| ceph_metadata | metadata | 38.7k | 17.8G |
| cephfs_date | data | 200M | 26.7G |
----------------------------------------------------
| Standby MDS |
-------------
| mysql2 |
-------------
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)五、ceph-test1-----作业
第一次
[rootmysql1 ceph]# ceph fs flag set enable_multiple true --yes-i-really-mean-it[rootmysql1 ceph]# ceph osd pool create ceph-test1_date 30
pool ceph-test1_date created[rootmysql1 ceph]# ceph osd pool create ceph_metadata1 30
pool ceph_metadata1 created[rootmysql1 ceph]# ceph fs new ceph-test1 ceph_metadata1 ceph-test1_date
new fs with metadata pool 4 and data pool 3[rootmysql1 ceph]# ceph fs ls
name: cephfs, metadata pool: ceph_metadata, data pools: [cephfs_date ]
name: ceph-test1, metadata pool: ceph_metadata1, data pools: [ceph-test1_date ][rootmysql1 ceph]# ceph fs status ceph-test1ceph-test1 - 0 clients---------------------------------------------------
| Rank | State | MDS | Activity | dns | inos |
---------------------------------------------------
| 0 | active | mysql2 | Reqs: 0 /s | 10 | 12 |
---------------------------------------------------
-----------------------------------------
| Pool | type | used | avail |
-----------------------------------------
| ceph_metadata1 | metadata | 2246 | 17.8G |
| ceph-test1_date | data | 0 | 17.8G |
------------------------------------------------------
| Standby MDS |
-------------
-------------
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)mount -t ceph 192.168.168.11:6789:/ /data5 -o nameadmin,secretAQB9FLNmNWJGJRAAOoobvCQrp7HffxC8PUj2Q,mds_namespaceceph-test1 [rootmysql1 ceph]# ceph fs status ceph-test1ceph-test1 - 1 clients---------------------------------------------------
| Rank | State | MDS | Activity | dns | inos |
---------------------------------------------------
| 0 | active | mysql2 | Reqs: 0 /s | 11 | 13 |
---------------------------------------------------
-----------------------------------------
| Pool | type | used | avail |
-----------------------------------------
| ceph_metadata1 | metadata | 15.2k | 17.6G |
| ceph-test1_date | data | 100M | 17.6G |
------------------------------------------------------
| Standby MDS |
-------------
-------------
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)mount -t ceph 192.168.118.61:6789:/ /data2 -o nameadmin,secretAQBa/LJmAn2OMxAA7EEZTaurchJK4uPyQNhfQ,mds_namespacecephfs2第二次
[rootmysql1 ceph]# ceph osd pool create ceph-test1_date 30
pool ceph-test1_date created[rootmysql1 ceph]# ceph osd pool create ceph-test1_metadata 30
pool ceph-test1_metadata created[rootmysql1 ceph]# ceph fs new ceph-test1 ceph-test1_metadata ceph-test1_date
Error EINVAL: Creation of multiple filesystems is disabled. To enable this experimental feature, use ceph fs flag set enable_multiple true[rootmysql1 ceph]# ceph fs new ceph-test1 ceph-test1_metadata ceph-test1_date
new fs with metadata pool 4 and data pool 3[rootmysql1 ceph]# ceph fs ls
name: cephfs, metadata pool: ceph_metadata, data pools: [cephfs_date ]
name: ceph-test1, metadata pool: ceph-test1_metadata, data pools: [ceph-test1_date ][rootmysql1 ceph]# ceph fs status ceph-test1ceph-test1 - 0 clients---------------------------------------------------
| Rank | State | MDS | Activity | dns | inos |
---------------------------------------------------
| 0 | active | mysql2 | Reqs: 0 /s | 10 | 12 |
---------------------------------------------------
---------------------------------------------
| Pool | type | used | avail |
---------------------------------------------
| ceph-test1_metadata | metadata | 2246 | 26.7G |
| ceph-test1_date | data | 0 | 26.7G |
----------------------------------------------------------
| Standby MDS |
-------------
-------------
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)[roottest1 ceph]# mount -t ceph 192.168.168.11:6789:/ /data -o nameadmin,secretAQBQibNmHYf2IRAAMpxFBtuJQcTX9iF9fNnjQ
[roottest1 ceph]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 38G 5.5G 32G 15% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sr0 4.3G 4.3G 0 100% /mnt
/dev/sda1 1014M 179M 836M 18% /boot
/dev/mapper/centos-home 19G 37M 19G 1% /home
tmpfs 378M 4.0K 378M 1% /run/user/42
tmpfs 378M 36K 378M 1% /run/user/0
192.168.168.11:6789:/ 27G 200M 27G 1% /data
[roottest1 ceph]# mount -t ceph 192.168.168.11:6789:/ /data1 -o nameadmin,secretAQBQibNmHYf2IRAAMpxFBtuJQcTX9iF9fNnjQ,mds_namespaceceph-test1
[roottest1 ceph]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 38G 5.5G 32G 15% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sr0 4.3G 4.3G 0 100% /mnt
/dev/sda1 1014M 179M 836M 18% /boot
/dev/mapper/centos-home 19G 37M 19G 1% /home
tmpfs 378M 4.0K 378M 1% /run/user/42
tmpfs 378M 36K 378M 1% /run/user/0
192.168.168.11:6789:/ 27G 200M 27G 1% /data
[roottest1 ceph]# 虽然只显示一个挂载点但是两个目录已经挂载[roottest1 data1]# dd if/dev/zero of/data1/test2 bs10M count10
记录了100 的读入
记录了100 的写出
104857600字节(105 MB)已复制0.0665461 秒1.6 GB/秒
[roottest1 data1]# dd if/dev/zero of/data1/test3 bs10M count10
记录了100 的读入
记录了100 的写出
104857600字节(105 MB)已复制0.062335 秒1.7 GB/秒
[roottest1 data1]# ls
test2 test3[rootmysql1 ceph]# ceph fs status ceph-test1ceph-test1 - 1 clients---------------------------------------------------
| Rank | State | MDS | Activity | dns | inos |
---------------------------------------------------
| 0 | active | mysql2 | Reqs: 0 /s | 12 | 14 |
---------------------------------------------------
---------------------------------------------
| Pool | type | used | avail |
---------------------------------------------
| ceph-test1_metadata | metadata | 31.2k | 26.5G |
| ceph-test1_date | data | 200M | 26.5G |
----------------------------------------------------------
| Standby MDS |
-------------
-------------
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)[roottest1 data]# ls
test1 test2[rootmysql1 ceph]# ceph fs status cephfscephfs - 1 clients---------------------------------------------------
| Rank | State | MDS | Activity | dns | inos |
---------------------------------------------------
| 0 | active | mysql3 | Reqs: 0 /s | 12 | 14 |
---------------------------------------------------
---------------------------------------
| Pool | type | used | avail |
---------------------------------------
| ceph_metadata | metadata | 29.4k | 26.5G |
| cephfs_date | data | 200M | 26.5G |
----------------------------------------------------
| Standby MDS |
-------------
-------------
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable) 什么是ceph
Ceph是一个开源的、统一的分布式存储系统设计初衷是提供较好的性能、可靠性和可扩展性。
其中“统一”是说Ceph可以一套存储系统同时提供块设备存储、文件系统存储和对象存储三种存储功能。Ceph项目最早起源于加州大学Santa Cruz分校的Sage Weil的博士论文所设计开发的新一代自由软件分布式文件系统
其设计目标是良好的可扩展性(PB级别以上)、高性能及高可靠性并随后贡献给开源社区。
在经过了数年的发展之后目前已得到众多云计算厂商的支持并被广泛应用。Ceph是一个开源的分布式文件系统。因为它还支持块存储、对象存储
所以很自然的被用做云计算框架openstack或cloudstack整个存储后端。
当然也可以单独作为存储例如部署一套集群作为对象存储、SAN存储、NAS存储等官网https://ceph.com/ceph支持的三种存储方式
1块存储RBD
RBD(RADOS Block Devices)即为块存储的一种RBD 通过 librbd 库与 OSD 进行交互
RBD 为 KVM 等虚拟化技术和云服务如 OpenStack 和 CloudStack提供高性能和无限可扩展性的存储后端
这些系统依赖于 libvirt 和 QEMU 实用程序与 RBD 进行集成
客户端基于 librbd 库 即可将 RADOS 存储集群用作块设备
不过用于 rbd 的存储池需要事先启用 rbd 功能并进行初始化。优点
使用磁盘映射如RAID/LVM的方式提供磁盘空间给主机使用进一步维护了数据的安全性
因为是多块磁盘组合而成的逻辑盘空间所以多块盘可以并行执行读写操作提升IO效率
很多大型企业或数据中心使用SAN架构组网数据传输速度和读写效率进一步得到提升缺点
如果采取FC_SAN的方式需要HBA光纤通道卡和光纤交换机成本较高
不利于不同操作系统主机间的数据共享例如Linux主机把盘给格式化为ext4格式
那么在Windows中对这个盘的操作使用就不太友好了或者无法操作2对象存储RGW
对象存储也就是键值存储通过其接口指令也就是简单GET、PUT、DEL和其他扩展指令
向存储服务上传下载数据等RGW 提供的是 REST 接口客户端通过 http 与其进行交互完成数据的增删改查等管理操作。
radosgw 用在需要使用 RESTful API 接口访问 ceph 数据的场合
因此在使用 RBD 即块存储得场合或者使用 cephFS 的场合可以不用启用 radosgw 功能。优点
后端使用大量硬盘组且不受复杂目录系统影响达到高水平的读写效率
集群可扩展性强且支持多副本存储保证数据安全性
通过URL直接访问存储文件简单易管理缺点
不适合存放内容变动性大的文件不然每次变动都要重新更新上传对象
适合放静态的图 片镜像等非结构性的文件
不太适合作为数据库存储数据使用
操作系统无法像常规磁盘一样安装或挂载对象存储3文件系统存储ceph-fs
Ceph文件系统CEPH FS是一个POSIX兼容的文件系统可以将ceph集群看做一个共享文件系统挂载到本地
使用Ceph的存储集群来存储其数据同时支持用户空间文件系统FUSE。
它可以像 NFS 或者 SAMBA 那样提供共享文件夹客户端通过挂载目录的方式使用 Ceph 提供的存储。在CEPH FS中与对象存储与块存储最大的不同就是在集群中增加了文件系统元数据服务节点MDS(Ceph Metadata Server)。
MDS也支持多台机器分布式的部署以实现系统的高可用性。
文件系统客户端需要安装对应的Linux内核模块Ceph FS Kernel Object或者Ceph FS FUSE组件。用户可以在块设备上创建xfs文件系统也可以创建ext4等其他文件系统。
Ceph集群实现了自己的文件系统来组织管理集群的存储空间
用户可以直接将Ceph集群的文件系统挂载到用户机上使用优点
成本低随便一台服务器都可以来搭建
方便于公司内部的文件共享内网云盘共享一些资料等等缺点
网络带宽影响读写效率慢传输速率稍低ceph的主要特点
统一存储
Ceph支持三种调用接口对象存储块存储文件系统挂载。
三种方式可以一同使用。在国内一些公司的云环境中
通常会采用ceph作为openstack的唯一后端存储来提升数据转发效率。
所以在开源存储软件中能够一统江湖。Crush算法
Crush算法是ceph的两大创新之一简单来说ceph摒弃了传统的集中式存储元数据寻址的方案
转而使用CRUSH算法完成数据的寻址操作。CRUSH在一致性哈希基础上很好的考虑了容灾域的隔离
能够实现各类负载的副本放置规则例如跨机房、机架感知等。Crush算法有相当强大的扩展性
理论上支持数千个存储节点。高扩展性
扩容方便、容量大。能够管理数千台服务器、EB级的容量。可靠性强
Ceph中的数据副本数量可以由管理员自行定义副本能够垮主机、机架、机房、数据中心存放。
所以安全可靠。存储节点可以自管理、自动修复。无单点故障容错性强。高性能
因为是多个副本因此在读写操作时候能够做到高度并行化。理论上节点越多
整个集群的IOPS和吞吐量越高。另外一点ceph客户端读写数据直接与存储设备(osd) 交互。ceph组件作用
OSDObject Storage Device
Ceph的OSDObject Storage Device守护进程。
主要功能包括存储数据、副本数据处理、数据恢复、数据回补、平衡数据分布
并将数据相关的一些监控信息提供给Ceph Moniter,以便Ceph Moniter来检查其他OSD的心跳状态。
一个Ceph OSD存储集群要求至少两个Ceph OSD,才能有效的保存两份数据。
注意这里的两个Ceph OSD是指运行在两台物理服务器上
并不是在一台物理服务器上运行两个Ceph OSD的守护进程。
通常冗余和高可用性至少需要3个Ceph OSD。Monitors
Ceph的Monitor守护进程负责监视Ceph集群维护Ceph集群的健康状态
同时维护着Ceph集群中的各种Map图包括监视器图、OSD 图、归置组 PG 图、和 CRUSH 图。还维护了monitor、OSD和PG的状态改变历史信息这些Map统称为Cluster Map
Cluster Map是RADOS的关键数据结构管理集群中的所有成员、关系、属性等信息以及数据的分发
比如当用户需要存储数据到Ceph集群时OSD需要先通过Monitor获取最新的Map图
然后根据Map图和object id等计算出数据最终存储的位置。
Ceph 存储集群至少需要一个 Ceph Monitor服务器数量必须是奇数 和两个 OSD 守护进程。
而运行 Ceph 文件系统客户端时则必须要有元数据服务器 Metadata Server 。MDS
Ceph的MDSMetadata Server守护进程主要保存的是Ceph文件系统的元数据。
注意对于Ceph的块设备和Ceph对象存储都不需要Ceph MDS守护进程。
Ceph MDS为基于POSIX文件系统的用户提供了一些基础命令的执行
比如ls、find等这样可以很大程度降低Ceph存储集群的压力。Managers
Ceph的ManagersCeph Manager守护进程ceph-mgr负责跟踪运行时间指标和Ceph群集的当前状态
包括存储利用率当前性能指标和系统负载。
Ceph Manager守护程序还托管基于python的插件来管理和公开Ceph集群信息
包括基于Web的仪表板和REST API。 通常至少有两名Manager需要高可用性。RADOS
Ceph的层是RADOSRADOS本身也是分布式存储系统CEPH所有的存储功能都是基于RADOS实现
Ceph的高可靠、高可拓展、高性能、高自动化都是由这一层来提供的
用户数据的存储最终也都是通过这一层来进行存储的RADOS可以说就是Ceph的核心。RADOS系统主要由两部分组成分别是OSD和Monitor。OSDObject StorageDevice提供存储资源。Monitor维护整个Ceph集群的全局状态。LIBRADOS
基于RADOS层的上一层是LIBRADOSLIBRADOS是一个库它允许应用程序通过访问该库来与RADOS系统进行交互
支持多种编程语言比如C、C、Python等。
Ceph的上层应用调用本机上的librados API
再由后者通过socket与RADOS集群中的其他节点通信并完成各种操作。ceph存储概念
存储数据和object的关系
无论使用哪种存储方式对象、块、挂载当用户要将数据存储到Ceph集群时
存储数据都会被分割成多个object每个object都有一个object id
每个object的大小是可以设置的默认是4MBobject可以看成是Ceph存储的最小存储单元。object与pg的关系
由于object的数量很多对象的size很小在一个大规模的集群中可能有几百到几千万个对象。
这么多对象光是遍历寻址速度都是很缓慢的为了解决这些问题
ceph引入了归置组Placcment Group即PG的概念用于管理object
每个object最后都会通过CRUSH算法计算映射到某个pg中一个pg可以包含多个object。pg与osd的关系
pg也需要通过CRUSH计算映射到osd中去存储如果是二副本的则每个pg都会映射到二个osd
比如[osd.1,osd.2]那么osd.1是存放该pg的主副本osd.2是存放该pg的从副本保证了数据的冗余。pg与pgp的关系
pg是用来存放object的pgp相当于是pg存放osd的一种排列组合我举个例子
比如有3个osdosd.1、osd.2和osd.3副本数是2如果pgp的数目为1
那么pg存放的osd组合就只有一种可能是[osd.1,osd.2]
那么所有的pg主从副本分别存放到osd.1和osd.2如果pgp设为2
那么其osd组合可以两种可能是[osd.1,osd.2]和[osd.1,osd.3]很像我们高中数学学过的排列组合存储池pool
存储池(pool)是对Ceph集群进行的逻辑划分主要设置其中存储对象的权限、备份数目、PG数以及CRUSH规则等属性。
Pool是管理员自定义的命名空间像其他的命名空间一样用来隔离对象与PG。
我们在调用API存储即使用对象存储时需要指定对象要存储进哪一个POOL中。除了隔离数据
我们也可以分别对不同的POOL设置不同的优化策略比如副本数、数据块及对象大小等。ceph存储数据的过程Ceph存储集群从客户端接收文件每个文件都会被客户端切分成一个或多个对象
然后将这些对象进行分组再根据一定的策略存储到集群的OSD节点中对象的分发需要经过两个阶段的计算才能得到存储该对象的OSD然后将对象存储到OSD中对应的位置。(1)对象到PG的映射逻辑集合。PG是系统向OSD节点分发数据的基本单位
相同PG里的对象将被分发到相同的OSD节点中(一个主OSD节点多个备份OSD节点)。
对象的PG是由对象ID号通过Hash算法结合其他一些修正参数得到的。(2)PG到相应的OSD的映射。RADOS系统利用相应的哈希算法根据系统当前的状态以及PG的ID号
将各个PG分发到OSD集群中。OSD集群是根据物理节点的容错区域(比如机架、机房等)来进行划分的。ceph存储流程正常IO流程
步骤
1、client 创建cluster handler。集群处理信息
2、client 读取配置文件。
3、client 连接上monitor获取集群map信息。
4、client 读写io 根据crushmap 算法请求对应的主osd数据节点。
5、主osd数据节点同时写入另外两个副本节点数据。
6、等待主节点以及另外两个副本节点写完数据状态。
7、主节点及副本节点写入状态都成功后返回给clientio写入完成。新主IO流程
如果新加入的OSD1取代了原有的OSD4成为 Primary OSD, 由于OSD1上未创建 PG ,
不存在数据那么 PG 上的 I/O 无法进行怎样工作的呢步骤
1、client连接monitor获取集群map信息。
2、同时新主osd1由于没有pg数据会主动上报monitor告知让osd2临时接替为主。
3、临时主osd2会把数据全量同步给新主osd1。
4、client IO读写直接连接临时主osd2进行读写。
5、osd2收到读写io同时写入另外两副本节点。
6、等待osd2以及另外两副本写入成功。
7、osd2三份数据都写入成功返回给client, 此时client io读写完毕。
8、如果osd1数据同步完毕临时主osd2会交出主角色。
9、osd1成为主节点osd2变成副本。ceph集群详解
ceph存储集群是所有ceph存储方式的基础。基于RADOSceph存储集群由3种类型的守护进程组成ceph osd守护进程osd将数据作为对象存储在存储节点上
ceph monitormon维护集群映射的主副本
ceph manager管理器守护进程
一个ceph存储集群可能包含数千个存储节点。一个最小的系统至少有一个Ceph monitor和两个ceph osd daemons用于数据复制Ceph 文件系统、Ceph 对象存储和 Ceph 块设备从 Ceph 存储集群读取数据并将数据写入到 Ceph 存储集群服务器 ip 角色
ceph01管理节点 192.168.233.10 admin、osd、mon、mgr
ceph02 192.168.233.20 osd、mds、mon、mgr
ceph03 192.168.233.30 osd、mds、mon、mgr
client 192.168.233.40 client#关闭所有点的防火墙和selinux
[roottest1 ~]# systemctl stop firewalld[roottest1 ~]# setenforce 0#添加主机映射关系
vim /etc/hosts
192.168.233.10 test1
192.168.233.20 test2
192.168.233.30 test3#主节点生成密钥队
[roottest1 ~]# ssh-keygen
#一路回车即可#将密钥发送到每个从节点
[roottest1 ~]# ssh-copy-id 192.168.233.20[roottest1 ~]# ssh-copy-id 192.168.233.30[roottest1 ~]# ssh-copy-id 192.168.233.40#所有节点安装源
cat /etc/yum.repos.d/ceph.repo eof
[ceph]
nameceph
baseurlhttp://mirrors.163.com/ceph/rpm-luminous/el7/x86_64/
gpgcheck0
[ceph-noarch]
nameceph-noarch
baseurlhttp://mirrors.163.com/ceph/rpm-luminous/el7/noarch/
gpgcheck0
eofyum clean all yum makecache#主节点和从节点添加硬盘
alias scanecho - - - /sys/class/scsi_host/host0/scan;echo - - - /sys/class/scsi_host/host1/scan;echo - - - /sys/class/scsi_host/host2/scan
执行scan#所有节点安装服务
yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs#配置集群
[roottest1 ceph]# cd /etc/ceph/[roottest1 ceph]# ceph-deploy new test1 test2 test3# 管理节点多个mon模式cd /etc/ceph/
ceph-deploy new test1 test2 test3
执行完毕后可以看到/etc/ceph目录中生成了三个文件
ceph.conf 为 ceph 配置文件ceph-deploy-ceph.log 为 ceph-deploy 日志文件ceph.mon.keyring 为 ceph monitor
的密钥环。把 Ceph 配置文件里的默认副本数从 3 改成 2
这样只有两个 OSD 也可以达到 active clean 状态。
把下面这行加入 [global] 段
ceph.conf 配置文件增加副本数为 2。[roottest1 ceph]# echo osd_pool_default_size 2 ceph.conf
osd_pool_default_size 2 是 Ceph 存储集群中的一个参数设置。
它指定了在创建新的 Ceph 存储池pool时默认的副本数或者分片数。
在这种情况下设置为 2 意味着每个对象会有两个副本或者两个分片具体取决于 Ceph 的配置方式。初始化mon节点并收集所有秘钥# 管理节点初始化ceph-deploy mon create-initial# 查看集群状态[roottest1 ceph]# ceph -scluster:id: 7400f7ac-0613-4048-bd80-125ebc02446fhealth: HEALTH_OK
#这里ok表示没问题services:mon: 3 daemons, quorum test1,test2,test3mgr: no daemons activeosd: 0 osds: 0 up, 0 indata:pools: 0 pools, 0 pgsobjects: 0 objects, 0Busage: 0B used, 0B / 0B availpgs:Health Status:
集群的健康状态显示为 HEALTH_OK这通常表示集群的整体状态是正常的。然而这并不意味着所有组件都正常运行。Services:
mon: 有3个监视器mon守护进程正在运行显示quorum的节点是test1、test2、test3这表示监视器集群是正常的。
mgr: 管理器mgr没有活动的守护进程这可能是一个问题。通常情况下至少应该有一个活跃的mgr进程来收集和显示集群的状态数据。
osd: 没有OSD对象存储守护进程在运行。通常情况下Ceph集群应该至少有一个OSD守护进程来存储数据。---------------------------------------------------添加osd服务
Ceph 12版本部署osd格式化命令跟之前不同
添加完硬盘直接使用不要分区ceph自动分区
接下来需要创建 OSD 了OSD 是最终数据存储的地方这里我们准备了3个 OSD 节点。
官方建议为 OSD 及其日志使用独立硬盘或分区作为存储空间,也可以使用目录的方式创建。[roottest1 ceph]# ceph-deploy disk zap test1 /dev/sdb
[roottest1 ceph]# ceph-deploy disk zap test2 /dev/sdb
[roottest1 ceph]# ceph-deploy disk zap test3 /dev/sdb添加osd节点
[roottest1 ceph]# ceph-deploy osd create test1 --data /dev/sdb
[roottest1 ceph]# ceph-deploy osd create test2 --data /dev/sdb
[roottest1 ceph]# ceph-deploy osd create test3 --data /dev/sdb查看osd节点的状态
[roottest1 ceph]# ceph-deploy osd list test1 test2 test3#添加mgr服务
ceph-deploy mgr create test1 test2 test3统一集群配置
用 ceph-deploy 把配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点
这样你每次执行 Ceph 命令行时就无需指定 monitor 地址和 ceph.client.admin.keyring 了。# 管理节点[rootceph01 ceph]# ceph-deploy admin test1 test2 test3# 集群每一个节点授权[roottest1 ceph]# chmod r /etc/ceph/ceph.client.admin.keyring
[roottest2 ceph]# chmod r /etc/ceph/ceph.client.admin.keyring
[roottest3 ceph]# chmod r /etc/ceph/ceph.client.admin.keyring5、添加mds服务
Mds是ceph集群中的元数据服务器而通常它都不是必须的
因为只有在使用cephfs的时候才需要它而目在云计算中用的更广泛的是另外两种存储方式。Mds虽然是元数据服务器但是它不负责存储元数据
元数据也是被切成对象存在各个osd节点中的在创建CEPH FS时要至少创建两个POOL一个用于存放数据另一个用于存放元数据。
Mds只是负责接受用户的元数据查询请求然后从osd中把数据取出来映射进自己的内存中供客户访问。
所以mds其实类似一个代理缓存服务器替osd分担了用户的访问压力# 管理节点[roottest1 ceph]# ceph-deploy mds create test2 test3查看mds服务状态
[roottest11 ceph]# ceph mds stat
, 2 up:standby# 查看集群状态[roottest1 ceph]# ceph -sceph集群运用
1、文件系统运用
创建文件系统存储池# 查看文件系统[roottest1 ~]# ceph fs ls
No filesystems enabled ## 没有文件系统# 首先创建存储池语法
ceph osd pool create cephfs_data pg_num
ceph osd pool create cephfs_metadata pg_num
其中pg_num 128 ,
关于创建存储池确定 pg_num 取值是强制性的因为不能自动计算。下面是几个常用的值*少于 5 个 OSD 时可把 pg_num 设置为 128*OSD 数量在 5 到 10 个时可把 pg_num 设置为 512*OSD 数量在 10 到 50 个时可把 pg_num 设置为 4096*OSD 数量大于 50 时你得理解权衡方法、以及如何自己计算 pg_num 取值*自己计算 pg_num 取值时可借助 pgcalc 工具https://ceph.com/pgcalc/放置组PG的作用
数据分布: PG 是 Ceph 数据分布机制的基本单位。Ceph 会将数据对象映射到 PG 上
然后再将这些 PG 映射到 OSD对象存储守护进程上。
这样即使对象的数量非常庞大通过管理较少数量的 PGCeph 也能有效地分配和管理数据。负载均衡: 通过 PGCeph 可以将数据均匀地分布在所有 OSD 上从而实现负载均衡。
增加或减少 OSD 时Ceph 只需要调整 PG 的映射从而尽可能减少数据迁移。选择合适的 pg_num
计算方式: 选择合适的 PG 数量对于系统的性能和效率非常重要。
一般来说PG 数量越多数据分布越均匀但管理的复杂度也会增加。
常用的计算方式是pg_num (OSD数量 * 100) / 副本数量。#CephFS 需要两个 Pools - cephfs-data 和 cephfs-metadata, 分别存储文件数据和文件元数据[roottest1 ~]# ceph osd pool create ceph_data 128
pool ceph_data created[roottest1 ~]# ceph osd pool create ceph_metadata 64
pool ceph_metadata created您在创建 ceph_metadata 池时指定了 128 个 PGpg_num副本数为 3。PG 数量将达到 768这包括了所有池的 PG 数量乘以副本数而系统允许的最大 PG 数量是 750。
这个限制是由 mon_max_pg_per_osd 参数每个 OSD 的最大 PG 数量和 OSD 数量决定的。总 PG 数量 (128 * 3) (128 * 3) 768 #不能超过750创建文件系统
创建好存储池后你就可以用 fs new 命令创建文件系统了
命令ceph fs new fs_name cephfs_metadata cephfs_data
其中fs_name cephfs 可自定义# 给创建的2个存储池创建文件系统[rootceph01 ~]# ceph fs new cephfs ceph_metadata ceph_data
new fs with metadata pool 2 and data pool 1# 查看文件系统[rootceph01 ~]# ceph fs ls
name: cephfs, metadata pool: ceph_metadata, data pools: [ceph_data ]# 查看mds的状态[rootceph01 ~]# ceph fs status cephfs挂载客户端
要挂载 Ceph 文件系统如果你知道监视器 IP 地址可以用 mount 命令、
或者用 mount.ceph 工具来自动解析监视器 IP 地址。# 内核驱动的方式挂载文件系统# 在client创建挂载点[roottest4 ~]# mkdir /data# 查看秘钥[rootceph01 ~]# cat /etc/ceph/ceph.client.admin.keyring # 使用秘钥挂载[roottest4 ~]# mount -t ceph 192.168.233.10:6789:/ /data/ -o nameadmin,secretAQALTDBm6g0FChAApdTfxOYY1nP4c2L2XR2qw# 取消挂载[roottest4 ~]# umount /data/用户空间的方式挂载文件系统
[rootclient ~]# yum install -y ceph-fuse# 挂载[rootceph01 ceph]# scp ceph.client.admin.keyring ceph.conf client:/etc/ceph/
ceph.client.admin.keyring 100% 63 52.5KB/s 00:00
ceph.conf 100% 266 266.9KB/s 00:00[rootclient ~]# ceph-fuse -m 192.168.1.115:6789 /data/[rootclient ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 98G 1.6G 96G 2% /
devtmpfs devtmpfs 980M 0 980M 0% /dev
tmpfs tmpfs 992M 0 992M 0% /dev/shm
tmpfs tmpfs 992M 9.5M 982M 1% /run
tmpfs tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sr0 iso9660 4.2G 4.2G 0 100% /mnt/cdrom
/dev/sda1 xfs 497M 123M 375M 25% /boot
tmpfs tmpfs 199M 0 199M 0% /run/user/0
ceph-fuse fuse.ceph-fuse 141G 0 141G 0% /data# 取消挂载[rootclient ~]# umount /data/用户空间的方式挂载文件系统
[rootclient ~]# yum install -y ceph-fuse# 挂载[roottest4 /]# mkdir /etc/ceph[rootceph01 ceph]# scp ceph.client.admin.keyring ceph.conf 192.168.233.40:/etc/ceph/
ceph.client.admin.keyring 100% 63 52.5KB/s 00:00
ceph.conf 100% 266 266.9KB/s 00:00[rootclient ~]# ceph-fuse -m 192.168.233.10:6789 /data/[rootclient ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 98G 1.6G 96G 2% /
devtmpfs devtmpfs 980M 0 980M 0% /dev
tmpfs tmpfs 992M 0 992M 0% /dev/shm
tmpfs tmpfs 992M 9.5M 982M 1% /run
tmpfs tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sr0 iso9660 4.2G 4.2G 0 100% /mnt/cdrom
/dev/sda1 xfs 497M 123M 375M 25% /boot
tmpfs tmpfs 199M 0 199M 0% /run/user/0
ceph-fuse fuse.ceph-fuse 141G 0 141G 0% /data# 取消挂载[rootclient ~]# umount /data/mount -t ceph 和 ceph-fuse 都可以用于将 Ceph 文件系统CephFS挂载到客户端但它们有一些关键的区别内核支持:
使用 mount -t ceph 需要 Ceph 内核模块ceph 和 ceph-fuse来支持内核级挂载。它通过内核实现通常会提供比用户空间工具更好的性能。ceph-fuse
用户态实现:
ceph-fuse 是一个用户态工具通过 FUSEFilesystem in Userspace实现 Ceph 文件系统挂载。它不需要内核级支持。性能: mount -t ceph内核级通常提供更好的性能而 ceph-fuse用户空间可能在性能上略逊一筹。
兼容性: ceph-fuse 可以在不支持 Ceph 内核模块的系统上使用适用于用户空间挂载。
实现: mount -t ceph 是内核级挂载而 ceph-fuse 是用户空间挂载工具。ceph osd pool get cephfs_data size #查询副本数ceph osd pool set cephfs_data size 2 #修改副本数块存储运用
Ceph支持一个非常好的特性以COW写时复制copy-on-write的方式从RBD快照创建克隆在Ceph中被称为快照分层。
分层特性允许用户创建多个CEPH RBD克隆实例。
这些特性应用于OpenStack等云平台中使用快照形式保护ceph RBD 镜像快照是只读的
但COW克隆是完全可以写 可以多次来孵化实例对云平台来说是非常有用的。注什么是copy-on-write呢copy-on-write的意思就是在复制一个对象数据或文件的时候并不是真正的把原先的对象复制到内存的另外一个位置上
而是在新对象的内存映射表中设置一个指针指向原对象的位置并把那块内存的Copy-On-Write位设置为1.这样在对新的对象执行读操作的时候内存数据不发生任何变动直接执行读操作而在对新的对象执行写操作时
将真正的对象复制到新的内存地址中并修改新对象的内存映射表指向这个新的位置并在新的内存位置上执行写操作。什么是快照快照是镜像在某个特定时间点的一份只读副本。 Ceph 块设备的一个高级特性就是你可以为映像创建快照来保留其历史。
Ceph 还支持分层快照让你快速、简便地克隆镜像。Ceph RBD镜像有format-1 和 format-2两种类型。format-1:新建rbd镜像是使用最初的格式。此格式兼容所有版本的librbd和内核模块但不支持新功能像克隆。format-2使用第二版本rbd格式此格式增加了对克隆的支持日后扩展以增加新功能也变得更加容易。默认RBD创建的镜像是format-2。#创建块存储的存储池:# 查看内核是否支持使用RBD[roottest1 ceph]# modprobe [roottest1 ceph]# lsmod | grep rbd
rbd 83640 0
libceph 306625 1 rbd# 创建存储池[roottest1 ceph]# ceph osd pool create rbd 64
pool rbd created注
PG计算方式
total PGs ((Total_number_of_OSD * 100) / max_replication_count) / pool_count
例如当前ceph集群是9个osd3副本1个默认的rbd pool
所以PG计算结果为300一般把这个值设置为与计算结果最接近的2的幂数跟300比较接近的是256注
查看当前的PG值# ceph osd pool get rbd pg_num手动设置pg数量# ceph osd pool set rbd pg_num 256创建块设备镜像
要想把块设备加入某节点你得先在 Ceph 存储集群中创建一个镜像使用下列命令#rbd create --size {megabytes} {pool-name}/{image-name} -m mon节点的ip地址如果创建镜像时不指定存储池它将使用默认的 rbd 存储池[roottest1 ceph]# rbd create --size 10240 rbd/test1
这里需要注意size的大小这个大小可以超过你实际pool的大小这个叫做瘦分配即精简配置
也叫超卖和按需分配。创建块之后可以通过指令rbd resize --size 20240 test1 --allow-shrink来动态的更改。注ceph块设备镜像是精简配置只有在你开始写入数据时它们才会占用物理空间# 查看rbd的信息[roottest1 ceph]# rbd ls
test1
注用下列命令罗列某个特定存储池中的块设备用存储池的名字替换 {poolname} # rbd ls {poolname}# 查看镜像的信息[roottest1 ceph]# rbd info test1
rbd image test1:size 100GiB in 25600 objectsorder 22 (4MiB objects)block_name_prefix: rbd_data.196d76b8b4567format: 2features: layering, exclusive-lock, object-map, fast-diff, deep-flattenflags: create_timestamp: Wed Jul 6 17:11:01 2022注
用下列命令检索某存储池内的镜像的信息用镜像名字替换 {image-name} 、用存储池名字替换 {pool-name} # rbd info {pool-name}/{image-name}映射块设备
映射进内核操作之前,首先查看内核版本, 2.x及之前的内核版本需手动调整format为1, 4.x之前要关闭object-map, fast-diff, deep-flatten功能才能成功映射到内核,这里使用的是centos7.5,内核版本3.10。客户端要确定ceph-common包要安装
yum -y install ceph-common[roottest4 ~]# rbd feature disable test1 object-map fast-diff deep-flatten exclusive-lock[roottest4 ~]# rbd map test1
/dev/rbd0
[roottest4 ~]# ls /dev/rbd0
/dev/rbd0
可以看见在/dev下创建了一个叫rbd0的设备文件
挂载使用
挂载rbd的Linux 服务器首先需要机器支持ceph客户端如果是一台新机器的话请安装ceph然后同步下配置文件。# 创建挂载点[roottest4 ~]# mkdir /cephrbd# 格式化磁盘[roottest4 ~]# mkfs.xfs /dev/rbd0
meta-data/dev/rbd0 isize512 agcount16, agsize1638400 blks sectsz512 attr2, projid32bit1 crc1 finobt0, sparse0
data bsize4096 blocks26214400, imaxpct25 sunit1024 swidth1024 blks
naming version 2 bsize4096 ascii-ci0 ftype1
log internal log bsize4096 blocks12800, version2 sectsz512 sunit8 blks, lazy-count1
realtime none extsz4096 blocks0, rtextents0# 挂载[roottest4 ~]# mount /dev/rbd0 /cephrbd/
[roottest4 ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 98G 1.6G 96G 2% /
devtmpfs devtmpfs 980M 0 980M 0% /dev
tmpfs tmpfs 992M 0 992M 0% /dev/shm
tmpfs tmpfs 992M 9.5M 982M 1% /run
tmpfs tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sr0 iso9660 4.2G 4.2G 0 100% /mnt/cdrom
/dev/sda1 xfs 497M 123M 375M 25% /boot
tmpfs tmpfs 199M 0 199M 0% /run/user/0
/dev/rbd0 xfs 100G 33M 100G 1% /cephrbd# 测试写入数据[roottest4 ~]# dd if/dev/zero of/cephrbd/file bs100M count1
10 records in
10 records out
104857600 bytes (105 MB) copied, 0.218325 s, 480 MB/s创建快照并测试回滚# 创建了一个test1快照快照的名字叫做mysnap[roottest4 ~]# rbd snap create --snap mysnap rbd/test1# 首先删除文件[roottest4 ~]# rm -rf /cephrbd/file # 取消挂载[roottest4 ~]# umount /dev/rbd0
#回滚
[roottest4 ~]# rbd snap rollback rbd/test1mysnap
Rolling back to snapshot: 100% complete...done.# 查看挂载信息[roottest4 ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 98G 1.6G 96G 2% /
devtmpfs devtmpfs 980M 0 980M 0% /dev
tmpfs tmpfs 992M 0 992M 0% /dev/shm
tmpfs tmpfs 992M 9.5M 982M 1% /run
tmpfs tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sr0 iso9660 4.2G 4.2G 0 100% /mnt/cdrom
/dev/sda1 xfs 497M 123M 375M 25% /boot
tmpfs tmpfs 199M 0 199M 0% /run/user/0# 再挂载[roottest4 ~]# mount /dev/rbd0 /cephrbd/# 查看文件[roottest4 ~]# ls /cephrbd/
file模板与克隆# 查看块设备的formatformat必须为2[roottest4 ~]# rbd info rbd/test1
rbd image test1:size 100GiB in 25600 objectsorder 22 (4MiB objects)block_name_prefix: rbd_data.196d76b8b4567format: 2features: layeringflags: create_timestamp: Wed Jul 6 17:11:01 2022如果不是format 2 可以创建时指定# rbd create rbd/test1 --size 10240 --image-format 2# 创建克隆前把快照保存起来不然会出错[roottest4 ~]# rbd snap protect rbd/test1mysnap可以使用rbd snap unprotect rbd/test1mysnap去掉这个保护但是这样的话就 不能克隆了# 克隆块设备# 卸载挂载点[roottest4 ~]# umount /dev/rbd0 #克隆设备
[roottest4 ~]# rbd clone rbd/test1mysnap rbd/test2# 查看rbd[roottest4 ~]# rbd ls rbd
test1
test2如上看到rbd这个池上有两个块设备了一个是原来的test1一个是通过test1的镜像模板克隆出来的test2。# 内核映射块设备[roottest4 ~]# rbd map rbd/test2
/dev/rbd1# 挂载克隆的块设备[roottest4 ~]# mkdir /cephrbd1
[roottest4 ~]# mount /dev/rbd1 /cephrbd1/
[roottest4 ~]# ls /cephrbd1/
file
因为是克隆test1test1上有文件系统所以test2也有文件系统直接挂载使用就可以# 查看克隆的块设备[roottest4 ~]# rbd info rbd/test2
rbd image test2:size 100GiB in 25600 objectsorder 22 (4MiB objects)block_name_prefix: rbd_data.196ee6b8b4567format: 2features: layeringflags: create_timestamp: Wed Jul 6 17:53:15 2022parent: rbd/test1mysnapoverlap: 100GiB这个时候的test2还是依赖test1的镜像mysnap如test1的mysnap被删除test2也不能够使用了
要想独立出去就必须将父镜像的信息合并flatten到子镜像中 独立克隆的块设备
拍平克隆映像
克隆出来的映像仍保留了对父快照的引用。要从子克隆删除这些到父快照的引用你可以把快照的信息复制给子克隆也就是“拍平”它。
拍平克隆镜像的时间随快照尺寸增大而增加。要删除快照必须先拍平子镜像。
因为拍平的镜像包含了快照的所有信息所以拍平的映像占用的存储空间会比分层克隆要大。[rootclient ~]# rbd flatten rbd/test2
Image flatten: 100% complete...done.[rootclient ~]# rbd info rbd/test2
rbd image test2:size 100GiB in 25600 objectsorder 22 (4MiB objects)block_name_prefix: rbd_data.196ee6b8b4567format: 2features: layeringflags: create_timestamp: Wed Jul 6 17:53:15 2022# 删除镜像# 去掉镜像test1的保护rootclient ~]# rbd snap unprotect rbd/test1mysnap# 删除镜像test1[rootclient ~]# rbd snap rm rbd/test1mysnap
Removing snap: 100% complete...done.# 查看test1的快照[rootclient ~]# rbd snap ls rbd/test1d image ‘test1’: size 100GiB in 25600 objects order 22 (4MiB objects) block_name_prefix: rbd_data.196d76b8b4567 format: 2 features: layering flags: create_timestamp: Wed Jul 6 17:11:01 2022
如果不是format 2 可以创建时指定
rbd create rbd/test1 --size 10240 --image-format 2
创建克隆前把快照保存起来不然会出错
[roottest4 ~]# rbd snap protect rbd/test1mysnap
可以使用rbd snap unprotect rbd/test1mysnap去掉这个保护但是这样的话就 不能克隆了
克隆块设备
卸载挂载点
[roottest4 ~]# umount /dev/rbd0
#克隆设备 [roottest4 ~]# rbd clone rbd/test1mysnap rbd/test2
查看rbd
[roottest4 ~]# rbd ls rbd test1 test2
如上看到rbd这个池上有两个块设备了一个是原来的test1一个是通过test1的镜像模板克隆出来的test2。
内核映射块设备
[roottest4 ~]# rbd map rbd/test2 /dev/rbd1
挂载克隆的块设备
[roottest4 ~]# mkdir /cephrbd1 [roottest4 ~]# mount /dev/rbd1 /cephrbd1/ [roottest4 ~]# ls /cephrbd1/ file 因为是克隆test1test1上有文件系统所以test2也有文件系统直接挂载使用就可以
查看克隆的块设备
[roottest4 ~]# rbd info rbd/test2 rbd image ‘test2’: size 100GiB in 25600 objects order 22 (4MiB objects) block_name_prefix: rbd_data.196ee6b8b4567 format: 2 features: layering flags: create_timestamp: Wed Jul 6 17:53:15 2022 parent: rbd/test1mysnap overlap: 100GiB
这个时候的test2还是依赖test1的镜像mysnap如test1的mysnap被删除test2也不能够使用了 要想独立出去就必须将父镜像的信息合并flatten到子镜像中
独立克隆的块设备 拍平克隆映像 克隆出来的映像仍保留了对父快照的引用。要从子克隆删除这些到父快照的引用你可以把快照的信息复制给子克隆也就是“拍平”它。 拍平克隆镜像的时间随快照尺寸增大而增加。要删除快照必须先拍平子镜像。 因为拍平的镜像包含了快照的所有信息所以拍平的映像占用的存储空间会比分层克隆要大。
[rootclient ~]# rbd flatten rbd/test2 Image flatten: 100% complete…done.
[rootclient ~]# rbd info rbd/test2 rbd image ‘test2’: size 100GiB in 25600 objects order 22 (4MiB objects) block_name_prefix: rbd_data.196ee6b8b4567 format: 2 features: layering flags: create_timestamp: Wed Jul 6 17:53:15 2022
删除镜像
去掉镜像test1的保护
rootclient ~]# rbd snap unprotect rbd/test1mysnap
删除镜像test1
[rootclient ~]# rbd snap rm rbd/test1mysnap Removing snap: 100% complete…done.
查看test1的快照
[rootclient ~]# rbd snap ls rbd/test1