INSTALL CEPH (QUICK)

2017-05-26 16:25:56
概念介绍

Ceph的部署模式下主要包含以下几个类型的节点:

  • Ceph OSD: 主要用来存储数据,处理数据的replication,恢复,填充,调整资源组合以及通过检查其他OSD进程的心跳信息提供一些监控信息给Ceph Monitors . 当Ceph Storage Cluster 要准备2份数据备份时,要求至少有2个Ceph OSD进程的状态是active+clean状态
  • Monitor: 维护集群map的状态,主要包括monitor map, OSD map, Placement Group (PG) map, 以及CRUSH map. Ceph 维护了 Ceph Monitors, Ceph OSD Daemons, 以及PGs状态变化的历史记录 (called an “epoch”)
  • MDS: Ceph Metadata Server (MDS)存储的元数据代表Ceph的文件系统 (i.e., Ceph Block Devices 以及Ceph Object Storage 不适用 MDS). Ceph Metadata Servers 让系统用户可以执行一些POSIX文件系统的基本命令,例如ls,find 等
  • PG全称Placement Grouops,是一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据
  • RBD全称RADOS block device,是Ceph对外提供的块设备服务
  • RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容
  • RADOS全称Reliable Autonomic Distributed Object Store,是Ceph集群的精华,用户实现数据分配、Failover等集群操作
  • Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持
  • CephFS全称Ceph File System,是Ceph对外提供的文件系统服务
  • CRUSH是Ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方
部署方案

通过ceph-deploy可以快速便捷的安装上ceph,此方法部署需要一个管理节点(admin node)和3个节点来做ceph的存储集群
三台装有CentOS 7的主机,每台主机有三个磁盘(虚拟机磁盘要大于100G),详细信息如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@node1 ~]# cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core)

[root@node1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 99.5G 0 part
├─system-root 253:0 0 95.6G 0 lvm /
└─system-swap 253:1 0 3.9G 0 lvm [SWAP]
sdb 8:16 0 2T 0 disk
sdc 8:32 0 2T 0 disk
sdd 8:48 0 2T 0 disk

[root@node1 ~]# cat /etc/hosts
192.168.138.140 admin
192.168.138.141 node1
192.168.138.142 node2
192.168.138.143 node3

集群配置如下:

1
2
3
4
admin	192.168.138.140  deploy
node1 192.168.138.141 mon*1 osd*3
node2 192.168.138.142 mon*1 osd*3
node3 192.168.138.143 mon*1 osd*3

备注:在生产环境,每个osd对应一块硬盘,每个osd需要一个journal,建议使用ssd作为osd硬盘的journal.
这里测试环境将采用data和journal在一个硬盘的做法

预检Preflight

在admin node 节点

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
1. install epel
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
2. add ceph-deploy source
sudo cat > /etc/yum.repos.d/ceph-deploy.repo << EOF
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-jewel/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOF

sudo cat > /etc/yum.repos.d/ceph.repo << EOF
[Ceph]
name=Ceph packages for $basearch
baseurl=http://download.ceph.com/rpm-jewel/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1

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

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

3. install ceph-deploy
sudo yum update && sudo yum install ceph-deploy -y

在admin node上创建一个拥有sudo权限的用户,并有sudo权限,不要使用ceph这个用户名

1
2
3
4
5
6
sudo useradd -g wheel  neo && su - neo

ssh-keygen
ssh-copy-id neo@node1
ssh-copy-id neo@node2
ssh-copy-id neo@node3

如果开启了防火墙需要

1
2
3
4
5
6
7
sudo firewall-cmd --zone=public --add-service=ceph-mon --permanent
sudo firewall-cmd --zone=public --add-service=ceph --permanent
sudo firewalld-cmd --reload
或者
# firewall-cmd --zone=public --add-port=6789/tcp --permanent
# firewall-cmd --zone=public --add-port=6800-7100/tcp --permanent
# firewall-cmd --reload

For iptables, add port 6789 for Ceph Monitors and ports 6800:7300 for Ceph OSDs

开始安装

1.建立部署目录

1
2
3
4
[neo@admin ~]$ ceph-deploy --version
1.5.37
[neo@admin ~]$ mkdir cluster
[neo@admin ~]$ cd cluster/

2.清理旧配置,全新安装略过

1
2
3
ceph-deploy purge node1 node2 node3
ceph-deploy purgedata node1 node2 node3
ceph-deploy forgetkeys

3.Create the cluster
初始化集群,告诉 ceph-deploy 哪些节点是监控节点,命令成功执行后会在 cluster 目录下生成 ceph.conf, ceph.log, ceph.mon.keyring 等相关文件:

1
[neo@admin cluster]$ ceph-deploy new node1 node2 node3

4.在每个 Ceph 节点上都安装 Ceph:

1
2
3
[neo@admin cluster]$ ceph-deploy install node1 node2 node3
或者登陆节点,手动安装
yum -y install ceph ceph-radosgw

5.初始化监控节点:

1
[neo@admin cluster]$ ceph-deploy mon create-initial

6.查看一下 Ceph 存储节点的硬盘情况

1
2
3
[neo@admin cluster]$ ceph-deploy disk list node1
[neo@admin cluster]$ ceph-deploy disk list node2
[neo@admin cluster]$ ceph-deploy disk list node3

7.初始化 Ceph 硬盘,然后创建 osd 存储节点,(存储节点:单个硬盘:对应的 journal 分区,一一对应):

1
2
3
4
5
6
7
8
ceph-deploy disk zap node1:sdb node1:sdc node1:sdd 
ceph-deploy osd create node1:sdb node1:sdc node1:sdd

ceph-deploy disk zap node2:sdb node2:sdc node2:sdd
ceph-deploy osd create node2:sdb node2:sdc node2:sdd

ceph-deploy disk zap node3:sdb node3:sdc node3:sdd
ceph-deploy osd create node3:sdb node3:sdc node3:sdd

8.最后,我们把生成的配置文件从 ceph-adm 同步部署到其他几个节点,使得每个节点的 ceph 配置一致:

1
[neo@admin cluster]$ ceph-deploy --overwrite-conf admin admin node1 node2 node3
测试

看一下配置成功了没?

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@admin ~]# ceph -s
cluster d6d92de4-2a08-4bd6-a749-6c104c88fc40
health HEALTH_WARN
too few PGs per OSD (21 < min 30)
monmap e1: 3 mons at {node1=192.168.138.141:6789/0,node2=192.168.138.142:6789/0,node3=192.168.138.143:6789/0}
election epoch 6, quorum 0,1,2 node1,node2,node3
osdmap e53: 9 osds: 9 up, 9 in
flags sortbitwise,require_jewel_osds
pgmap v148: 64 pgs, 1 pools, 0 bytes data, 0 objects
307 MB used, 18377 GB / 18378 GB avail
64 active+clean
[root@admin ~]# ceph health
HEALTH_WARN too few PGs per OSD (21 < min 30)

备注: 这里需要注意的事执行命令是在root权限下执行的,
因为etc/ceph/ceph.client.admin.keyring权限只允许root读写导致,亦可以给文件加权限解决
如果在neo权限下,报错如下

1
2
3
4
5
[neo@admin cluster]$ ceph health
2017-05-27 16:58:23.374074 7f567813a700 -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
2017-05-27 16:58:23.374109 7f567813a700 -1 monclient(hunting): ERROR: missing keyring, cannot use cephx for authentication
2017-05-27 16:58:23.374113 7f567813a700 0 librados: client.admin initialization error (2) No such file or directory
Error connecting to cluster: ObjectNotFound

在我们执行ceph -s 时警告PG太少,我们接下来解决,由于是新配置的集群,只有一个pool

1
2
[neo@admin ~]$ sudo ceph osd lspools
0 rbd,

查看rbd pool的PGS

1
2
[neo@admin ~]$ sudo ceph osd pool get rbd pg_num
pg_num: 64

pgs为64,因为是3副本的配置,所以当有9个osd的时候, 每个osd上均分了64/93=21个pgs,也就是出现了如上的错误 小于最小配置30个
根据官方推荐,Total PGs = (#OSDs
100) / pool size 公式来决定 pg_num(pgp_num 应该设成和 pg_num 一样),我们可以算出 100*9/3=300,Ceph推荐取最接近2的指数倍,所以选择256
解决办法:修改默认pool rbd的pgs和pgp_num,默认两个pg_num和pgp_num一样大小均为64,此处也将两个的值都设为256

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[neo@admin ~]$ sudo ceph osd pool set rbd pg_num 256
set pool 0 pg_num to 256

[neo@admin ~]$ sudo ceph osd pool set rbd pgp_num 256
set pool 0 pgp_num to 128set pool 0 pgp_num to 256

[neo@admin ~]$ sudo ceph health
HEALTH_OK

[neo@admin ~]$ sudo ceph -s
cluster d6d92de4-2a08-4bd6-a749-6c104c88fc40
health HEALTH_OK
monmap e1: 3 mons at {node1=192.168.138.141:6789/0,node2=192.168.138.142:6789/0,node3=192.168.138.143:6789/0}
election epoch 18, quorum 0,1,2 node1,node2,node3
osdmap e116: 9 osds: 9 up, 9 in
flags sortbitwise,require_jewel_osds
pgmap v412: 256 pgs, 1 pools, 4 bytes data, 1 objects
324 MB used, 18377 GB / 18378 GB avail
256 active+clean

ref
CEPH部署完整版(el7+jewel)
INSTALL CEPH (QUICK)
centos7 ceph-deploy 安装jewel
centos7使用ceph-deploy快速部署Kraken版Ceph
在 CentOS 7.1 上安装分布式存储系统 Ceph
ceph 创建和删除osd
三种增删osd的方法数据量迁移大小
Quickly build a new Ceph cluster with ceph-deploy on CentOS 7
Ceph 集群部署
PG设置与规划
health HEALTH_WARN too few PGs per OSD
thesues/cephdoc
手工部署一个ceph集群


您的鼓励是我写作最大的动力

俗话说,投资效率是最好的投资。 如果您感觉我的文章质量不错,读后收获很大,预计能为您提高 10% 的工作效率,不妨小额捐助我一下,让我有动力继续写出更多好文章。