• Post author:
  • Post category:ceph
  • Post comments:0评论

建议阅读官方文档: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

发表回复

验证码: − 1 = 3