1. 环境
1.1 硬件
4台 Linux虚拟机: server0, server1, server2, server3
每台有两块磁盘 : /dev/vdb, /dev/vdc
每台有两块网卡 :eth0, ens9
1.2 软件
linux版本: CentOS 7.2.1511
内核版本 : 3.10.0-327.el7.x86_64
ceph版本: 12.2.5
ceph-deploy版本: 2.0.0
2. 准备工作(所有server)
2.1 配置静态IP
每台server有两个interface, 分别配置在如下两个网段:
- 192.168.122.0/24
- 192.168.100.0/24
具体如下表:
Server | Interface | IPADDR |
---|---|---|
server0 | eth0 | 192.168.122.160 |
server0 | ens9 | 192.168.100.160 |
server1 | eth0 | 192.168.122.161 |
server1 | ens9 | 192.168.100.161 |
server2 | eth0 | 192.168.122.162 |
server2 | ens9 | 192.168.100.162 |
server3 | eth0 | 192.168.122.163 |
server3 | ens9 | 192.168.100.163 |
2.2 生成ssh key
# ssh-keygen
2.3 配置主机名解析
把如下内容追加到/etc/hosts:
192.168.100.160 server0
192.168.100.161 server1
192.168.100.162 server2
192.168.100.163 server3
2.4 配置ntp
# yum install -y ntp ntpdate ntp-doc
# vim /etc/ntp.conf (一般不需要修改)
# systemctl start ntpd.service
# systemctl enable ntpd.service
2.5 关闭防火墙
# systemctl stop firewalld
# systemctl disable firewalld
2.6 安装yum源epel
为了方便yum安装一些常用的软件包:
# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
3. 安装ceph软件包
3.1 添加yum源(所有server)
在所有server上添加ceph.repo,内容如下:
# cat /etc/yum.repos.d/ceph.repo
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/$basearch
enabled=1
priority=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/noarch
enabled=1
priority=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/SRPMS
enabled=0
priority=1
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
[Ceph]: ceph软件包的yum源,所有server都需要添加。
[Ceph-noarch]:ceph-deploy的yum源。admin server (见3.2节) 需要安装ceph-deploy,所以它需要这个yum源。admin server控制其他server的时候,也需要被控server添加这个yum源。最终,所有server都需要添加。
[ceph-source]: admin server控制其他server的时候,也需要被控server添加这个yum源。所以,所有server都需要添加。
3.2 选择admin server
选择server0作为admin server。官网上建议admin server使用一个单独的user来进行ceph-deploy操作,这里避免麻烦,还用root账户。
admin server需要免密登录所有server(包括自己),所以在admin server上配置免密登录(其他server不必配置):
# ssh-copy-id root@server0
# ssh-copy-id root@server1
# ssh-copy-id root@server2
# ssh-copy-id root@server3
测试一下:
# for i in {
0..3} ; do ssh server$i hostname ; done
server0
server1
server2
server3
3.3 安装ceph-deploy(在admin server上)
在3.1节已经添加了ceph-deploy的yum源,这里直接通过yum安装:
# yum -y install ceph-deploy
然后测试一下,发现报错:
# ceph-deploy --version
Traceback (most recent call last):
File "/usr/bin/ceph-deploy", line 18, in <module>
from ceph_deploy.cli import main
File "/usr/lib/python2.7/site-packages/ceph_deploy/cli.py", line 1, in <module>
import pkg_resources
ImportError: No module named pkg_resources
原因是缺python-setuptools,安装它即可:
# yum install python-setuptools
# ceph-deploy --version
2.0.0
3.4 安装ceph包(在admin server上执行)
这一步的目标是:admin server通过远程控制在所有server上安装ceph包。它需要在所有server上添加yum源:[Ceph], [Ceph-noarch]和[ceph-source],见3.1节。
另外注意:在所有server上安装deltarpm (yum install -y deltarpm), 否则会报如下错误:
[server0][DEBUG ] Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
[server0][WARNIN] No data was received after 300 seconds, disconnecting...
[server0][INFO ] Running command: ceph --version
[server0][ERROR ] Traceback (most recent call last):
[server0][ERROR ] File "/usr/lib/python2.7/site-packages/ceph_deploy......
下面就是安装了:
# ceph-deploy install --release=luminous server0 server1 server2 server3
成功之后,每台server都安装了ceph包,在任意sever上检查:
# ceph -v
ceph version 12.2.5 (cad919881333ac92274171586c827e01f554a70a) luminous (stable)
# ceph -v
ceph version 12.2.5 (cad919881333ac92274171586c827e01f554a70a) luminous (stable)
[root@server1 ~]# rpm -qa | grep ceph
ceph-common-12.2.5-0.el7.x86_64
ceph-mds-12.2.5-0.el7.x86_64
ceph-12.2.5-0.el7.x86_64
ceph-release-1-1.el7.noarch
libcephfs2-12.2.5-0.el7.x86_64
python-cephfs-12.2.5-0.el7.x86_64
ceph-base-12.2.5-0.el7.x86_64
ceph-mon-12.2.5-0.el7.x86_64
ceph-osd-12.2.5-0.el7.x86_64
ceph-mgr-12.2.5-0.el7.x86_64
ceph-radosgw-12.2.5-0.el7.x86_64
ceph-selinux-12.2.5-0.el7.x86_64
4. 部署ceph集群(在admin server上执行)
为了演示,我们
- 创建一个集群:1 mon + 1 mgr。这个是initial monitor。
- 添加 osd
- 添加 2 mon + 2 mgr
- 创建一个mds
实际上,我们完全可以在第1步中直接创建 3 mon + 3 mgr的集群 (3个都是initial monitor),然后添加osd就行了。这里分作1和3两步,是为了演示添加mon和mgr。
另外,ceph-deploy在部署集群的过程中,会产生一些文件(log,keyring,ceph.conf等),所以,我们在一个新目录下执行:
# mkdir test-ceph-deploy
# cd test-ceph-deploy/
若部署出现错误,需要重头开始:
ceph-deploy purge server0 server1 server2 server3
ceph-deploy purgedata server0 server1 server2 server3
ceph-deploy forgetkeys
rm ceph.*
4.1 创建集群:1 mon + 1 mgr
A. 以server2为initial monitor创建集群
# ceph-deploy new server2
这里指定server2作为initial monitor。这一步完成之后,在当前目录下会产生如下文件:
ceph.conf
ceph.mon.keyring
ceph-deploy-ceph.log
ceph.conf是ceph的配置文件。它将会被分发到所有server的/etc/ceph/目录下。在后续的ceph运维中,若需要做某些配置,可以在所有server上修改/etc/ceph/ceph.conf。
# cat ceph.conf
[global]
fsid = 744f59b7-c403-48e6-a1c6-2c74901a4d0b
mon_initial_members = server2
mon_host = 192.168.100.162
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
ceph.mon.keyring是monitor的keyring,它定义了monitor的key,以及monitor有什么权限:
# cat ceph.mon.keyring
[mon.]
key = AQDf7O9aAAAAABAAX4qmBiNsPhvK43wnpNCtLA==
caps mon = allow *
B. 配置ceph网络
ceph集群使用两个网络:public network和cluster network。前者用于服务client;后者用于集群内部通信,例如osd之间迁移数据。另外,两个网络上都有heartbeat。
注意:若只有一个网络,也可以部署ceph。这个网络同时担任public network和cluster network。这种情况下,跳过本小节。
我们有两个网络(见第2.1节),所以在ceph.conf中,增加如下两行:
# vim ceph.conf
......
public network = 192.168.100.0/24
cluster network = 192.168.122.0/24
注意以下两点:
在2.3节,我们配置主机名解析的时候,把主机名解析为public network的地址。这是因为,ceph-deploy是作为client (见下文D小节:client.admin, client.bootstrap-mds,client.bootstrap-mgr,client.bootstrap-osd,client.bootstrap-rgw)来操作集群的,ceph集群通过public network服务于client。
monitor是运行于public network上的。这也很容易理解,ceph的client都需要访问monitor,若monitor运行于cluster network上,client无法访问。
C. 部署initial monitor
# ceph-deploy mon create server2
这时候,server2上,monitor已经运行起来了。可以到server2上检查。
[root@server2 ~]# ps -ef | grep ceph
ceph 18240 1 1 14:24 ? 00:00:00 /usr/bin/ceph-mon -f --cluster ceph --id server2 --setuser ceph --setgroup ceph
如前文B小节所述,monitor运行于public network之上:
[root@server2 ~]# netstat -anpl | grep 6789 | grep LISTEN
tcp 0 0 192.168.100.162:6789 0.0.0.0:* LISTEN 18240/ceph-mon
D. 创建ceph keyring
经过前一步,server2上的monitor已经运行起来了。但这时候ceph -s失败,因为ceph -s是admin的命令,我们还没有admin的权限信息呢。
# ceph -c ceph.conf -s
2018-05-07 14:25:46.127163 7f76e1834700 -1 auth: unable to find a keyring on /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin,: (2) No such file or directory
2018-05-07 14:25:46.127199 7f76e1834700 -1 monclient: ERROR: missing keyring, cannot use cephx for authentication
2018-05-07 14:25:46.127201 7f76e1834700 0 librados: client.admin initialization error (2) No such file or directory
下面使用gatherkeys来创建各个角色(包括admin)的权限信息。gatherkeys 依次对角色 admin, bootstrap-mds, bootstrap-mgr, bootstrap-osd, bootstrap-rgw作如下操作(问题:为什么没有bootstrap-rbd?):
- 使用 ceph auth get 来获取角色的key和权限;
- 若不存在,则使用auth get-or-create {角色} {权限}来创建角色的key和权限;
- 把角色的key保存到 {角色}.keyring文件;
# ceph-deploy gatherkeys server2
[ceph_deploy.conf][DEBUG ] found configuration file at: /root/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.0): /usr/bin/ceph-deploy gatherkeys server2
......
[server2][INFO ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-server2/keyring auth get client.admin
[server2][INFO ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-server2/keyring auth get-or-create client.admin osd allow * mds allow * mon allow * mgr allow *
[server2