Ceph核心组件
Object Storage Daemon(OSD)
OSD是负责物理存储的进程,一般配置成和磁盘一一对应,一块磁盘启动一个OSD进程。主要功能是存储数据、复制数据、平衡数据、恢复数据,以及与其它OSD间进行心跳检查,负责响应客户端请求返回具体数据的进程等;
每个OSD节点负责存储一部分数据,并处理读写请求。
Pool、PG和OSD的关系:
- 一个Pool里有很多PG;
- 一个PG里包含一堆对象,一个对象只能属于一个PG;
- PG有主从之分,一个PG分布在不同的OSD上(针对三副本类型);
Monitor(Mon)
一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos同步数据,用来保存OSD的元数据。负责坚实整个Ceph集群运行的Map视图(如OSD Map、Monitor Map、PG Map和CRUSH Map),维护集群的健康状态,维护展示集群状态的各种图表,管理集群客户端认证与授权;
这是CEPH集群的管理节点之一,负责监控OSD节点和MDS节点的状态,并协调所有节点之间的通信。在CEPH集群中至少需要3个Mon节点来保证高可用性。
Metadata Server(MDS)
MDS全称Ceph Metadata Server,是CephFS服务依赖的元数据服务。负责保存文件系统的元数据,管理目录结构。对象存储和块设备存储不需要元数据服务;
它可以支持像CephFS这样的分布式文件系统。
Manager(MGR)
ceph 官方开发了 ceph-mgr,主要目标实现 ceph 集群的管理,为外界提供统一的入口。例如cephmetrics、zabbix、calamari、promethus
这个组件会与Mon组件共同管理CEPH集群的各项任务,如数据平衡、容量规划等。
Rados Gateway(RGW)
RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容。这是一个对象存储网关,允许使用S3、Swift、NFS等协议与CEPH集群进行交互,将CEPH变身为一个云存储服务。
Admin
Ceph常用管理接口通常都是命令行工具,如rados、ceph、rbd等命令,另外Ceph还有可以有一个专用的管理节点,在此节点上面部署专用的管理工具来实现近乎集群的一些管理工作,如集群部署,集群组件管理等。
Ceph三种存储类型
块存储(RBD)
- 优点:
- 通过Raid与LVM等手段,对数据提供了保护;
- 多块廉价的硬盘组合起来,提高容量;
- 多块磁盘组合出来的逻辑盘,提升读写效率;
- 缺点:
- 采用SAN架构组网时,光纤交换机,造价成本高;
- 主机之间无法共享数据;
- 使用场景
- docker容器、虚拟机磁盘存储分配;
- 日志存储;
- 文件存储;
文件存储(CephFS)
- 优点:
- 造价低,随便一台机器就可以了;
- 方便文件共享;
- 缺点:
- 读写速率低;
- 传输速率慢;
- 使用场景
- 日志存储;
- FTP、NFS;
- 其它有目录结构的文件存储
对象存储(Object)(适合更新变动较少的数据)
- 优点:
- 具备块存储的读写高速;
- 具备文件存储的共享等特性;
- 使用场景
- 图片存储;
- 视频存储;
基本步骤和说明
以下是建立Ceph集群的基本步骤:
-
安装和配置Mon节点:在Ceph集群中,Mon节点用于存储集群状态和监控信息。您需要安装并配置至少一个Mon节点。
a.安装Ceph软件包并配置Ceph存储库。
b.创建并编辑ceph.conf文件,设置mon_ip、public_network和cluster_network等参数。
c.生成并分发Ceph监视器密钥环。
d.启动并验证Mon服务。
-
安装和配置OSD节点:在Ceph集群中,OSD节点用于存储数据对象。您需要安装并配置至少一个OSD节点。
a.安装Ceph软件包并配置Ceph存储库。
b.使用OSD准备脚本创建并格式化OSD数据磁盘。
c.创建并编辑ceph.conf文件,添加OSD节点。
d.将OSD数据磁盘添加到Ceph集群中。
e.启动并验证OSD服务。
-
安装和配置MGR和Dashboard:MGR节点用于管理Ceph集群,Dashboard节点提供Web界面以便于监控和管理集群。
a.安装Ceph软件包并配置Ceph存储库。
b.创建并编辑ceph.conf文件,启用管理模块和Dashboard模块。
c.启动并验证MGR服务和Dashboard服务。
-
安装和配置MDS节点:如果您要使用Ceph分布式文件系统,则需要安装和配置至少一个MDS节点。
a.安装Ceph软件包并配置Ceph存储库。
b.创建并编辑ceph.conf文件,添加MDS节点。
c.启动并验证MDS服务。
-
安装和配置radosgw:如果您要使用Ceph对象存储服务,则需要安装并配置至少一个radosgw节点。
a.安装Ceph软件包并配置Ceph存储库。
b.创建并编辑ceph.conf文件,添加rgw节点。
c.使用radosgw-admin工具创建用户和密钥。
d.启动并验证radosgw服务。
-
在客户端上验证块存储:您可以通过在客户端上执行块快照和克隆操作来验证Ceph集群是否正常工作。
a.安装Ceph客户端软件包。
b.创建rbd镜像池和rbd镜像。
c.验证rbd镜像的读写操作。
d.测试rbd快照和克隆功能。
-
在客户端上验证文件存储:如果您使用了Ceph分布式文件系统,则可以在客户端上验证其正常工作。
a.安装Ceph客户端软件包。
b.使用CephFS命令行工具挂载Ceph分布式文件系统。
c.验证在挂载的文件系统中进行读写操作。
-
在客户端上验证对象存储:如果您使用了Ceph对象存储服务,则可以在客户端上验证其正常工作。
a.安装S3cmd工具或其他S3客户端。
b.使用S3工具上传和下载对象。
c.验证对象的元数据和ACL。
-
使用Ceph测试iSCSI多路径:您可以使用Ceph来测试iSCSI多路径功能,以确保其能够正常工作。
a.安装和配置iSCSI initiator和multipath工具。
b.创建iSCSI target并将其映射到Ceph rbd设备。
c.测试iSCSI连接和多路径
iSCSI
Ceph 的 iSCSI 功能是将 Ceph 存储池中的块设备(如 rbd 镜像)映射到 iSCSI 协议上,以便客户端通过 iSCSI 连接来访问这些块设备。这个功能使得 Ceph 可以提供高效的块存储服务,并允许用户通过标准的 iSCSI 接口来使用 Ceph 存储集群。
iSCSI 映射是通过 RADOS Gateway (radosgw) 和 iSCSI 网关实现的。iSCSI 网关在 radosgw 上运行,并将 iSCSI 请求转发给 Ceph 存储池中的 rbd 镜像。在客户端上,可以使用 iSCSI initiator 软件连接到 iSCSI 网关,并访问 Ceph 存储池中的 rbd 镜像。
Ceph 的 iSCSI 功能支持多路径和快照等高级特性,同时还能够与其他 Ceph 组件(如 OSD、MDS 和 radosgw)无缝集成,从而为用户提供完整的分布式存储解决方案。
Ceph版本选择
Ceph版本来源介绍
Ceph 12 是市面用的最广的稳定版本。
分布式存储之Ceph集群介绍搭建
安装前准备
- 安装要求
- 最少三台Centos7系统虚拟机用于部署Ceph集群。硬件配置:2C4G,另外每台机器最少挂载三块硬盘(每块盘5G)
cephnode01 192.168.0.201
cephnode02 192.168.0.202
cephnode03 192.168.0.203
- 环境准备(在Ceph三台机器上操作)
(1)关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
(2)关闭selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
(3)关闭NetworkManager
systemctl disable NetworkManager && systemctl stop NetworkManager
(4)添加主机名与IP对应关系:
vim /etc/hosts
192.168.0.201 cephnode01
192.168.0.202 cephnode02
192.168.0.203 cephnode03
(5)设置主机名:
hostnamectl set-hostname cephnode01
hostnamectl set-hostname cephnode02
hostnamectl set-hostname cephnode03
(6)同步网络时间和修改时区
timedatectl #查看本地时间
timedatectl set-timezone Asia/Shanghai #改为亚洲上海时间
yum install -y chrony #同步工具
chronyc -n sources -v #同步列表
chronyc tracking #同步服务状态
systemctl restart chronyd.service && systemctl enable chronyd.service
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
(7)设置文件描述符
echo "ulimit -SHn 102400" >> /etc/rc.local
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
EOF
(8)内核参数优化
cat >> /etc/sysctl.conf << EOF
kernel.pid_max = 4194303
vm.swappiness = 0
EOF
sysctl -p
(9)在cephnode01上配置免密登录到cephnode02、cephnode03
ssh-keygen -t rsa
ssh-copy-id root@cephnode02
ssh-copy-id root@cephnode03
(10)read_ahead,通过数据预读并且记载到随机访问内存方式提高磁盘读操作
echo "8192" > /sys/block/sda/queue/read_ahead_kb
(11) I/O Scheduler,SSD要用noop,SATA/SAS使用deadline
echo "deadline" >/sys/block/sd[x]/queue/scheduler
echo "noop" >/sys/block/sd[x]/queue/scheduler
安装Ceph集群
1、编辑内网yum源,将yum源同步到其它节点并提前做好yum makecache
#yum -y install wget curl net-tools bash-completion
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# vim /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/$basearch
gpgcheck=0
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch
gpgcheck=0
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS
gpgcheck=0
priority=1
ubuntu
# vim /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
# apt update
ubuntu配置国内ceph源
# apt install lsb-core
# wget -q -O- 'https://mirrors.aliyun.com/ceph/keys/release.asc' | sudo apt-key add -
# ceph_stable_release=octopus
# echo deb https://mirrors.aliyun.com/ceph/debian-$ceph_stable_release/ $(lsb_release -sc)\ main | sudo tee /etc/apt/sources.list.d/ceph.list
# apt update -y && sudo apt install -y ceph-deploy ceph
# apt update
调整内核参数
# vim /etc/sysctl.conf
# Controls source route verification
net.ipv4.ip_forward = 1
2、安装ceph-deploy,在node01执行(确认ceph-deploy版本是否为2.0.1,)
# yum install -y ceph-deploy
3、创建一个my-cluster目录,所有命令在此目录下进行,在node01执行(文件位置和名字可以随意)
# mkdir /my-cluster
# cd /my-cluster
4、创建一个Ceph集群,在node01执行
# ceph-deploy new cephnode01 cephnode02 cephnode03
Traceback (most recent call last):
File "/bin/ceph-deploy", line 18, in <module>
from ceph_deploy.cli import main
File "/usr/lib/python2.7/site-packages/ceph_deploy/cli.py", line 1, in <module>
import pkg_resources
ImportError: No module named pkg_resources
#以上出现报错,是因为没有pip,安装pip
#sudo yum install epel-release
#sudo yum install python-pip
#重新初始化
#ceph-deploy new cephnode01 cephnode02 cephnode03
#ls
ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
#cat ceph.conf
[global]
fsid = 3a2a06c7-124f-4703-b798-88eb2950361e
mon_initial_members = node3, node4, node5
mon_host = 172.18.112.20,172.18.112.19,172.18.112.18
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
修改ceph.conf,添加如下配置
public network = 172.18.112.0/24
cluster network = 172.18.112.0/24
osd pool default size = 3
osd pool default min size = 2
osd pool default pg num = 128
osd pool default pgp num = 128
osd pool default crush rule = 0
osd crush chooseleaf type = 1
max open files = 131072
ms bind ipv6 = false
[mon]
mon clock drift allowed = 10
mon clock drift warn backoff = 30
mon osd full ratio = .95
mon osd nearfull ratio = .85
mon osd down out interval = 600
mon osd report timeout = 300
mon allow pool delete = true
[osd]
osd recovery max active = 3
osd max backfills = 5
osd max scrubs = 2
osd mkfs type = xfs
osd mkfs options xfs = -f -i size=1024
osd mount options xfs = rw,noatime,inode64,logbsize=256k,delaylog
filestore max sync interval = 5
osd op threads = 2
5、安装Ceph软件(每个节点执行)
# yum -y install epel-release #所有节点都需要安装
# yum install -y ceph
或者
安装Ceph软件到指定节点
#ceph-deploy install --no-adjust-repos cephnode01 cephnode02 cephnode03
–no-adjust-repos是直接使用本地源,不生成官方源.
6、生成monitor检测集群所使用的的秘钥(部署初始的monitors,并获得keys)
# ceph-deploy mon create-initial
做完这一步,在当前目录下就会看到有如下的keyrings:
#ls
ceph.bootstrap-mds.keyring ceph.bootstrap-osd.keyring ceph.client.admin.keyring ceph-deploy-ceph.log
ceph.bootstrap-mgr.keyring ceph.bootstrap-rgw.keyring ceph.conf ceph.mon.keyring
7、安装Ceph CLI,方便执行一些管理命令
# ceph-deploy admin cephnode01 cephnode02 cephnode03
8、配置mgr,用于管理集群
在L版本的`Ceph`中新增了`manager daemon`,如下命令部署一个`Manager`守护进程
# ceph-deploy mgr create cephnode01 cephnode02 cephnode03
9、部署rgw
# yum install -y ceph-radosgw
# ceph-deploy rgw create cephnode01
10、部署MDS(CephFS)
# ceph-deploy mds create cephnode01 cephnode02 cephnode03
11、添加osd
#用法:ceph-deploy osd create –data {device} {ceph-node}
ceph-deploy osd create --data /dev/sdb cephnode01
ceph-deploy osd create --data /dev/sdb cephnode02
ceph-deploy osd create --data /dev/sdb cephnode03
检查osd状态
#sudo ceph health
HEALTH_OK
#sudo ceph -s
cluster:
id: 3a2a06c7-124f-4703-b798-88eb2950361e
health: HEALTH_OK
services:
mon: 3 daemons, quorum node5,node4,node3
mgr: node3(active)
osd: 3 osds: 3 up, 3 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 MiB
usage: 3.2 GiB used, 597 GiB / 600 GiB avail
pgs:
默认情况下ceph.client.admin.keyring文件的权限为600,属主和属组为root,如果在集群内节点使用cephadmin用户直接直接ceph命令,将会提示无法找到/etc/ceph/ceph.client.admin.keyring文件,因为权限不足。
如果使用sudo ceph不存在此问题,为方便直接使用ceph命令,可将权限设置为644。在集群节点上面node1 admin用户下执行下面命令。
#ceph -s
2021-12-28 07:59:36.062 7f52d08e0700 -1 auth: unable to find a keyring on /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,: (2) No such file or directory
2021-12-28 07:59:36.062 7f52d08e0700 -1 monclient: ERROR: missing keyring, cannot use cephx for authentication
[errno 2] error connecting to the cluster
#sudo chmod 644 /etc/ceph/ceph.client.admin.keyring
#ceph -s
cluster:
id: 3a2a06c7-124f-4703-b798-88eb2950361e
health: HEALTH_OK
services:
mon: 3 daemons, quorum node5,node4,node3
mgr: node3(active)
osd: 3 osds: 3 up, 3 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 MiB
usage: 3.2 GiB used, 597 GiB / 600 GiB avail
pgs:
查看osds
#sudo ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.58589 root default
-3 0.19530 host node3
3 hdd 0.19530 osd.3 up 1.00000 1.00000
-5 0.19530 host node4
4 hdd 0.19530 osd.4 up 1.00000 1.00000
-7 0.19530 host node5
5 hdd 0.19530 osd.5 up 1.00000 1.00000
12、开启MGR监控模块
方式一:命令操作
ceph mgr module enable dashboard
如果以上操作报错如下:
Error ENOENT: all mgr daemons do not support module 'dashboard', pass --force to force enablement
则因为没有安装ceph-mgr-dashboard
,在mgr的节点上安装。
yum install ceph-mgr-dashboard
方式二:配置文件
# 编辑ceph.conf文件
vi ceph.conf
[mon]
mgr initial modules = dashboard
#推送配置
[admin@node3 my-cluster]$ ceph-deploy --overwrite-conf config push node3 node4 node5
#重启mgr
sudo systemctl restart ceph-mgr@node3
web登录配置 默认情况下,仪表板的所有HTTP连接均使用SSL/TLS进行保护。
#要快速启动并运行仪表板,可以使用以下内置命令生成并安装自签名证书:
[root@node3 my-cluster]# ceph dashboard create-self-signed-cert
Self-signed certificate created
#创建具有管理员角色的用户:
[root@node3 my-cluster]# ceph dashboard set-login-credentials admin admin
Username and password updated
#查看ceph-mgr服务:
[root@node3 my-cluster]# ceph mgr services
{
"dashboard": "https://node3:8443/"
}
以上配置完成后,浏览器输入 https://node3:8443 输入用户名admin
,密码admin
登录即可查看
要本地hosts解析
ceph.conf
1、该配置文件采用init文件语法,#和;为注释,ceph集群在启动的时候会按照顺序加载所有的conf配置文件。 配置文件分为以下几大块配置。
global:全局配置。
osd:osd专用配置,可以使用osd.N,来表示某一个OSD专用配置,N为osd的编号,如0、2、1等。
mon:mon专用配置,也可以使用mon.A来为某一个monitor节点做专用配置,其中A为该节点的名称,ceph-monitor-2、ceph-monitor-1等。使用命令 ceph mon dump可以获取节点的名称。
client:客户端专用配置。
2、配置文件可以从多个地方进行顺序加载,如果冲突将使用最新加载的配置,其加载顺序为。
$CEPH_CONF环境变量
-c 指定的位置
/etc/ceph/ceph.conf
~/.ceph/ceph.conf
./ceph.conf
3、配置文件还可以使用一些元变量应用到配置文件,如。
$cluster:当前集群名。
$type:当前服务类型。
$id:进程的标识符。
$host:守护进程所在的主机名。
$name:值为$type.$id。
4、ceph.conf详细参数
[global]#全局设置
fsid = xxxxxxxxxxxxxxx #集群标识ID
mon host = 10.0.1.1,10.0.1.2,10.0.1.3 #monitor IP 地址
auth cluster required = cephx #集群认证
auth service required = cephx #服务认证
auth client required = cephx #客户端认证
osd pool default size = 3 #最小副本数 默认是3
osd pool default min size = 1 #PG 处于 degraded 状态不影响其 IO 能力,min_size是一个PG能接受IO的最小副本数
public network = 10.0.1.0/24 #公共网络(monitorIP段)
cluster network = 10.0.2.0/24 #集群网络
max open files = 131072 #默认0#如果设置了该选项,Ceph会设置系统的max open fds
mon initial members = node1, node2, node3 #初始monitor (由创建monitor命令而定)
##############################################################
[mon]
mon data = /var/lib/ceph/mon/ceph-$id
mon clock drift allowed = 1 #默认值0.05#monitor间的clock drift
mon osd min down reporters = 13 #默认值1#向monitor报告down的最小OSD数
mon osd down out interval = 600 #默认值300 #标记一个OSD状态为down和out之前ceph等待的秒数
##############################################################
[osd]
osd data = /var/lib/ceph/osd/ceph-$id
osd mkfs type = xfs #格式化系统类型
osd max write size = 512 #默认值90 #OSD一次可写入的最大值(MB)
osd client message size cap = 2147483648 #默认值100 #客户端允许在内存中的最大数据(bytes)
osd deep scrub stride = 131072 #默认值524288 #在Deep Scrub时候允许读取的字节数(bytes)
osd op threads = 16 #默认值2 #并发文件系统操作数
osd disk threads = 4 #默认值1 #OSD密集型操作例如恢复和Scrubbing时的线程
osd map cache size = 1024 #默认值500 #保留OSD Map的缓存(MB)
osd map cache bl size = 128 #默认值50 #OSD进程在内存中的OSD Map缓存(MB)
osd mount options xfs = "rw,noexec,nodev,noatime,nodiratime,nobarrier" #默认值rw,noatime,inode64 #Ceph OSD xfs Mount选项
osd recovery op priority = 2 #默认值10 #恢复操作优先级,取值1-63,值越高占用资源越高
osd recovery max active = 10 #默认值15 #同一时间内活跃的恢复请求数
osd max backfills = 4 #默认值10 #一个OSD允许的最大backfills数
osd min pg log entries = 30000 #默认值3000 #修建PGLog是保留的最大PGLog数
osd max pg log entries = 100000 #默认值10000 #修建PGLog是保留的最大PGLog数
osd mon heartbeat interval = 40 #默认值30 #OSD ping一个monitor的时间间隔(默认30s)
ms dispatch throttle bytes = 1048576000 #默认值 104857600 #等待派遣的最大消息数
objecter inflight ops = 819200 #默认值1024 #客户端流控,允许的最大未发送io请求数,超过阀值会堵塞应用io,为0表示不受限
osd op log threshold = 50 #默认值5 #一次显示多少操作的log
osd crush chooseleaf type = 0 #默认值为1 #CRUSH规则用到chooseleaf时的bucket的类型
##############################################################
[client]
rbd cache = true #默认值 true #RBD缓存
rbd cache size = 335544320 #默认值33554432 #RBD缓存大小(bytes)
rbd cache max dirty = 134217728 #默认值25165824 #缓存为write-back时允许的最大dirty字节数(bytes),如果为0,使用write-through
rbd cache max dirty age = 30 #默认值1 #在被刷新到存储盘前dirty数据存在缓存的时间(seconds)
rbd cache writethrough until flush = false #默认值true #该选项是为了兼容linux-2.6.32之前的virtio驱动,避免因为不发送flush请求,数据不回写
#设置该参数后,librbd会以writethrough的方式执行io,直到收到第一个flush请求,才切换为writeback方式。
rbd cache max dirty object = 2 #默认值0 #最大的Object对象数,默认为0,表示通过rbd cache size计算得到,librbd默认以4MB为单位对磁盘Image进行逻辑切分
#每个chunk对象抽象为一个Object;librbd中以Object为单位来管理缓存,增大该值可以提升性能
rbd cache target dirty = 235544320 #默认值16777216 #开始执行回写过程的脏数据大小,不能超过 rbd_cache_max_dirty
个人不理解并查找
ceph的配置中public network和cluster network的区别和作用,必须一致吗
在Ceph中,Public Network和Cluster Network是指在集群中不同的网络。它们的作用和区别如下:
- Public Network:Public Network是指Ceph集群节点之间的公共网络,也可以是在客户端和Ceph集群节点之间进行通信的网络。Public Network负责处理客户端请求和数据传输,并且可能通过路由器或交换机等设备进行连接。因此,Public Network需要具备更高的带宽和较低的延迟。
- Cluster Network:Cluster Network是指Ceph集群内部节点之间的通信网络,负责传输Ceph集群内部各个组件之间的通信,包括OSD、Mon、MDS等。为了确保高效的数据传输和集群的最佳性能,Cluster Network应该使用专用网络,避免与Public Network混淆。
Public Network和Cluster Network之间并没有硬性要求必须一致,但是建议将其配置为不同的网络以获得最佳的性能。如果将两种类型的网络配置为相同,则可能会导致网络拥塞和性能瓶颈。
所以说上面的public network和cluster network最好去设置不同网段的网络
RBD
介绍
Ceph是一种分布式存储系统,其中包含一个功能强大的块存储服务RBD(RADOS Block Device)。RBD是Ceph中的一种对象类型,它允许用户在Ceph集群上创建和管理虚拟磁盘,这些虚拟磁盘可以映射到客户机上并用作本地块设备。
使用RBD,用户可以创建具有不同大小的虚拟磁盘,并将其映射到客户机上。RBD还提供快照和克隆功能,使用户可以轻松地创建磁盘镜像或备份。此外,RBD支持基于策略的迁移,以便根据应用程序的需求自动将数据从低性能存储器移到高性能存储器。
- RBD 就是 Ceph 里的块设备,一个 4T 的块设备的功能和一个 4T 的 SATA 类似,挂载的 RBD 就可以当磁盘用;
- resizable:这个块可大可小;
- data striped:这个块在Ceph里面是被切割成若干小块来保存,不然 1PB 的块怎么存的下;
- thin-provisioned:精简置备,1PB 的集群是能创建无数 1TB 的块的。其实就是块的大小和在 Ceph中实际占用大小是没有关系的,刚创建出来的块是不占空间,今后用多大空间,才会在 Ceph 中占用多大空间。举例:你有一个 32G 的 U盘,存了一个2G的电影,那么 RBD 大小就类似于 32G,而 2G 就相当于在 Ceph 中占用的空间 ;
- 块存储本质就是将裸磁盘或类似裸磁盘(lvm)设备映射给主机使用,主机可以对其进行格式化并存储和读取数据,块设备读取速度快但是不支持共享。
- ceph可以通过内核模块和librbd库提供块设备支持。客户端可以通过内核模块挂在rbd使用,客户端使用rbd块设备就像使用普通硬盘一样,可以对其就行格式化然后使用典型的是云平台的块存储服务。
使用场景:
- 云平台(OpenStack做为云的存储后端提供镜像存储)
- K8s容器
- map成块设备直接使用
- ISCIS,安装Ceph客户端
Ceph RBD IO流程
RBD常用命令
创建块设备:rbd create <pool>/<image> --size <size>
删除块设备:rbd rm <pool>/<image>
显示块设备列表:rbd ls <pool>
显示块设备信息:rbd info <pool>/<image>
格式化块设备:rbd format <pool>/<image> --format <2|3>
映射块设备:rbd map <pool>/<image>
卸载块设备:rbd unmap <device>
调整块设备大小:rbd resize <pool>/<image> --size <new_size>
备份块设备:rbd export <pool>/<image> <backup_file>
恢复块设备:rbd import <backup_file> <pool>/<image>
查看已映射块设备:rbd showmapped
RBD配置操作
1、创建rbd使用的pool
# ceph osd pool create rbd 32 32
# ceph osd pool application enable rbd rbd
2、创建一个块设备
# rbd create --size 10240 image01
3、查看块设备
# rbd ls
# rbd info image01
4、将块设备映射到系统内核
# rbd map image01
5、禁用当前系统内核不支持的feature
# rbd feature disable image01 exclusive-lock, object-map, fast-diff, deep-flatten
6、再次映射
# rbd map image01
7、格式化块设备镜像
# mkfs.xfs /dev/rbd0
8、mount到本地
# mount /dev/rbd0 /mnt
# umount /mnt
9、取消块设备和内核映射
# rbd unmap image01
10、删除RBD块设备
# rbd rm image01
快照配置
1、创建快照
rbd create --size 10240 image02
rbd snap create image02@image02_snap01
2、列出创建的快照
# rbd snap list image02
或
# rbd ls -l
3、查看快照详细信息
# rbd info image02@image02_snap01
4、克隆快照(快照必须处于被保护状态才能被克隆)
# rbd snap protect image02@image02_snap01
# rbd clone rbd/image02@image02_snap01 kube/image02_clone01
5、查看快照的children
# rbd children image02
6、去掉快照的parent
# rbd flatten kube/image02_clone01
7、恢复快照
# rbd snap rollback image02@image02_snap01
8、删除快照
# rbd snap unprotect image02@image02_snap01
# rbd snap remove image02@image02_snap01
导出导入RBD镜像
1、导出RBD镜像
# rbd export image02 /tmp/image02
2、导出RBD镜像
# rbd import /tmp/image02 rbd/image02 --image-format 2
CephFs
CephFs介绍
Ceph File System (CephFS) 是与 POSIX 标准兼容的文件系统, 能够提供对 Ceph 存储集群上的文件访问. Jewel 版本 (10.2.0) 是第一个包含稳定 CephFS 的 Ceph 版本. CephFS 需要至少一个元数据服务器 (Metadata Server - MDS) daemon (ceph-mds) 运行, MDS daemon 管理着与存储在 CephFS 上的文件相关的元数据, 并且协调着对 Ceph 存储系统的访问。
对象存储的成本比起普通的文件存储还是较高,需要购买专门的对象存储软件以及大容量硬盘。如果对数据量要求不是海量,只是为了做文件共享的时候,直接用文件存储的形式好了,性价比高。
CephFS 架构
底层是核心集群所依赖的, 包括:
- OSDs (ceph-osd): CephFS 的数据和元数据就存储在 OSDs 上
- MDS (ceph-mds): Metadata Servers, 管理着 CephFS 的元数据
- Mons (ceph-mon): Monitors 管理着集群 Map 的主副本
Ceph 存储集群的协议层是 Ceph 原生的 librados 库, 与核心集群交互.
CephFS 库层包括 CephFS 库 libcephfs, 工作在 librados 的顶层, 代表着 Ceph 文件系统.最上层是能够访问 Ceph 文件系统的两类客户端.
配置 CephFS MDS
要使用 CephFS, 至少就需要一个 metadata server 进程。可以手动创建一个 MDS, 也可以使用 ceph-deploy 或者 ceph-ansible 来部署 MDS。
登录到ceph-deploy工作目录执行
# ceph-deploy mds create $hostname
部署Ceph文件系统
部署一个 CephFS, 步骤如下:
- 在一个 Mon 节点上创建 Ceph 文件系统.
- 若使用 CephX 认证,需要创建一个访问 CephFS 的客户端
- 挂载 CephFS 到一个专用的节点.
- 以 kernel client 形式挂载 CephFS
- 以 FUSE client 形式挂载 CephFS
创建一个 Ceph 文件系统
1、CephFS 需要两个 Pools - cephfs-data 和 cephfs-metadata, 分别存储文件数据和文件元数据
# ceph osd pool create cephfs-data 16 16
# ceph osd pool create cephfs-metadata 16 16
注:一般 metadata pool 可以从相对较少的 PGs 启动, 之后可以根据需要增加 PGs. 因为 metadata pool 存储着 CephFS 文件的元数据, 为了保证安全, 最好有较多的副本数. 为了能有较低的延迟, 可以考虑将 metadata 存储在 SSDs 上.
2、创建一个 CephFS, 名字为 cephfs:
# ceph fs new cephfs cephfs-metadata cephfs-data
3、验证至少有一个 MDS 已经进入 Active 状态
ceph fs status cephfs
4、在 Monitor 上, 创建一个用户,用于访问CephFs
# ceph auth get-or-create client.cephfs mon 'allow r' mds 'allow rw' osd 'allow rw pool=cephfs-data, allow rw pool=cephfs-metadata'
5、验证key是否生效
ceph auth get client.cephfs
6、检查CephFs和mds状态
ceph mds stat
ceph fs ls
ceph fs status
kernel client 形式挂载 CephFS
1、创建挂载目录 cephfs
# mkdir /cephfs
2、挂载目录
# mount -t ceph 192.168.0.201:6789,192.168.0.202:6789,192.168.0.203:6789:/ /cephfs/ -o name=cephfs,secret=AQDHjeddHlktJhAAxDClZh9mvBxRea5EI2xD9w==
3、自动挂载
# echo "mon1:6789,mon2:6789,mon3:6789:/ /cephfs ceph name=cephfs,secretfile=/etc/ceph/cephfs.key,_netdev,noatime 0 0" | sudo tee -a /etc/fstab
4、验证是否挂载成功
# stat -f /cephfs
FUSE client 形式挂载 CephFS
1、安装ceph-common
yum install -y ceph-common
2、安装ceph-fuse
yum install -y ceph-fuse
3、将集群的ceph.conf拷贝到客户端
scp root@192.168.0.201:/etc/ceph/ceph.conf /etc/ceph/
chmod 644 /etc/ceph/ceph.conf
4、使用 ceph-fuse 挂载 CephFS
ceph-fuse --keyring /etc/ceph/ceph.client.cephfs.keyring --name client.cephfs -m 192.168.0.201:6789,192.168.0.202:6789,192.168.0.203:6789 /cephfs/
5、验证 CephFS 已经成功挂载
stat -f /cephfs
6、自动挂载
echo "none /cephfs fuse.ceph ceph.id=cephfs[,ceph.conf=/etc/ceph/ceph.conf],_netdev,defaults 0 0"| sudo tee -a /etc/fstab
或
echo "id=cephfs,conf=/etc/ceph/ceph.conf /mnt/ceph2 fuse.ceph _netdev,defaults 0 0"| sudo tee -a /etc/fstab
7、卸载
fusermount -u /cephfs
MDS主备与主主切换
(1)配置主主模式
- 当cephfs的性能出现在MDS上时,就应该配置多个活动的MDS。通常是多个客户机应用程序并行的执行大量元数据操作,并且它们分别有自己单独的工作目录。这种情况下很适合使用多主MDS模式。
(2)配置MDS多主模式
- 每个cephfs文件系统都有一个max_mds设置,可以理解为它将控制创建多少个主MDS。注意只有当实际的MDS个数大于或等于max_mds设置的值时,mdx_mds设置才会生效。例如,如果只有一个MDS守护进程在运行,并且max_mds被设置为两个,则不会创建第二个主MDS。
# ceph fs set cephfs max_mds 2
(3)配置备用MDS
即使有多个活动的MDS,如果其中一个MDS出现故障,仍然需要备用守护进程来接管。因此,对于高可用性系统,实际配置max_mds时,最好比系统中MDS的总数少一个。
但如果你确信你的MDS不会出现故障,可以通过以下设置来通知ceph不需要备用MDS,否则会出现insufficient standby daemons available告警信息:
# ceph fs set <fs> standby_count_wanted 0
(4)还原单主MDS
设置max_mds
# ceph fs set max_mds 1
删除不需要的rank
ceph mds deactivate cephfs:2
Ceph Dashboard
Ceph 的监控可视化界面方案很多----grafana、Kraken。但是从Luminous开始,Ceph 提供了原生的Dashboard功能,通过Dashboard可以获取Ceph集群的各种基本状态信息。
mimic版 (nautilus版) dashboard 安装。如果是 (nautilus版) 需要安装 ceph-mgr-dashboard
配置Ceph Dashboard
1、在每个mgr节点安装
# yum install ceph-mgr-dashboard
2、开启mgr功能
# ceph mgr module enable dashboard
3、生成并安装自签名的证书
# ceph dashboard create-self-signed-cert
4、创建一个dashboard登录用户名密码
# ceph dashboard ac-user-create guest 1q2w3e4r administrator
5、查看服务访问方式
# ceph mgr services
修改默认配置命令
指定集群dashboard的访问端口
# ceph config-key set mgr/dashboard/server_port 7000
指定集群 dashboard的访问IP
# ceph config-key set mgr/dashboard/server_addr $IP
开启Object Gateway管理功能
1、创建rgw用户
# radosgw-admin user create --uid=user01 --display-name=user01 --system
2、提供Dashboard证书
# ceph dashboard set-rgw-api-access-key $access_key
# ceph dashboard set-rgw-api-secret-key $secret_key
3、配置rgw主机名和端口
# ceph dashboard set-rgw-api-host 192.168.0.201
# ceph dashboard set-rgw-api-port 7480
4、刷新web页面