建议阅读官方文档:https://docs.ceph.com/en/latest/
一、介绍
Ceph 分布式存储系统,支持对象存储、块设备服务和文件存储。一个 Ceph 存储集群至少需要一个 Ceph Monitor、Ceph Manager 和 Ceph OSD。运行 Ceph 文件系统客户端时也需要 Ceph 元数据服务器。
Monitor:Ceph Monitor ( ceph-mon) 维护集群状态的映射,包括Monitor映射、Manager映射、OSD 映射、MDS 映射和 CRUSH 映射。这些映射是 Ceph 守护进程相互协调所需的关键集群状态。监视器还负责管理守护进程和客户端之间的身份验证。通常至少需要三个监视器才能实现冗余和高可用性。
Manager:Ceph Manager ( ceph-mgr) 负责跟踪运行时指标和 Ceph 集群的当前状态,包括存储利用率、当前性能指标和系统负载。Ceph 管理器守护进程还托管基于 Python 的模块来管理和公开 Ceph 集群信息,包括基于 Web 的 Ceph 仪表板和 REST API。高可用性通常至少需要两个管理器。
OSD:Ceph OSD(ceph-osd)存储数据,处理数据复制、恢复、重新平衡,并通过检查其他 Ceph OSD 守护进程的心跳来向 Ceph 监视器和管理器提供一些监控信息。通常至少需要 3 个 Ceph OSD 来实现冗余和高可用性。
MDS:Ceph Metadata Server(ceph-mds)代表 Ceph 文件系统存储元数据(Ceph 块设备和 Ceph 对象存储不使用 MDS)。Ceph的元数据服务器允许 POSIX 文件系统的用户来执行基本的命令(如 ls、find) ,而不会给Ceph存储集群带来巨大负担。
Ceph 将数据作为对象存储在逻辑存储池中。使用 CRUSH算法,Ceph 计算出哪个归置组应该包含该对象,并进一步计算出哪个 Ceph OSD 应该存储该归置组。CRUSH 算法使 Ceph 存储集群能够动态扩展、重新平衡和恢复。
二、环境
Ceph 部署版本选择Pacific,方式采用官方推荐的 Cephadm。cephadm 需要容器支持(podman 或 docker)和 Python 3,因此要先准备好,这里容器选择podman。另外时间同步(chrony 或者 NTP)也是必不可少的,这里用chrony。
注意,Pacific 版不支持Centos 7,支持Centos 8、Ubuntu 20.04、Ubuntu 18.04、Debian 10。
软件版本信息表:
软件 | 版本 |
---|---|
Ceph | 16.2.5 |
Podman | 3.2.3 |
Python | 3.8.10 |
环境信息表:
主机名 | 系统 | 外部IP | 内部IP | 磁盘 |
---|---|---|---|---|
ceph1 | Ubuntu 20.04.2 | 10.0.0.100 | 192.168.100.100 | 1*20G,2*10G |
ceph2 | Ubuntu 20.04.2 | 10.0.0.101 | 192.168.100.101 | 1*20G,2*10G |
ceph3 | Ubuntu 20.04.2 | 10.0.0.102 | 192.168.100.102 | 1*20G,2*10G |
三、基础准备
1、主机映射
所有节点添加一下主机映射:
root@ceph:~# vim /etc/hosts
192.168.100.100 ceph1
192.168.100.101 ceph2
192.168.100.102 ceph3
2、时间同步
ceph1:
root@ceph1:~# apt install -y chrony
root@ceph1:~# sed -i 's/^pool/#&/' /etc/chrony/chrony.conf
root@ceph1:~# cat >> /etc/chrony/chrony.conf << EOF
#server ntp1.aliyun.com iburst
local stratum 10
allow 192.168.100.0/24
EOF
root@ceph1:~# systemctl restart chrony
root@ceph1:~# systemctl enable chrony
其它ceph节点:
root@ceph:~# apt install -y chrony
root@ceph:~# sed -i 's/^pool/#&/' /etc/chrony/chrony.conf
root@ceph:~# cat >> /etc/chrony/chrony.conf << EOF
server 192.168.100.100 iburst
EOF
root@ceph:~# systemctl restart chrony
root@ceph:~# systemctl enable chrony
root@ceph2:~# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* ceph1 10 6 17 4 +998ns[+9670ns] +/- 141u
3、Podman
所有节点执行:
. /etc/os-release
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key" | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install podman
设置镜像加速器(阿里云镜像加速器):
mv /etc/containers/registries.conf{,.bak}
cat >> /etc/containers/registries.conf << EOF
unqualified-search-registries = ["docker.io"]
[[registry]]
prefix = "docker.io"
location = "xxxxxx.mirror.aliyuncs.com"
EOF
四、部署
1、前置准备
所有节点都执行。
安裝cephadmn,使用 curl 获取最新版本的独立脚本,尽管独立脚本足以启动集群,但将 cephadm 命令安装在主机上会很方便。
root@ceph:~# curl --silent --remote-name --location https://github.com/ceph/ceph/raw/pacific/src/cephadm/cephadm
root@ceph:~# chmod +x cephadm
root@ceph:~# ./cephadm add-repo --release pacific
root@ceph:~# ./cephadm install
root@ceph:~# which cephadm
/usr/sbin/cephadm
安装 ceph-common软件包,其中包含所有 ceph 命令,包括ceph、rbd、mount.ceph(用于挂载 CephFS 文件系统)等:
root@ceph:~# cephadm add-repo --release pacific
root@ceph:~# cephadm install ceph-common
root@ceph:~# ceph orch status
Backend: cephadm
Available: Yes
Paused: No
2、集群引导
引导集群的建立:
root@ceph1:~# cephadm bootstrap --mon-ip 192.168.100.100
......
Ceph Dashboard is now available at:
URL: https://ceph1:8443/
User: admin
Password: 1spuyyygx5
Enabling client.admin keyring and conf on hosts with "admin" label
You can access the Ceph CLI with:
sudo /usr/sbin/cephadm shell --fsid 1bdcdefe-1455-11ec-9a76-9553eeb69f0a -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring
......
此命令会进行以下操作:
• 在本地主机上为新集群创建一个监视器(ceph-mon)和管理器守护进程(ceph-mgr)。
• 为 Ceph 集群生成一个新的SSH密钥并将其添加到root用户的 authorized_keys 文件中。
• 将公钥的副本写入/etc/ceph/ceph.pub
• 将最小配置文件写入/etc/ceph/ceph.conf. 需要此文件才能与新集群通信。
• 将client.admin管理(特权!)密钥的副本写入/etc/ceph/ceph.client.admin.keyring.
• 将_admin标签添加到引导主机。默认情况下,这个标签的任何主机将(也)获得的副本/etc/ceph/ceph.conf和 /etc/ceph/ceph.client.admin.keyring。
dashboard 也会一起安装好,我们可以通过以下地址访问。
root@ceph1:~# ceph mgr services
{
"dashboard": "https://192.168.100.100:8443/",
"prometheus": "http://192.168.100.100:9283/"
}
看下起来了那些容器:
root@ceph1:~# podman ps --format "table {{.Names}}"
ceph-1bdcdefe-1455-11ec-9a76-9553eeb69f0a-mon.ceph1
ceph-1bdcdefe-1455-11ec-9a76-9553eeb69f0a-mgr.ceph1.pfwzam
ceph-1bdcdefe-1455-11ec-9a76-9553eeb69f0a-crash.ceph1
ceph-1bdcdefe-1455-11ec-9a76-9553eeb69f0a-node-exporter.ceph1
ceph-1bdcdefe-1455-11ec-9a76-9553eeb69f0a-prometheus.ceph1
ceph-1bdcdefe-1455-11ec-9a76-9553eeb69f0a-alertmanager.ceph1
此时已经运行了以下组件:
• ceph-mgr ceph管理程序
• ceph-monitor ceph监视器
• ceph-crash 崩溃数据收集模块
• prometheus prometheus监控组件
• grafana 监控数据展示dashboard
• alertmanager prometheus告警组件
• node_exporter prometheus节点数据收集组件
注,配置文件的修改,不能直接修改/etc/ceph/ceph.conf
,需要进入到容器内修改。当然本篇文章不涉及配置文件各种参数的配置,本篇内容只是部署。
root@ceph1:/etc/ceph# cephadm shell
Inferring fsid 1bdcdefe-1455-11ec-9a76-9553eeb69f0a
Inferring config /var/lib/ceph/1bdcdefe-1455-11ec-9a76-9553eeb69f0a/mon.ceph1/config
Using recent ceph image docker.io/ceph/ceph@sha256:829ebf54704f2d827de00913b171e5da741aad9b53c1f35ad59251524790eceb
root@ceph1:/# ls /etc/ceph/
ceph.conf ceph.keyring rbdmap
3、添加主机
# 现在集群就ceph1本身
oot@ceph1:~# ceph orch host ls
HOST ADDR LABELS STATUS
ceph1 192.168.100.100 _admin
# 将集群的公钥钥添加到 root 用户 authorized_keys 文件中
root@ceph1:~# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph2
root@ceph1:~# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph3
# 添加目标主机到集群中,nodex是目标机器主机名,这个要对应
root@ceph1:~# ceph orch host add ceph2 192.168.100.101
root@ceph1:~# ceph orch host add ceph3 192.168.100.102
root@ceph1:~# ceph orch host ls
HOST ADDR LABELS STATUS
ceph1 192.168.100.100 _admin
ceph2 192.168.100.101
ceph3 192.168.100.102
注:
添加主机命令格式:
ceph orch host add *<newhost>* [*<ip>*] [*<label1> ...*]
我们可以为新主机添加一个或多个标签来标记。例如,默认情况下,_admin 标签将使 cephadm 在新主机的 /etc/ceph 目录下维护 ceph.conf 文件副本和 client.admin 密钥文件。
4、放置规范
放置规范,即部署服务的编排器,会遵从放置规范去在哪里部署守护进程,以及要部署多少个守护进程。
默认情况下,Cephadm 会按照放置规范自动在集群中部署服务,不过 Cephadm 不会在带有 _no_schedule 标签的主机上部署守护进程。
我们来列出下目前编排器已知的服务:
root@ceph1:~# ceph orch ls
NAME PORTS RUNNING REFRESHED AGE PLACEMENT
alertmanager ?:9093,9094 1/1 8m ago 73m count:1
crash 3/3 8m ago 73m *
grafana ?:3000 0/1 - 73m count:1
mgr 2/2 8m ago 73m count:2
mon 3/5 8m ago 73m count:5
node-exporter ?:9100 3/3 8m ago 73m *
osd.all-available-devices 4/7 - 9m *
prometheus ?:9095 1/1 8m ago 73m count:1
上图中,PLACEMENT 中*表示部署在所有主机,count:1 表示使用了指定数量主机(还会出现明确的主机名,表示直接使用了明确指定主机)。RUNNING 表示实现期望运行的 Deamon 和正在运行的 Deamon 比例,如 mon 显示3/5 表示 mon 默认指定了5个 Deamon,但现在只有3台主机,所有只有3个在运行,当然这个期望数量也是可以修改的。PORTS 表示该 Service 暴露的 IP 和端口。
查看集群中某主机上部署的服务:
root@ceph1:~# ceph orch ps ceph2
NAME HOST PORTS STATUS REFRESHED AGE MEM USE MEM LIM VERSION IMAGE ID CONTAINER ID
crash.ceph2 ceph2 running (43m) 54s ago 43m 7121k - 16.2.5 6933c2a0b7dd 6fa4ec98aa28
mgr.ceph2.kdnwml ceph2 *:8443,9283 running (42m) 54s ago 42m 381M - 16.2.5 6933c2a0b7dd fe74f7479c5e
mon.ceph2 ceph2 running (42m) 54s ago 42m 244M 2048M 16.2.5 6933c2a0b7dd abd4ffd0cc05
node-exporter.ceph2 ceph2 *:9100 running (42m) 54s ago 42m 10.0M - 0.18.1 e5a616e4b9cf 77c00966aea2
5、OSD
部署OSD的设备必须满足以下所有条件,才认为存储设备可用:
• 设备必须没有分区。
• 设备不得具有任何 LVM 状态。
• 设备不得被挂载。
• 设备不得包含文件系统。
• 设备不得包含 Ceph BlueStore OSD。
• 设备必须大于 5 GB。
有两种方式创建OSD:
# 自动。自动将集群任何可用和未使用的存储设备创建成OSD。
ceph orch apply osd --all-available-devices
# 手动。从特定主机上的特定设备创建OSD。
ceph orch daemon add osd *<host>*:*<device-path>*
这里我们使用自动:
root@ceph1:~# ceph orch apply osd --all-available-devices
Scheduled osd.all-available-devices update...
root@ceph1:~# ceph orch device ls
Hostname Path Type Serial Size Health Ident Fault Available
ceph1 /dev/vdb hdd e7e801aa-12d7-4b48-b 10.7G Unknown N/A N/A Yes
ceph1 /dev/vdc hdd ad2d2070-0b75-4e5d-a 10.7G Unknown N/A N/A Yes
ceph2 /dev/vdb hdd 55d847d4-e703-4658-a 10.7G Unknown N/A N/A Yes
ceph2 /dev/vdc hdd 31448d57-20d7-4262-9 10.7G Unknown N/A N/A Yes
ceph3 /dev/vdb hdd 251ad1e5-d9b1-47b2-8 10.7G Unknown N/A N/A Yes
ceph3 /dev/vdc hdd d9c5436f-224c-423a-8 10.7G Unknown N/A N/A Yes
root@ceph1:~# ceph osd status
ID HOST USED AVAIL WR OPS WR DATA RD OPS RD DATA STATE
0 ceph2 6936k 9.98G 0 0 0 0 exists,up
1 ceph1 6808k 9.98G 0 0 0 0 exists,up
2 ceph2 7000k 9.98G 0 0 0 0 exists,up
3 ceph1 6680k 9.98G 0 0 0 0 exists,up
4 ceph3 6612k 9.98G 0 0 0 0 exists,up
5 ceph3 6680k 9.98G 0 0 0 0 exists,up
6、RGW
7、MDS
8、NFS
9、ISCSI
参考文章:
https://docs.ceph.com/en/latest/
https://blog.51cto.com/renlixing/3134294