预检
ceph 集群采用如下的架构:
安装 Ceph 部署工具(管理节点)
添加向管理节点上添加 Ceph 仓库,然后安装 ceph-deploy 工具。
添加并启用 EPEL 仓库:
1
[root@admin-node ~]# yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
向 yum 配置文件中添加 Ceph 仓库,yum 配置文件在
/etc/yum.repos.d/ceph.repo
。1
2
3
4
5
6
7
8
9[root@admin-node ~]# vim /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc更新仓库并安装 ceph-deploy 工具:
1
2[root@admin-node ~]# yum update
[root@admin-node ~]# yum install ceph-deploy
Ceph 节点安装
安装 NTP
1 | [root@ceph_node ~]# yum install ntp ntpdate ntp-doc |
安装 SSH 服务器
1 | [root@ceph_node ~]# sudo yum install openssh-server |
创建一个 Ceph 部署用户
在每个 Ceph 节点上创建一个新用户(storage):
1
2[root@ceph_node ~]# useradd -d /home/storage -m storage
[root@ceph_node ~]# passwd storage确保用户具有 sudo 特权:
1
2[root@ceph_node ~]# echo "storage ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/storage
[root@ceph_node ~]# sudo chmod 0440 /etc/sudoers.d/storage
开启无密码 SSH(管理节点)
生成 SSH 密钥,但是不要用 sudo 或者 root 用户。口令保留为空。
1
2
3
4
5
6
7
8[storage@admin-node ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/storage/.ssh/id_rsa):
Created directory '/home/storage/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/storage/.ssh/id_rsa.
Your public key has been saved in /home/storage/.ssh/id_rsa.pub.复制密钥到各个 Ceph 节点。
1
2
3[storage@admin-node ~]$ ssh-copy-id storage@controller
[storage@admin-node ~]$ ssh-copy-id storage@compute01
[storage@admin-node ~]$ ssh-copy-id storage@compute02
这里官方文档建议可以修改
~/.ssh/config
文件,把用户名写进去,这样在 ceph-deploy 时就不用指定用户名,事实证明,这个方法无效,会提示拒绝访问。还是指定用户名比较好。
关闭防火墙和 SELINUX
1 | [root@ceph_node ~]# systemctl stop firewalld |
安装优先软件包
1 | [root@ceph_node ~]# yum install yum-plugin-priorities |
快速安装存储集群
先在管理节点上创建一个目录,这样,所有生成的文件都会保存在该目录下。
1 | [storage@admin-node ~]$ mkdir my-cluster |
不要用 sudo
或者 root 用户执行 ceph-deploy 命令,因为它不会在远程主机上调用所需的 sudo
命令。
从头开始
如果在某些地方遇到麻烦,可以执行下面的命令从头开始。
1 | [storage@admin-node ~]$ ceph-deploy --username storage purge {ceph-node} [{ceph-node}] |
创建集群
创建集群。先初始化监控节点。
1
[storage@admin-node my-cluster]$ ceph-deploy --username storage new controller
查看输出
ls
你可以看到一个 Ceph 配置文件ceph.conf
一个监控密钥环ceph.mon.keyring
还有一个日志文件。1
2[storage@admin-node my-cluster]$ ls
ceph.conf ceph-deploy-ceph.log ceph.mon.keyring安装 Ceph 软件包。
1
[storage@admin-node my-cluster]$ ceph-deploy --username storage install controller compute01 compute02
配置初始 monitor 并收集密钥环。
1
[storage@admin-node my-cluster]$ ceph-deploy mon create-initial
官方文档说会有以下输出:
- ceph.client.admin.keyring
- ceph.bootstrap-mgr.keyring
- ceph.bootstrap-osd.keyring
- ceph.bootstrap-mds.keyring
- ceph.bootstrap-rgw.keyring
- ceph.bootstrap-rbd.keyring
但是我的输出是下面的:
1
2
3
4[storage@admin-node my-cluster]$ ls
ceph.bootstrap-mds.keyring ceph.client.admin.keyring
ceph.bootstrap-osd.keyring
ceph.bootstrap-rgw.keyring复制配置文件和管理密钥到管理节点和 Ceph 节点,这样你就可以使用 ceph CLI ,而不用每次都需要指定 monitor 的地址和 ceph.client.admin.keyring 。
1
[storage@admin-node my-cluster]$ ceph-deploy --username storage admin controller compute01 compute02
添加三个 OSD。经过试验新版本的 Ceph OSD 进程只能装在空硬盘上,安装在目录上和分区上会失败。(据说之前的版本不需要,我装的 J 版本,10.2.10,但我试验了 H 版本,最终失败了,所以就选择在虚拟机里部署。)安装在空分区上经过如下步骤:
1
2[storage@admin-node my-cluster]$ ceph-deploy --username storage osd prepare controller:/dev/sda3 compute01:/dev/sda3 compute02:/dev/sda3
[storage@admin-node my-cluster]$ ceph-deploy --username storage osd activate controller:/dev/sda3 compute01:/dev/sda3 compute02:/dev/sda3报错:
1
2
3
4
5
6[controller][WARNIN] ceph_disk.main.Error: Error: ['ceph-osd', '--cluster', 'ceph', '--mkfs', '--mkkey', '-i', u'2', '--monmap', '/var/lib/ceph/tmp/mnt.uidkdf/activate.monmap', '--osd-data', '/var/lib/ceph/tmp/mnt.uidkdf', '--osd-journal', '/var/lib/ceph/tmp/mnt.uidkdf/journal', '--osd-uuid', u'ade546d3-e1fa-4dd4-b5a5-f9fb8f145841', '--keyring', '/var/lib/ceph/tmp/mnt.uidkdf/keyring', '--setuser', 'ceph', '--setgroup', 'ceph'] failed : 2017-10-23 11:02:08.694483 7f69e5898800 -1 filestore(/var/lib/ceph/tmp/mnt.uidkdf) mkjournal error creating journal on /var/lib/ceph/tmp/mnt.uidkdf/journal: (13) Permission denied
[controller][WARNIN] 2017-10-23 11:02:08.694495 7f69e5898800 -1 OSD::mkfs: ObjectStore::mkfs failed with error -13
[controller][WARNIN] 2017-10-23 11:02:08.694536 7f69e5898800 -1 ** ERROR: error creating empty object store in /var/lib/ceph/tmp/mnt.uidkdf: (13) Permission denied
[controller][WARNIN]
[controller][ERROR ] RuntimeError: command returned non-zero exit status: 1
[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: /usr/sbin/ceph-disk -v activate --mark-init systemd --mount /dev/sda3由于我的物理机只有一块硬盘,最终不得不选择在虚拟机中部署集群。在虚拟机中添加了一块硬盘,部署 OSD:
注意,以下是我在虚拟机中重新按照之前的步骤部署的。主机名分别设置为 node1,node2,node3
1
ceph-deploy osd create node1:vdb node2:vdb node3:vdb
节点分区情况如下所示:
1
2
3
4
5
6
7
8
9
10
11[root@node1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 9G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 8G 0 part
├─centos_admin--node-root 253:0 0 7.1G 0 lvm /
└─centos_admin--node-swap 253:1 0 924M 0 lvm [SWAP]
vdb 252:16 0 300G 0 disk
├─vdb1 252:17 0 295G 0 part /var/lib/ceph/osd/ceph-0
└─vdb2 252:18 0 5G 0 part检查集群的健康状态。
1
2
3
4
5
6
7
8
9
10
11
12[root@node1 ~]# ceph health
HEALTH_OK
[root@node1 ~]# ceph -s
cluster e8b7ae85-8d03-4160-becc-10df8f385c59
health HEALTH_OK
monmap e1: 1 mons at {node1=192.168.0.211:6789/0}
election epoch 4, quorum 0 node1
osdmap e23: 3 osds: 3 up, 3 in
flags sortbitwise,require_jewel_osds
pgmap v48: 64 pgs, 1 pools, 0 bytes data, 0 objects
101 MB used, 884 GB / 884 GB avail
64 active+clean