如何在Ubuntu 18.04 LTS上安装Ceph存储群集

时间:2020-02-23 14:38:25  来源:igfitidea点击:

在本教程中,我们将介绍Ubuntu 18.04 LTS服务器上全功能Ceph存储群集的安装和配置。
Ceph是一个开源存储解决方案,它实现了分布式对象存储群集,并为对象,块和文件级存储提供接口。

ceph存储群的组件

Ceph存储群体的基本组件:Ceph显示器( ceph-mon)维护群集状态的地图,包括监视器地图,管理器地图,OSD映射和Crush Mapceph OSD:Ceph OSD(对象存储守护程序, ceph-osd)存储数据,处理数据复制,恢复,重新平衡,并通过检查用于心跳的其他CephOSD守护进程来向Ceph监视器和管理器提供一些监控信息。
冗余和高可用性,通常需要至少3个Ceph OSD.mds:Ceph元数据服务器(MDS, ceph-mds)代表Ceph文件系统(即,Ceph块设备和Ceph对象存储不使用MDS)存储元数据。
Ceph元数据服务器允许POSIX文件系统用户执行基本命令(如, ls, find等等)在没有对Ceph存储群体放置巨大的负担。
\经理:Cephoner Manager守护进程( ceph-mgr)负责跟踪运行时度量标准和Ceph集群的当前状态,包括存储利用率,当前性能度量和系统负载。

在Ubuntu 18.04架构上的Ceph集群

我的Ceph Cluster Deployment基于以下系统图

每个服务器的主机名应相应设置,并且 /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。
调用此节点 admin node

192.168.18.74 ceph-admin.example.com ceph-admin

准备Ceph admin节点

我们需要将Ceph存储库添加到Ceph Deploy Admin节点,然后安装Ceph Deploy Package。
我的管理节点是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节点

管理节点必须具有 password-lessssh访问ceph节点。
当Ceph-Deploy登录到Ceph节点时,该特定用户必须具有无密码sudo权限。

在所有Ceph节点上添加SSH用户 - rgw,osd nodes & MonitorS.

export USER_NAME="ceph-admin"
export USER_PASS="Hyman@theitroad"
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

Hyman@theitroad:~$su - ceph-admin
Password: 
Hyman@theitroad:~$sudo su 
Hyman@theitroad:~#

生成SSH键 ceph-admin节点,但不要使用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 Hyman@theitroad
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-admin用户执行此操作)

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节点集群 oneceph显示器和 threecephosd守护进程。
一旦群集到达 active + clean状态,通过添加元数据服务器来扩展它 two更多Ceph监视

让我们首先创建我们的目录 admin node用于维护Ceph-Deploy为群集生成的配置文件和键。

mkdir ceph-deploy
cd ceph-deploy

Ceph-Deploy实用程序将文件输出到当前目录。
在执行Ceph-Deploy时,请确保我们在此目录中。

第1步:初始化Ceph监视节点

从我们创建的Ceph-Deploy目录上运行以下命令,该命令我们创建的配置详细信息

$ceph-deploy new mon01 mon02 mon03

示例输出

Hyman@theitroad:~/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

许多键控将放在工作目录中。

部署Manager守护程序:

ceph-deploy mgr create mon01 mon02 mon03

添加元数据服务器:

ceph-deploy mds create mon01 mon02 mon03

第4步:复制Ceph Admin键

将配置文件和管理员密钥复制到管理节点和Ceph节点:

ceph-deploy admin mon01 mon02 mon03 osd01 osd02 osd03

第5步:添加三个OSD

我假设我们在每个节点中都有一个未使用的磁盘 /dev/device
矿井如下:

Hyman@theitroad:~# 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/vdadev/vdbdev/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集群状态

Hyman@theitroad:~# sudo ceph health
HEALTH_OK
Hyman@theitroad:~# 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 'Hyman@theitroad' 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 Gateway

要使用Ceph的Ceph对象网关组件,必须部署RGW的实例。
执行以下内容以创建RadoS网关的新实例:

$ceph-deploy rgw create {gateway-node}

例子:

$ceph-deploy rgw create rgw

默认情况下,RGW实例将侦听端口 7480
这可以通过编辑来更改 ceph.conf在运行RGW的节点上如下:

[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-部署的任何文件。