0%

Ceph

Ceph 是一个专注于分布式的、弹性可扩展的、高可靠的、性能优异的存储系统平台,可以同时支持块设备、文件系统和对象网关三种类型的存储接口。

概览

Ceph架构如图所示。

模块说明:

模块名称 功能描述
RADOS RADOS(Reliable Autonomic Distributed Object Store,RADOS)是Ceph存储集群的基础。Ceph中的一切都以对象的形式存储,而RADOS就负责存储这些对象,而不考虑它们的数据类型。RADOS层确保数据一致性和可靠性。对于数据一致性,它执行数据复制、故障检测和恢复,还包括数据在集群节点间的recovery。
OSD 实际存储数据的进程。通常一个OSD daemon绑定一个物理磁盘。Client write/read数据最终都会走到OSD去执行write/read操作。
MON Monitor在Ceph集群中扮演者管理者的角色,维护了整个集群的状态,是Ceph集群中最重要的组件。MON保证集群的相关组件在同一时刻能够达成一致,相当于集群的领导层,负责收集、更新和发布集群信息。为了规避单点故障,在实际的Ceph部署环境中会部署多个MON,同样会引来多个MON之前如何协同工作的问题。
MGR MGR目前的主要功能是一个监控系统,包含采集、存储、分析(包含报警)和可视化几部分,用于把集群的一些指标暴露给外界使用。
Librados 简化访问RADOS的一种方法,目前支持PHP、Ruby、Java、Python、C和C++语言。它提供了Ceph存储集群的一个本地接口RADOS,并且是其他服务(如RBD、RGW)的基础,此外,还为CephFS提供POSIX接口。Librados API支持直接访问RADOS,使开发者能够创建自己的接口来访问Ceph集群存储。
RBD Ceph块设备,对外提供块存储。可以像磁盘一样被映射、格式化和挂载到服务器上。
RGW Ceph对象网关,提供了一个兼容S3和Swift的RESTful API接口。RGW还支持多租户和OpenStack的Keystone身份验证服务。
MDS Ceph元数据服务器,跟踪文件层次结构并存储只供CephFS使用的元数据。Ceph块设备和RADOS网关不需要元数据。MDS不直接给Client提供数据服务。
CephFS 提供了一个任意大小且兼容POSlX的分布式文件系统。CephFS依赖Ceph MDS来跟踪文件层次结构,即元数据。

部署

引用:

https://docs.ceph.com/en/latest/start/intro/

https://support.huaweicloud.com/dpmg-kunpengsdss/kunpengcephfile_04_0005.html

服务器列表

IP地址 角色 备注
172.22.3.50 Ceph节点1 主节点
172.22.3.46 Ceph节点2
172.22.3.47 Ceph节点3
172.22.3.48 Client节点1

每台服务器都单独挂了一个存储盘/dev/sdc,200G

基础环境

主机名

每台服务都需要重新配置主机名

1
2
3
4
hostnamectl --static set-hostname ceph1
hostnamectl --static set-hostname ceph2
hostnamectl --static set-hostname ceph3
hostnamectl --static set-hostname client1

hosts

1
2
3
4
172.20.3.50   ceph1
172.20.3.46 ceph2
172.20.3.47 ceph3
172.20.3.48 client1

NTP时间同步

所有节点执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 1.安装ntp
yum -y install ntp ntpdate

# 2.备份配置
cd /etc && mv ntp.conf ntp.conf.bak

# 3.ceph1为NTP服务端节点,新建ntp配置文件
vi /etc/ntp.conf

restrict 127.0.0.1
restrict ::1
restrict 172.20.3.0 mask 255.255.255.0
server 127.127.1.0
fudge 127.127.1.0 stratum 8

# 4.其他节点ntp.conf
vi /etc/ntp.conf

server 172.20.3.50

# 5. ceph1启动ntp服务

systemctl start ntpd
systemctl enable ntpd
systemctl status ntpd

# 6.同步时间
ntpdate ceph1

# 7.写入硬件时钟
hwclock -w

# 8.增加定时任务
crontab -e

*/10 * * * * /usr/sbin/ntpdate 172.20.3.50

配置yum源

vi /etc/yum.repos.d/ceph.repo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[Ceph]
name=Ceph packages for $basearch
baseurl=http://download.ceph.com/rpm-nautilus/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-nautilus/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://download.ceph.com/rpm-nautilus/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1
1
yum clean all && yum makecache

配置epel源

1
yum install epel-release -y

安装Ceph

所有节点

1
yum -y install librados2-14.2.10 ceph-14.2.10

ceph1节点安装ceph-deploy

1
yum -y install ceph-deploy

确认版本

1
ceph -v

部署MON节点

ceph1节点执行

创建集群
1
2
cd /etc/ceph
ceph-deploy new ceph1 ceph2 ceph3
修改配置

在“/etc/ceph”目录下自动生成的ceph.conf文件中配置网络mon_host、public network、cluster network。

新增以下信息:

1
2
3
4
5
public_network = 172.20.3.0/24
cluster_network = 172.20.3.0/24

[mon]
mon_allow_pool_delete = true
初始化监视器并收集密钥
1
ceph-deploy mon create-initial
将“ceph.client.admin.keyring”拷贝到各个节点上
1
ceph-deploy --overwrite-conf admin ceph1 ceph2 ceph3 client1
查看是否配置成功。
1
ceph -s

部署MGR节点

ceph1节点执行

部署MGR节点
1
ceph-deploy mgr create ceph1 ceph2 ceph3
查看是否配置成功。
1
ceph -s

部署OSD节点

1
2
3
4
5
6
7
8
ceph-deploy disk zap ceph1 /dev/sdc
ceph-deploy osd create ceph1 --data /dev/sdc

ceph-deploy disk zap ceph2 /dev/sdc
ceph-deploy osd create ceph2 --data /dev/sdc

ceph-deploy disk zap ceph3 /dev/sdc
ceph-deploy osd create ceph3 --data /dev/sdc

配置MDS节点

MDS(Metadata Server)即元数据Server主要负责Ceph FS集群中文件和目录的管理。配置MDS节点如下:

创建MDS。在ceph1节点执行:

1
2
cd /etc/ceph 
ceph-deploy mds create ceph1 ceph2 ceph3

在Ceph各个节点上查看是否成功创建MDS进程。

1
ps -ef | grep ceph-mds | grep -v grep

部署RGW

1
2
3
4
5
6
7
8
ceph-deploy install --rgw --release nautilus ceph1 ceph2 ceph3 ceph4 ceph5
ceph-deploy install --rgw --release nautilus ceph4 ceph5 --repo-url http://mirrors.163.com/ceph/rpm-nautilus/el7/ --gpg-url http://mirrors.163.com/ceph/keys/release.asc

ceph-deploy rgw create ceph1
ceph-deploy rgw create ceph2
ceph-deploy rgw create ceph3
ceph-deploy rgw create ceph4
ceph-deploy rgw create ceph5

创建存储池和文件系统

创建存储池
1
2
ceph osd pool create fs_data 32 32
ceph osd pool create fs_metadata 16 16
创建文件系统
1
ceph fs new cephfs fs_metadata fs_data

Ceph -s

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cluster:
id: 9d739880-b7bb-4d4e-b000-e9da551bb4dd
health: HEALTH_WARN
BlueStore compression broken on 3 OSD(s)

services:
mon: 3 daemons, quorum ceph2,ceph3,ceph1 (age 4d)
mgr: ceph3(active, since 3d), standbys: ceph1, ceph2
mds: cephfs:1 {0=ceph1=up:active} 2 up:standby
osd: 3 osds: 3 up (since 4d), 3 in (since 4d)
rgw: 3 daemons active (ceph1, ceph2, ceph3)

task status:

data:
pools: 7 pools, 240 pgs
objects: 2.06k objects, 7.0 GiB
usage: 24 GiB used, 576 GiB / 600 GiB avail
pgs: 240 active+clean

io:
client: 85 B/s rd, 5.7 KiB/s wr, 0 op/s rd, 0 op/s wr

新增节点

服务器列表

IP地址 角色 备注
172.22.3.50 Ceph节点1 主节点
172.22.3.46 Ceph节点2
172.22.3.47 Ceph节点3
172.22.3.48 Client节点1 改为 Ceph节点4 新增
172.22.3.49 Ceph节点5 新增

每台服务器都单独挂了一个存储盘/dev/sdc,200G

操作

  1. 配置主机名

    1
    2
    hostnamectl --static set-hostname ceph4
    hostnamectl --static set-hostname ceph5
  2. 新增hosts

    1
    2
    3
    4
    5
    172.20.3.50   ceph1
    172.20.3.46 ceph2
    172.20.3.47 ceph3
    172.20.3.48 ceph4
    172.20.3.49 ceph5
  3. ntp时间同步

  4. 配置yum源

  5. 配置epel源

  6. 安装ceph

  7. 同步配置

    1
    ceph-deploy --overwrite-conf admin ceph1 ceph2 ceph3 ceph4 ceph5
  8. 部署OSD

  9. 部署MDS

  10. 部署MGR

安装Dashboard

https://docs.ceph.com/en/latest/mgr/dashboard/#overview

yum

1
yum install -y ceph-mgr-dashboard -y

开启插件

1
2
ceph mgr module ls
ceph mgr module enable dashboard

禁用SSL

1
ceph config set mgr mgr/dashboard/ssl false

配置监听地址

1
ceph config set mgr mgr/dashboard/server_addr 0.0.0.0

配置监听端口

1
ceph config set mgr mgr/dashboard/server_port 8443

创建账号

1
ceph dashboard ac-user-create admin -i izuche@2020 administrator

查看账号

1
ceph dashboard ac-user-show admin

账号相关的命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# ceph dashboard --help

dashboard ac-role-add-scope-perms <rolename> <scopename> <permissions> [<permissions>...] Add the scope permissions for a role
dashboard ac-role-create <rolename> {<description>} Create a new access control role
dashboard ac-role-del-scope-perms <rolename> <scopename> Delete the scope permissions for a role
dashboard ac-role-delete <rolename> Delete an access control role
dashboard ac-role-show {<rolename>} Show role info
dashboard ac-user-add-roles <username> <roles> [<roles>...] Add roles to user
dashboard ac-user-create <username> {<rolename>} {<name>} {<email>} Create a user. Password read from -i <file>
dashboard ac-user-del-roles <username> <roles> [<roles>...] Delete roles from user
dashboard ac-user-delete <username> Delete user
dashboard ac-user-set-info <username> <name> <email> Set user info
dashboard ac-user-set-password <username> Set user password from -i <file>
dashboard ac-user-set-roles <username> <roles> [<roles>...] Set user roles
dashboard ac-user-show {<username>} Show user info
dashboard create-self-signed-cert Create self signed certificate

获取dashboard的地址

1
ceph mgr services
1
2
3
4
{
"dashboard": "http://ceph3:8443/",
"prometheus": "http://ceph3:9283/"
}