ceph自动化部署

一、概述

Ceph当前的自动化部署有两个,分别是ceph-deploy和ceph-ansible,语言都是python,对应的github库地址为:
ceph-deploy: https://github.com/ceph/ceph-deploy
ceph-ansible: https://github.com/ceph/ceph-ansible

ceph-deploy在手动部署中用的比较多,要实现自动化部署,必须再写脚本执行;
ceph-ansible基于ansible,可以实现根据配置文件的ceph自动化部署;

我在之前写过一个基于ceph-deploy部署ceph的自动化脚本,用起来比较方便熟练;
所以这里我写的自动化部署是基于自写脚本调用ceph-deploy的自动化部署;

二、脚本

这里有两个文件:

1
2
root@ceph0:~/ceph-deploy# ls
ceph-auto-deploy.py deploy.conf
  • ceph-auto-deploy.py: 执行自动化部署的python脚本
  • deploy.conf:ceph deploy的配置文件,里面包括了ceph cluster的配置信息,ceph集群的参数优化信息等;

deploy.conf

该文件里需要用户配置的信息如下:(在文件底部)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
##################
## host-specific
## Put your settings for each node here, these settings will be removed
## from the ultimate ceph.conf
[host-specific]
mon_hosts = ceph0, ceph1, ceph2
osd_hosts = ceph0, ceph1
rgw_hosts = ceph0

# Example configuration use file system path
#osd.ceph0.paths = /var/lib/ceph/osd/ceph-0, /var/lib/ceph/osd/ceph-1
#osd.ceph1.paths = /var/lib/ceph/osd/ceph-2, /var/lib/ceph/osd/ceph-3
osd.ceph0.devs = vdb:vde, vdc:vde, vdd:vde
osd.ceph1.devs = vdb, vdc, vdd

## for multi network settings
## public network 1;cluster network1 = Host1, Host2, Host3
## public network 2;cluster network2 = Host4, Host5
192.10.4.0/24;192.10.4.0/24 = ceph0, ceph1, ceph2

指定Ceph组件部署在哪些Host上:

  • mon_hosts = ceph0, ceph1, ceph2
    • Ceph Monitors部署ceph0, ceph1, ceph2上
  • osd_hosts = ceph0, ceph1, ceph2
    • Ceph OSDs部署ceph0, ceph1上
  • rgw_hosts = ceph0
    • Ceph RadosGW部署ceph0上(若不配置RadosGW,可注释掉改行)

指定每个部署OSDs的host上,哪些磁盘来启动osd:(于上述配置osd_hosts对应)

  • 1
    osd.ceph0.devs = vdb:vde, vdc:vde, vdd:vde

    在ceph0上,启动 vdb, vdc, vde三个osd,vde作为这三个osd的journal盘

  • 1
    osd.ceph1.devs = vdb, vdc, vdd

    在ceph1上,启动 vdb, vdc, vde三个osd,每个盘会自动格式化一个分区作为journal

注: 在deploy.conf里可配置journal size

ceph-auto-deploy.py

该文件是自动化部署ceph的执行脚本,支持的命令有:

1
2
3
4
5
6
7
8
9
10
root@ceph0:~/ceph-deploy# python ceph-auto-deploy.py --help
ceph-auto-deploy.py usage:
python ceph-auto-deploy.py run this script with default configuration
-h, --help print help message
-v, --version print script version
-c [configure file] specify the configure file
-p just purge older ceph and ceph data
-r do ceph purge and ceph reinstall
--just-deploy-osds just do deploy ceph osds
--debug just print out the commands

常用的命令有:

  • python ceph-auto-deploy.py
    根据deploy.conf的配置,部署ceph集群
  • python ceph-auto-deploy.py -p
    根据deploy.conf的配置,删除旧ceph系统和其中ceph相关数据
  • python ceph-auto-deploy.py -r
    根据deploy.conf的配置,执行purge后,重新安装ceph系统相关packages(不会部署ceph集群)

三、依赖

执行上述python自动化部署ceph集群,依赖ceph-deploy,整体架构如下:

ceph-deploy-arch

其中ceph-deploy所在节点也可以是ceph的node节点。

所以有如下两个依赖:

  1. admin-node上安装ceph-deploy
  2. admin-node到ceph nodes的无密码登陆

四、部署步骤

这里以三个虚拟机自动化部署ceph集群为例,说明该自动化脚本的使用:

三个节点分别为:

node Hostname Network Devices
node1 ceph0 192.10.4.109 vdb, vdc, vdd, vde
node2 ceph1 192.10.4.110 vdb, vdc, vdd, vde
node3 ceph2 192.10.4.111 vdb, vdc, vdd, vde

每个node节点的系统信息为:

1
2
3
4
5
6
root@ceph0:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.1 LTS
Release: 16.04
Codename: xenial

确定nodes节点角色

首先我们需要确定使用哪个node作为admin-node,然后确定ceph集群nodes节点都部署哪些组件,包括Monitor、OSD、RadosGW、MDS等;

根据ceph集群部署需求,我们可以做如下node节点角色规划:

node Hostname Role ceph Network Ceph Component OSD/Journal Devices
node1 ceph0 admin-node ceph-node 192.10.4.109 Monitor, OSD OSD: vdb, vdc, vdd Journal: vde
node2 ceph1 ceph-node 192.10.4.110 Monitor, OSD OSD: vdb, vdc, vdd Journal为OSD盘的一个分区
node3 ceph2 ceph-node 192.10.4.111 Monitor 不配置OSD

注:上述规划与第二章节中的 deploy.conf 配置保持一致

admin-node节点安装ceph-deploy

如前文所述,需要在选择的admin-node上安装自动化部署依赖的ceph-deploy,步骤如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
root@ceph0:~# apt-get install -y ceph-deploy
root@ceph0:~# ceph-deploy --help
usage: ceph-deploy [-h] [-v | -q] [--version] [--username USERNAME]
[--overwrite-conf] [--cluster NAME] [--ceph-conf CEPH_CONF]
COMMAND ...

Easy Ceph deployment

-^-
/ \
|O o| ceph-deploy v1.5.32
).-.(
'/|||\`
| '|` |
'|`

Full documentation can be found at: http://ceph.com/ceph-deploy/docs

...

获取pkg源的ceph版本信息

我们当前推荐安装Ceph的Jewel版本(10.2.*),在Ubuntu系统上,我们可以通过下面命令获取其对应的Ceph pkgs版本信息:

1
2
3
4
5
6
7
8
9
root@ceph0:~# apt-get update
...
root@ceph0:~# apt-cache show ceph
Package: ceph
Architecture: amd64
Version: 10.2.9-0ubuntu0.16.04.1
Priority: optional
Section: admin
Origin: Ubuntu

注:若对应Ceph不是Jewel版本,需要更换pkg源

admin-node节点配置无秘访问ceph nodes

自动化部署脚本会通过ssh自动在ceph nodes节点执行命令,ceph-deploy也依赖ssh的无秘访问nodes节点,所以这里我们要先配置这些:

  1. /etc/hosts上添加ceph nodes节点的hostname与ip的对应关系
1
2
3
4
5
vim /etc/hosts
...
192.10.4.109 ceph0
192.10.4.110 ceph1
192.10.4.111 ceph2
  1. 生成admin-node节点的ssh key
1
2
3
4
root@ceph0:~# ssh-keygen
...
root@ceph0:~# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqIu+xLrVo0e0++z3i/zdAbZqqqWeyKshA47oUJzQneqD9HP39AJ8btGS5Pow4I/V/1zGsRJ2iV4EDxMymw2wwJ9LyxLl81WsfhSsuOVo7uvhlu3PiU6xDpr8UK66Sv7lquQ67yx9UnH9Vra2TQFsWPwbiPZm+N+qdXuXHeX4RVpOKlKmtEWN40Q3AZt3sbFe5hfAfP08v8XM70znFIEHKbhlN4XpLmuQxZ+vdxAY7kOA1EUugSZpc5nfc61SnCEzhI0stW+ccDsD/vmZsnCtITitS0YqGYJYvGHziKWfmZAw3ZtQd9CQIlZHnmqyA7vF4eoFSoj6YhkI4ozHzxLqt root@ceph0
  1. 在其他节点填入ceph0的public key
1
2
root@ceph0:~# cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqIu+xLrVo0e0++z3i/zdAbZqqqWeyKshA47oUJzQneqD9HP39AJ8btGS5Pow4I/V/1zGsRJ2iV4EDxMymw2wwJ9LyxLl81WsfhSsuOVo7uvhlu3PiU6xDpr8UK66Sv7lquQ67yx9UnH9Vra2TQFsWPwbiPZm+N+qdXuXHeX4RVpOKlKmtEWN40Q3AZt3sbFe5hfAfP08v8XM70znFIEHKbhlN4XpLmuQxZ+vdxAY7kOA1EUugSZpc5nfc61SnCEzhI0stW+ccDsD/vmZsnCtITitS0YqGYJYvGHziKWfmZAw3ZtQd9CQIlZHnmqyA7vF4eoFSoj6YhkI4ozHzxLqt root@ceph0

注:因为ceph0既是admin-node,也是ceph node,所以也需要配置本身的ssh无秘访问

admin-node节点执行自动化部署

之前的准备工作做完后,就可以通过自动化脚本部署Ceph集群了

  1. 获取ceph deploy自动化脚本

GitLab地址:https://github.com/ictfox/ceph-deploy

1
2
3
root@ceph0:~# cd ceph-deploy
root@ceph0:~/ceph-deploy# ls
ceph-auto-deploy.py deploy.conf
  1. 根据第二章节介绍,配置 deploy.conf 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
root@ceph0:~/ceph-deploy# vim deploy.conf
##################
## host-specific
## Put your settings for each node here, these settings will be removed
## from the ultimate ceph.conf
[host-specific]
mon_hosts = ceph0, ceph1, ceph2
osd_hosts = ceph0, ceph1
rgw_hosts = ceph0

# Example configuration use file system path
#osd.ceph0.paths = /var/lib/ceph/osd/ceph-0, /var/lib/ceph/osd/ceph-1
#osd.ceph1.paths = /var/lib/ceph/osd/ceph-2, /var/lib/ceph/osd/ceph-3
osd.ceph0.devs = vdb:vde, vdc:vde, vdd:vde
osd.ceph1.devs = vdb, vdc, vdd

## for multi network settings
## public network 1;cluster network1 = Host1, Host2, Host3
## public network 2;cluster network2 = Host4, Host5
192.10.4.0/24;192.10.4.0/24 = ceph0, ceph1, ceph2
  1. 安装Ceph对应packages
1
2
root@ceph0:~# python ceph-auto-deploy.py -r
...

这个会花费些时间,但每个Ceph node上安装ceph相关pkgs是并行的,时间不会太长;

  1. 执行命令,自动化部署Ceph集群
1
2
root@ceph0:~# python ceph-auto-deploy.py
...

这个会花费较长时间,因为ceph-deploy部署osd时是串行的,为了使得每个Host上的osd id是连续的,方便之后ceph集群使用。

中间也可能出错,错误信息会输出到屏幕上,详细错误信息也会输出到同目录下的文件:ceph-deploy-ceph.log 里,方便出错时候查看定位问题。

支持原创