接上篇: 使用ceph-deploy安装Ceph 12.x(二) 安装前的准备工作
一切准备工作就绪,下面开始介绍Ceph的安装工作。
在接下来的安装中,和Ceph官网的文档略有不同,具体如下。
第一阶段 1 monitor + 1 manager + 6 osd daemon
第二阶段 扩展集群:添加metadata server, monitors, managers, RGW
注意:
官网文档在这里并没有提一个manager的部署,而实际下文中是要求Luminous必须部署的。
第一阶段 1 monitor + 1 manager + 6 osd daemon
Step 1. 创建工作目录
本步骤在admin node上完成。
mkdir my-cluster
cd my-cluster
ceph-deploy工具将输出一些文件到这个my-cluster目录。要确保每次运行ceph-deploy命令都是在这个目录下。
注意:
不要使用sudo来运行ceph-deploy命令,也不要在使用非root用户时以root用户身份运行ceph-deploy命令。因为ceph-deploy不会把sudo命令也发送到远端的ceph node上执行。(注:笔者是直接在root帐号下运行ceph-deploy命令的)
Step 2. 从头开始(Starting Over)
在任何时候当你陷入困境希望从头开始部署时,就执行以下的命令以清空Ceph的package以及擦除它的数据和配置:
ceph-deploy purge node-1 node-2 node-3
ceph-deploy purgedata node-1 node-2 node-3
ceph-deploy forgetkeys
rm ceph.*
Step 3. 创建一个集群
1. 创建一个集群
ceph-deploy new node-1
这个命令结束后,会在my-cluster目录下看到:
ceph.conf, ceph.mon.keyring, log文件
2. 添加public network的配置到ceph.conf
添加下面这句话到 ceph.conf 文件的 [global] 段
public network = 192.168.30.0/24
见上篇博客,以上网段是public网络。
3. 安装Ceph的packages
ceph-deploy install node-1 node-2 node-3
4. 部署第一个monitor并产生keyring
ceph-deploy mon create-initial
注意:
若出现类似于”Unable to find /etc/ceph/ceph.client.admin.keyring”这样的错误,则要确定在ceph.conf文件中的mon_host的IP应该是public IP,而不是其他IP.
当这一步结束时,my-cluster目录会出现如下的keyring:
ceph.client.admin.keyring
ceph.bootstrap-mgr.keyring
ceph.bootstrap-osd.keyring
ceph.bootstrap-mds.keyring
ceph.bootstrap-rgw.keyring
ceph.bootstrap-rbd.keyring
5. 使用ceph-deploy拷贝配置文件和admin key到ceph nodes.
这样就可以使用ceph CLI来执行命令了,而不用每次都指定monitor的地址和ceph.client.admin.keyring.
ceph-deploy admin node-1 node-2 node-3
6. 部署一个manager daemon. (Luminous开始要求的)
ceph-deploy mgr create node-1
7. 添加6个osd
ceph-deploy osd create node-1 --data /dev/sda
ceph-deploy osd create node-1 --data /dev/sdb
ceph-deploy osd create node-2 --data /dev/sda
ceph-deploy osd create node-2 --data /dev/sdb
ceph-deploy osd create node-3 --data /dev/sda
ceph-deploy osd create node-3 --data /dev/sdb
注意:
因为当初在给虚拟机添加磁盘的时候,选用的是iscsi的磁盘,所以这里通过fdisk -l命令看见的是sda/sdb,而若是添加的virtio的磁盘,则会看见vda/vdb.
8. 健康验证
做完上述这些步骤之后,就可以检查集群的健康状况了。
ssh node-1 sudo ceph -s
第二阶段 扩展集群:添加metadata server, monitors, managers, RGW
对比第一阶段的工作,第二阶段要扩展的是:
- 添加1个metadata server
- 添加2个monitor
- 添加2个manager
- 添加1个RGW
1. 添加一个metadata server
如果要使用CephFS,就必须至少添加一个metadata server.
ceph-deploy mds create node-1
2. 添加2个monitors,达到3个monitors
为达到High Availability的效果,需要配置多余1个monitor,以防止一个monitor宕掉时整个ceph集群不可用。Ceph使用了Paxos算法,一般monitor应该是奇数个(虽然也不是必须的)。
ceph-deploy mon add node-2
ceph-deploy mon add node-3
注意:
在ceph-deploy 2.0中,似乎ceph-deploy mon add node-2 node-3 这样的语法不再支持,一行只能写一个node了。
在添加新的monitor之后,ceph会开始同步这些monitor,并形成一个quorum. 要检查quorum的状态,可运行:
ceph quorum_status --format json-pretty
当给Ceph安装多个monitor之后,应该在每个monitor主机上都安装并配置NTP,以保证时间的同步。ntp的配置这里从略,只简单概述一下原理:
将2台monitor所在机器配置成向第3台monitor机器做ntp的同步,而第3台monitor上通过crontab来定时调用ntpdate命令向Internet上的ntp时钟源做同步。
3. 添加2个managers,达到3个managers
Ceph Manager daemon工作在active/standby的模式。添加多manager,可以保证如果一个manager或host宕掉,另一个manager可以无缝接管过来。
ceph-deploy mgr create node-2 node-3
可以通过ceph -s命令看到active和standby的manager.
4. 添加一个RGW实例
要部署Ceph Object Gateway组件,就必须部署一个RGW实例。
ceph-deploy rgw create node-1
RGW instance监听在7480端口。若需改变端口号,可修改ceph.conf文件。
[client]
rgw frontends = civetweb port=80
若要使用IPv6地址,可以如下修改ceph.conf
[client]
rgw frontends = civetweb port=[::]:80
实验 - 存取Object数据
要存储object数据,ceph client必须:
1. 设置一个object name
2. 指定一个pool
注意:
关于ceph client,将在下篇博客介绍。
Ceph client获取最新的cluster map; 而CRUSH算法计算怎样将一个object对应到一个placement group,然后再怎样将这个palcement group动态赋给一个OSD daemon.
要找到这个object的位置,可以执行如下命令:
ceph osd map {pool-name} {object-name}
具体实验步骤:
ceph osd pool create mypool 8 # 8是该pool的PG的数量
echo "Hello, World" > 1.txt
rados put my-obj-1 1.txt --pool=mypool
检查Ceph集群确实存储了这个object:
rados -p mypool ls
确定object的位置:
ceph osd map mypool my-obj-1
osdmap e50 pool 'mypool' (5) object 'my-obj-1' -> pg 5.ced445fe (5.6) -> up ([1,5,4], p1) acting ([1,5,4], p1)
若要删除这个object,可以这样:
rados rm my-obj-1 --pool=mypool
现在,集群部署好了,object也能成功创建了,但是却并不利于用户的使用。用户使用存储,一般不直接通过原始的object,而是主要有3种使用方式:
- 块设备,比如,mount一块块设备(可理解为磁盘)
- 文件系统
- 对象存储(比上述原生的object多了一些封装,常见的有通过S3 API或Swift API进行对象的存取)
鉴于Ceph对于文件系统的支持(CephFS)并不十分强健,下篇博客将介绍Block Device和Object Storage相关内容,见:使用ceph-deploy安装Ceph 12.x(四) 块设备与对象存储