如何在 Ubuntu 18.04 LTS 上安装 Ceph 存储集群
在本指南中,我们将介绍在 Ubuntu 18.04 LTS 服务器上安装和配置功能齐全的 Ceph 存储集群。 Ceph 是一个开源存储解决方案,实现分布式对象存储集群,并提供对象、块和文件级存储的接口。
Ceph 存储集群的组件
Ceph存储集群的基本组成
- 监视器:Ceph 监视器 (
ceph-mon
) 维护集群状态图,包括监视器图、管理器图、OSD 图和 CRUSH 图 - Ceph OSD:Ceph OSD(对象存储守护进程,
ceph-osd
) - MDS:Ceph 元数据服务器(MDS、
ceph-mds
) - 管理器:Ceph Manager 守护进程 (
ceph-mgr
)
Ubuntu 18.04架构上的Ceph集群
我的Ceph集群部署是基于下面的系统图
应相应地设置每台服务器的主机名,并将 /etc/hosts
文件配置为在所有 Ceph 集群节点上如下所示:
192.168.18.70 rgw.example.com rgw
192.168.18.71 mon01.example.com mon01
192.168.18.72 mon02.example.com mon02
192.168.18.73 mon03.example.com mon03
192.168.18.75 osd01.example.com osd01
192.168.18.76 osd02.example.com osd02
192.168.18.77 osd03.example.com osd03
更改主机名和 IP 地址以适合您的设置。作为先决条件,请确保您的系统已更新
sudo apt update
sudo apt -y upgrade
sudo reboot
系统重新启动后,您就可以开始 Ceph 集群部署。建议多一个节点,其工作是在所有 Ceph 节点上部署 ceph。该节点称为管理节点
192.168.18.74 ceph-admin.example.com ceph-admin
准备 Ceph 管理节点
您需要将 Ceph 存储库添加到 ceph-deploy 管理节点,然后安装 ceph-deploy 软件包。我的管理节点位于 IP 192.168.18.74
导入存储库密钥
wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
将 Ceph 存储库添加到您的系统。此安装将执行 Ceph nautilus
echo deb https://download.ceph.com/debian-nautilus/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
更新您的存储库并安装 ceph-deploy:
sudo apt update
sudo apt -y install ceph-deploy
准备 Ceph 节点
管理节点必须具有无密码
SSH 访问权限
在所有 Ceph 节点上添加 SSH 用户 - rgw、osd 节点和监视器
export USER_NAME="ceph-admin"
export USER_PASS="StrOngP@ssw0rd"
sudo useradd --create-home -s /bin/bash ${USER_NAME}
echo "${USER_NAME}:${USER_PASS}"|sudo chpasswd
echo "${USER_NAME} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/${USER_NAME}
sudo chmod 0440 /etc/sudoers.d/${USER_NAME}
确认用户可以在没有密码提示的情况下运行 sudo
jmutai@osd01:~$ su - ceph-admin
Password:
ceph-admin@osd01:~$ sudo su -
root@ceph-admin:~#
在 ceph-admin
节点上生成 SSH 密钥,但不要使用 sudo 或 root 用户。将密码保留为空:
# su - ceph-admin
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ceph-admin/.ssh/id_rsa):
Created directory '/home/ceph-admin/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ceph-admin/.ssh/id_rsa.
Your public key has been saved in /home/ceph-admin/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:DZZdfRS1Yo+unWAkDum7juShEF67pm7VdSkfWlsCpbA ceph-admin@ceph-admin
The key's randomart image is:
+---[RSA 2048]----+
| . .. .. o=|
| o..o . . o|
| E .= o o o |
| +.O .. + |
| . .. .oS.*. . . |
|. o.....ooo . |
| o.. o . . o . |
| ...= o . . + . |
|oooo o.+. . o |
+----[SHA256]-----+
$ ls /home/ceph-admin/.ssh/
config id_rsa id_rsa.pub known_hosts
配置您的~/.ssh/config
$ cat /home/ceph-admin/.ssh/config
Host osd01
Hostname osd01
User ceph-admin
Host osd02
Hostname osd02
User ceph-admin
Host osd03
Hostname osd03
User ceph-admin
Host osd01
Hostname osd01
User ceph-admin
Host mon01
Hostname mon01
User ceph-admin
Host mon02
Hostname mon02
User ceph-admin
Host mon03
Hostname mon03
User ceph-admin
Host rgw
Hostname rgw
User ceph-admin
将密钥复制到每个 Ceph 节点(以 ceph-admin 用户身份从 Ceph 管理节点执行此操作)
for i in rgw mon01 mon02 mon03 osd01 osd02 osd03; do
ssh-copy-id $i
done
如果所有 Ceph 节点上的远程用户都不是,请将ceph-admin
替换为正确的用户名。
部署 Ceph 存储集群
Ceph 对时钟漂移很敏感,因此请确保在所有 Ceph 节点(尤其是监视器)上设置 NTP。
sudo apt install ntp
我们将创建一个三 Ceph 节点集群,其中包含一个
Ceph Monitor 和三个
Ceph OSD 守护进程。一旦集群达到active + clean
状态,通过添加元数据服务器和另外两个
Ceph Monitor来扩展它
首先,我们在管理节点
上创建一个目录,用于维护 ceph-deploy 为集群生成的配置文件和密钥。
mkdir ceph-deploy
cd ceph-deploy
ceph-deploy 实用程序会将文件输出到当前目录。执行 ceph-deploy 时确保您位于此目录中。
步骤一:初始化ceph监控节点
从您创建的用于保存配置详细信息的 ceph-deploy 目录,在管理节点上运行以下命令
$ ceph-deploy new mon01 mon02 mon03
样本输出
ceph-admin@ceph-admin:~/ceph-deploy$ ceph-deploy new mon01 mon02 mon03
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph-admin/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /usr/bin/ceph-deploy new mon01
[ceph_deploy.cli][INFO ] ceph-deploy options:
[ceph_deploy.cli][INFO ] username : None
[ceph_deploy.cli][INFO ] verbose : False
[ceph_deploy.cli][INFO ] overwrite_conf : False
[ceph_deploy.cli][INFO ] quiet : False
[ceph_deploy.cli][INFO ] cd_conf : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7f4c0720a950>
[ceph_deploy.cli][INFO ] cluster : ceph
[ceph_deploy.cli][INFO ] ssh_copykey : True
[ceph_deploy.cli][INFO ] mon : ['mon01']
[ceph_deploy.cli][INFO ] func : <function new at 0x7f4c07456d70>
[ceph_deploy.cli][INFO ] public_network : None
[ceph_deploy.cli][INFO ] ceph_conf : None
[ceph_deploy.cli][INFO ] cluster_network : None
[ceph_deploy.cli][INFO ] default_release : False
[ceph_deploy.cli][INFO ] fsid : None
[ceph_deploy.new][DEBUG ] Creating new cluster named ceph
[ceph_deploy.new][INFO ] making sure passwordless SSH succeeds
[mon01][DEBUG ] connected to host: ceph-admin
[mon01][INFO ] Running command: ssh -CT -o BatchMode=yes mon01
[mon01][DEBUG ] connection detected need for sudo
[mon01][DEBUG ] connected to host: mon01
[mon01][DEBUG ] detect platform information from remote host
[mon01][DEBUG ] detect machine type
[mon01][DEBUG ] find the location of an executable
[mon01][INFO ] Running command: sudo /bin/ip link show
[mon01][INFO ] Running command: sudo /bin/ip addr show
[mon01][DEBUG ] IP addresses found: [u'192.168.18.71', u'192.168.19.71', u'192.168.121.23']
[ceph_deploy.new][DEBUG ] Resolving host mon01
[ceph_deploy.new][DEBUG ] Monitor mon01 at 192.168.18.71
[ceph_deploy.new][DEBUG ] Monitor initial members are ['mon01']
[ceph_deploy.new][DEBUG ] Monitor addrs are ['192.168.18.71']
[ceph_deploy.new][DEBUG ] Creating a random mon key...
[ceph_deploy.new][DEBUG ] Writing monitor keyring to ceph.mon.keyring...
[ceph_deploy.new][DEBUG ] Writing initial config to ceph.conf..
第 2 步:安装 Ceph 软件包:
在所有节点上安装 Ceph 软件包。
ceph-deploy install mon01 mon02 mon03 osd01 osd02 osd03 rgw
ceph-deploy 实用程序将在每个节点上安装 Ceph。
样本输出
..........................
[osd03][DEBUG ] Setting up ceph-base (13.2.2-1bionic) ...
[osd03][DEBUG ] Setting up python-pecan (1.2.1-2) ...
[osd03][DEBUG ] update-alternatives: using /usr/bin/python2-pecan to provide /usr/bin/pecan (pecan) in auto mode
[osd03][DEBUG ] update-alternatives: using /usr/bin/python2-gunicorn_pecan to provide /usr/bin/gunicorn_pecan (gunicorn_pecan) in auto mode
[osd03][DEBUG ] Setting up ceph-osd (13.2.2-1bionic) ...
[osd03][DEBUG ] chown: cannot access '/var/lib/ceph/osd/*/block*': No such file or directory
[osd03][DEBUG ] Created symlink /etc/systemd/system/multi-user.target.wants/ceph-osd.target -> /lib/systemd/system/ceph-osd.target.
[osd03][DEBUG ] Created symlink /etc/systemd/system/ceph.target.wants/ceph-osd.target -> /lib/systemd/system/ceph-osd.target.
[osd03][DEBUG ] Setting up ceph-mds (13.2.2-1bionic) ...
[osd03][DEBUG ] Created symlink /etc/systemd/system/multi-user.target.wants/ceph-mds.target -> /lib/systemd/system/ceph-mds.target.
[osd03][DEBUG ] Created symlink /etc/systemd/system/ceph.target.wants/ceph-mds.target -> /lib/systemd/system/ceph-mds.target.
[osd03][DEBUG ] Setting up ceph-mon (13.2.2-1bionic) ...
[osd03][DEBUG ] Created symlink /etc/systemd/system/multi-user.target.wants/ceph-mon.target -> /lib/systemd/system/ceph-mon.target.
[osd03][DEBUG ] Created symlink /etc/systemd/system/ceph.target.wants/ceph-mon.target -> /lib/systemd/system/ceph-mon.target.
[osd03][DEBUG ] Setting up ceph-mgr (13.2.2-1bionic) ...
[osd03][DEBUG ] Created symlink /etc/systemd/system/multi-user.target.wants/ceph-mgr.target -> /lib/systemd/system/ceph-mgr.target.
[osd03][DEBUG ] Created symlink /etc/systemd/system/ceph.target.wants/ceph-mgr.target -> /lib/systemd/system/ceph-mgr.target.
[osd03][DEBUG ] Setting up ceph (13.2.2-1bionic) ...
[osd03][DEBUG ] Processing triggers for libc-bin (2.27-3ubuntu1) ...
[osd03][DEBUG ] Processing triggers for ureadahead (0.100.0-20) ...
[osd03][DEBUG ] Processing triggers for systemd (237-3ubuntu10) ...
[osd03][INFO ] Running command: sudo ceph --version
[osd03][DEBUG ] ceph version 13.2.2 (02899bfda814146b021136e9d8e80eba494e1126) mimic (stable)
步骤 3:部署初始监视器并收集密钥:
通过运行以下命令创建初始监视器:
ceph-deploy mon create-initial
许多密钥环将放置在您的工作目录中。
部署管理器守护进程:
ceph-deploy mgr create mon01 mon02 mon03
添加元数据服务器:
ceph-deploy mds create mon01 mon02 mon03
第 4 步:复制 Ceph 管理密钥
将配置文件和管理密钥复制到您的管理节点和 Ceph 节点:
ceph-deploy admin mon01 mon02 mon03 osd01 osd02 osd03
第 5 步:添加三个 OSD
我假设每个节点中都有一个未使用的磁盘,名为 /dev/device
。我的如下所示:
root@osd01:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 32G 0 disk
|-sda1 8:1 0 487M 0 part /boot
|-sda2 8:2 0 1.9G 0 part [SWAP]
`-sda3 8:3 0 29.6G 0 part /
vdb 252:0 0 5G 0 disk
vdc 252:16 0 5G 0 disk
vdd 252:32 0 5G 0 disk
我有三个设备可供使用:
- /dev/vda
- 开发/vdb
- 开发/vdc
确保设备当前未在使用且不包含任何重要数据。使用的语法是:
ceph-deploy osd create --data {device} {ceph-node}
就我而言,我将运行:
for i in vdb vdc vdd; do
for j in osd01 osd02 osd03; do
ceph-deploy osd create --data /dev/$i $j
done
done
注意:如果您要在 LVM 卷上创建 OSD,--data
的参数必须是 volume_group/lv_name
,而不是路径到卷的块设备。
lsblk
命令的输出应该已经改变
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 32G 0 disk
|-sda1 8:1 0 487M 0 part /boot
|-sda2 8:2 0 1.9G 0 part [SWAP]
`-sda3 8:3 0 29.6G 0 part /
vdb 252:0 0 5G 0 disk
`-ceph--908c8792--04e8--414f--8430--faa78e9b18eb-osd--block--275c9d8b--3825--4898--9b3b--5ea080fd7137 253:0 0 5G 0 lvm
vdc 252:16 0 5G 0 disk
`-ceph--c79a5159--3980--47e8--b649--ed0c44d32d51-osd--block--a50c2ebc--8d65--4d16--9196--6f741606b3a2 253:1 0 5G 0 lvm
vdd 252:32 0 5G 0 disk
`-ceph--594ff477--943e--49d8--8e08--addf5dbccca3-osd--block--5b71bad9--7fa8--41af--a3af--48af1219aafd 253:2 0 5G 0 lvm
第 6 步:检查集群的运行状况。
检查 Ceph 集群状态
root@osd02:~# sudo ceph health
HEALTH_OK
root@osd02:~# sudo ceph status
cluster:
id: 5594514c-4d70-4ec8-a74e-e54ac2c1994f
health: HEALTH_OK
services:
mon: 1 daemons, quorum mon01
mgr: osd01(active)
osd: 9 osds: 9 up, 9 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 9.0 GiB used, 36 GiB / 45 GiB avail
pgs:
添加新的 Ceph 监视器后,Ceph 将开始
ceph quorum_status --format json-pretty
第7步:启用Ceph仪表板
启用 Ceph 仪表板模块:
sudo ceph mgr module enable dashboard
sudo ceph mgr module ls
为仪表板生成自签名证书:
sudo ceph dashboard create-self-signed-cert
为仪表板创建用户:
sudo ceph dashboard ac-user-create admin 'Str0ngP@sswOrd' administrator
启用对象网关管理前端:
$ sudo radosgw-admin user create --uid=admin --display-name='Ceph Admin' --system
最后,向仪表板提供凭据:
sudo ceph dashboard set-rgw-api-access-key <api-access-key>
sudo ceph dashboard set-rgw-api-secret-key <api-secret-key>
如果您在对象网关设置中使用自签名证书,则应禁用证书验证:
sudo ceph dashboard set-rgw-api-ssl-verify False
步骤8:添加Rados网关
要使用 Ceph 的 Ceph 对象网关组件,您必须部署 RGW 实例。执行以下命令创建 Rados Gateway 的新实例:
$ ceph-deploy rgw create {gateway-node}
例子 :
$ ceph-deploy rgw create rgw
默认情况下,RGW 实例将侦听端口 7480
。可以通过在运行 RGW 的节点上编辑 ceph.conf
来更改此设置,如下所示:
[client]
rgw frontends = civetweb port=80
重置您的 Ceph 集群
如果您在任何时候遇到麻烦并且想要重新开始,请执行以下命令来清除 Ceph 软件包,并清除其所有数据和配置:
ceph-deploy purge {ceph-node} [{ceph-node}]
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
rm ceph.*
如果执行purge,则必须重新安装Ceph。最后一个 rm 命令会删除先前安装期间由 ceph-deploy 本地写入的所有文件。
在我们的下一篇文章中,我将介绍如何在 Ceph 上存储和检索对象以及如何配置 Ceph 客户端。
查看其他类似指南:
在 Ceph 对象存储中启用和配置 REST API 访问
在Ceph存储集群中创建池
如何为 Ceph 对象网关存储配置 AWS S3 CLI
使用 Cephfs 为 Kubernetes 提供 Ceph 持久存储
在 CentOS 8/CentOS 7 上使用 Heketi 设置 GlusterFS 存储
如何使用 Minio 设置 S3 兼容的对象存储服务器
在 CentOS 8/CentOS 7 上使用 Heketi 设置 GlusterFS 存储