官方文档:http://docs.ceph.org.cn/

服务器信息

IP Hostname module
172.16.1.12 ceph1 ceph-deploy,osd,mgr,mon(控制节点)
172.16.1.13 ceph2 osd,mon
172.16.1.14 ceph3 osd,mon

Ceph-Deploy

ceph-deploy应该部署在专用的节点,也就是管理节点AdminHost上。

ceph-deploy无法处理客户端工具,如果你需要使用Ceph集群,需要自己安装和配置客户端,这个客户端可能是一个内核模块(librbd),也可能只是一个命令行工具。

前期准备

关闭selinux

1
2
# 三台节点统一配置
[root@ceph1 ~]# setenforce 0

ssh免密登陆

1
2
3
4
5
# ceph1管理端配置即可
[root@ceph1 ~]# ssh-keygen
[root@ceph1 ~]# ssh-copy-id 172.16.1.12
[root@ceph1 ~]# ssh-copy-id 172.16.1.13
[root@ceph1 ~]# ssh-copy-id 172.16.1.14

配置本地解析

1
2
3
4
5
6
7
8
# 三台节点统一配置
[root@ceph1 ~]# cat >> /etc/hosts << EOF
172.16.1.12 ceph1
172.16.1.13 ceph2
172.16.1.14 ceph3
EOF
[root@ceph1 ~]# scp /etc/hosts ceph2:/etc/
[root@ceph1 ~]# scp /etc/hosts ceph3:/etc/

放行防火墙端口

1
2
3
4
# 三台节点统一配置
[root@ceph1 ~]# firewall-cmd --permanent --add-port=6789/tcp #admin
[root@ceph1 ~]# firewall-cmd --permanent --add-port=6800-8000/tcp #osd
[root@ceph1 ~]# firewall-cmd --reload

更换yum源

1
2
3
4
# 三台节点统一配置
[root@ceph1 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@ceph1 ~]# yum clean all
[root@ceph1 ~]# yum makecache

同步时间

选择任何一台机器当ntp时间服务器,其他的节点当时间服务器的客户端跟服务器同步时间

1
2
3
4
# 三台节点统一配置
[root@ceph1 ~]# yum -y install ntpdate ntp
[root@ceph1 ~]# ntpdate cn.ntp.org.cn
[root@ceph1 ~]# systemctl restart ntpd && systemctl enable ntpd

安装部署

配置ceph yum源

所有节点

vi /etc/yum.repos.d/ceph.repo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/$basearch
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/noarch
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.aliyun.com/ceph/rpm-luminous/el7/SRPMS
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1

更新源

1
2
[root@ceph1 ~]# yum clean all
[root@ceph1 ~]# yum makecache

安装ceph-deploy,安装epel存储库

1
2
3
4
# 所有节点执行
[root@ceph1 ~]# yum -y install epel-release
# deploy节点执行
[root@ceph1 ~]# yum -y install ceph-deploy python-pip

创建ceph操作目录

1
2
[root@ceph1 ~]# mkdir /etc/ceph && cd /etc/ceph
# ceph-deploy命令操作必须在该目录下执行

创建集群

创建在此目录生成文件,ceph-deploy new ceph1

1
2
3
[root@ceph1 ceph]# ceph-deploy new ceph1 ceph2 ceph3
[root@ceph1 ceph]# ls
ceph.conf ceph-deploy-ceph.log ceph.mon.keyring

如遇到报错:

1
2
3
4
5
6
7
8
9
[root@ceph1 ceph]# ceph-deploy new ceph
usage: ceph-deploy new [-h] [--no-ssh-copykey] [--fsid FSID]
[--cluster-network CLUSTER_NETWORK]
[--public-network PUBLIC_NETWORK]
MON [MON ...]
ceph-deploy new: error: hostname: ceph is not resolvable

故障原因及解决:1.hosts本地解析未添加,添加本地解析
2.命令拷贝出错,手动输入命令,多执行几次解决

修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
[root@ceph1 ceph]# vi ceph.conf
[global]
fsid = df10a8e8-6610-4ab1-bc56-707e34f5530a
mon_initial_members = ceph1, ceph2, ceph3
mon_host = 172.16.1.12,172.16.1.13,172.16.1.14
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
rbd_default_features = 1
mon clock drift allowed = 2
mon clock drift warn backoff = 30
public_network = 172.16.1.0/24 # 可选

部分操作系统kernel只支持layering,所以最好直接在配置文件指明创建rbd时默认支持的特性
rbd_default_features = 1

由于ceph分布式对时钟的同步要求很高,可以将同步误差范围调大;
mon clock drift allowed = 2
mon clock drift warn backoff = 30

网络添加,用于ceph内部通信

public_network = 172.16.1.0/24

官网建议:一般来说,我们不建议用单网卡 OSD 主机部署两个网络。然而这事可以实现,把 public addr 选项配在 [osd.n] 段下即可强制 OSD 主机运行在公共网,其中 n 是其 OSD 号。另外,公共网和集群网必须互通,考虑到安全因素我们不建议这样做

安装Ceph软件包

1
2
# 管理端执行
[root@ceph1 ceph]# ceph-deploy install ceph1 ceph2 ceph3

初始化monitor(s),并收集密钥

1
2
3
4
[root@ceph1 ceph]# ceph-deploy mon create-initial
[root@ceph1 ceph]# ls
ceph.bootstrap-mds.keyring ceph.bootstrap-osd.keyring ceph.client.admin.keyring ceph-deploy-ceph.log
ceph.bootstrap-mgr.keyring ceph.bootstrap-rgw.keyring ceph.conf ceph.mon.keyring

使用ceph-deploy把配置文件和admin密钥拷贝到所有节点

如果只允许一个节点来管理ceph就不用执行

1
[root@ceph1 ceph]# ceph-deploy admin ceph1 ceph2 ceph3

以便您每次执行Ceph命令行时就无需指定monitor地址和ceph.client.admin.keyringceph.client.admin.keyring

检查集群状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@ceph1 ceph]# ceph -s   
cluster:
id: 4c05498b-9d83-42b4-af56-4d75a62d7422
health: HEALTH_OK
OSD count 1 < osd_pool_default_size 3
services:
mon: 1 daemons, quorum ceph1
mgr: ceph1(active)
osd: 3 osds: 3 up, 3 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0B
usage: 0B used, 0B / 0B avail
pgs:
# health: HEALTH_OK就表明成功

创建OSD

各节点新增一块硬盘

新增磁盘无需格式化,如果有分区需要制定具体分区

1
2
3
4
5
6
7
8
9
# 所有节点执行
[root@ceph1 ceph]# parted /dev/sdb mklabel gpt -s
# deploy节点执行
[root@ceph1 ceph]# ceph-deploy disk zap ceph1 /dev/sdb
[root@ceph1 ceph]# ceph-deploy disk zap ceph2 /dev/sdb
[root@ceph1 ceph]# ceph-deploy disk zap ceph3 /dev/sdb
[root@ceph1 ceph]# ceph-deploy osd create ceph1 --data /dev/sdb
[root@ceph1 ceph]# ceph-deploy osd create ceph2 --data /dev/sdb
[root@ceph1 ceph]# ceph-deploy osd create ceph3 --data /dev/sdb

注:如果要在LVM卷上创建OSD,则参数 –data 必须是 volume_group/lv_name ,而不是卷的
块设备的路径

1
[root@ceph1 ceph]# ceph-deploy mgr create ceph1

检查集群状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@ceph1 ceph]# ceph -s    
cluster:
id: 4c05498b-9d83-42b4-af56-4d75a62d7422
health: HEALTH_OK

services:
mon: 1 daemons, quorum ceph1
mgr: ceph1(active)
osd: 3 osds: 3 up, 3 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0B
usage: 1.00GiB used, 59.0GiB / 60.0GiB avail
pgs:
# data有数据表明成功

开启dashboard模块

用于UI查看

1
2
3
4
5
6
7
8
[root@ceph1 ceph]# ceph mgr module enable dashboard
[root@ceph1 ceph]# ceph mgr services
{
"dashboard": "http://ceph1:7000/"
}
[root@ceph1 ceph]# netstat -lnpt | grep 7000
tcp6 0 0 :::7000 :::* LISTEN 206997/ceph-mgr
# 访问7000端口即可看到web界面

查看osd状态

1
2
3
4
5
[root@ceph1 ceph]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.01949 root default
-3 0.01949 host ceph1
0 hdd 0.01949 osd.0 up 1.00000 1.00000

配置客户端使用

使用rbd块存储

创建块设备之前需要创建存储池,存储池相关命令需要在mon节点执行–也就是规划好的node1节点

创建存储池

1
sudo ceph osd pool create rbd 128 128

初始化存储池

1
sudo rbd pool init rbd