参考文档:https://wiki.deimos.fr/Ceph_:_performance,_reliability_and_scalability_storage_solutionnode
Ceph 当前的最新的LTS版本为 mimic 13.2.x 和 luminous12.2.x, 经过release信息能够查看到相关发布信息.在具体的版本中会说明是不是LTS版本。python
每一年大约会发布三到四个稳定版,每一个稳定版都有个名字(如 ‘Firefly’ ),而且会一直提供缺陷修复,至少持续到下一个稳定版发布。linux
其它稳定版都是 LTS ( Long Term Stable ,长期稳定)的,并且会持续更新,直到发布了两个 LTS 。好比 Hammer 发布以后 Dumpling 才隐退, Jewel 发布以后 Firefly 才隐退,以此类推。基本原理就是,为了修复缺陷和移植某些重要功能,对 LTS (如 Dumpling )的移植会一直持续到下一个 LTS 发布( Firefly 就是 Dumpling 以后的一个 LTS )。下一个 LTS 发布后,还有可能移植缺陷修正,主要取决于这些问题是否会妨碍升级到下一个 LTS (这里有个实例, Firefly 发布后还在修复 Dumpling ,一直持续到 Hammer 发布,主要是确保 Dumpling 能够平滑地迁移到 Firefly )。web
第一个 Ceph 版本是 0.1 ,要回溯到 2008 年 1 月。多年来,版本号方案一直没变,直到 2015 年 4 月 0.94.1 ( Hammer 的第一个修正版)发布后,为了不 0.99 (以及 0.100 或 1.00 ?),咱们制定了新策略。算法
x 将从 9 算起,它表明 Infernalis ( I 是第九个字母),这样咱们第九个发布周期的第一个开发版就是 9.0.0 ;后续的开发版依次是 9.0.1 、 9.0.2 等等。json
具体介绍能够参考官方文档:
硬件需求说明: http://docs.ceph.com/docs/master/start/hardware-recommendations/
系统需求说明:http://docs.ceph.com/docs/master/start/os-recommendations/浏览器
Ceph有两种安装方式: 手动部署和使用 ceph-deploy工具部署。
手动部署比较繁琐,可是对于初学者而言更加容易理解。 ceph-deploy部署工具的方式适用于大规模集群的部署。
这里会分别演示两种部署方式。网络
ceph-12 luminous版本rpm包地址:https://download.ceph.com/rpm-luminousapp
ceph-13 mimic版本rpm包地址:https://download.ceph.com/rpm-mimicfrontend
在部署以前须要准备好三台CentOS主机,我这里使用的是CentOS7.5,并将系统内核升级到4.x长期支持版本,相关的配置信息以下:
local-node-1: 10.0.0.1 local-node-2: 10.0.0.2 local-node-3: 10.0.0.3
配置hosts解析三台节点的主机名,并将三台节点配置为无密码认证模式。
关闭防火墙和Selinux
每台主机节点至少添加一块磁盘用于ceph存储,在实际的生产中能够将多块盘作raid,ceph 在添加磁盘时会自动格式化,因此此处不须要格式化。
yum install snappy leveldb gdisk python-argparse gperftools-libs -y
添加yum 源,导入key,这里我使用最新的mimic版本:
rpm --import 'https://download.ceph.com/keys/release.asc' su -c 'rpm -Uvh https://download.ceph.com/rpm-mimic/el7/noarch/ceph-release-1-0.el7.noarch.rpm'
因为国内的网络问题,这里能够选择使用阿里云的源,修改repo文件以下:
[Ceph] name=Ceph packages for $basearch baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/$basearch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc [Ceph-noarch] name=Ceph noarch packages baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc [ceph-source] name=Ceph source packages baseurl=https://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://download.ceph.com/keys/release.asc
yum install ceph-deploy -y
mkdir /opt/ceph-cluster
[root@local-node-1 ~]# cd /opt/ceph-cluster/ [root@local-node-1 ceph-cluster]# ceph-deploy new local-node-1
==提示==:若是在执行ceph-deploy命令时出现以下错误,则须要安装pyhon2-pip
# ceph-deploy new local-node-1 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 # 解决办法,安装python2-pip yum install python2-pip* -y
命令执行成功后会在当前目录生成多个配置文件。
[root@local-node-1 ceph-cluster]# ll total 12 -rw-r--r-- 1 root root 198 Feb 15 15:37 ceph.conf -rw-r--r-- 1 root root 2993 Feb 15 15:37 ceph-deploy-ceph.log -rw------- 1 root root 73 Feb 15 15:37 ceph.mon.keyring
若是有多个不一样的网络接口(一般ceph集群会分公共网络为和集群网络,也称为public network和Cluster network),在生产环境中都会将这两个网络分开使用不一样的网络接口,能够在ceph.conf配置文件的[global]
区域添加以下参数:
public network = {ip-address}/{netmask} # 公共网络,用于集群中访问ceph存储数据和ceph自身的监控和控制数据 cluster network = {cluster-network/netmask} # 集群网络,用于ceph osd之间互相同步复制ceph集群数据
若是不进行配置,默认只会使用公共网络(public network),生产环境严禁这样作。
yum install ceph ceph-radosgw -y
在网络正常的状况下也可使用ceph-deploy
来批量部署,实际效果和上述yum安装软件同样:
ceph-deploy install --release mimic local-node-1 local-node-2 local-node-3
在国内网络很差的状况下,不推荐这么作,执行此命令以后,咱们经过前台输出,能够发现这步操做作了以下工做:
[root@local-node-1 ~]# ceph -v ceph version 13.2.4 (b10be4d44915a4d78a8e06aa31919e74927b142e) mimic (stable)
查看节点状态发现属于不健康的状态:
[root@local-node-1 ~]# ceph status 2019-02-15 16:59:28.897 7f8a67b8c700 -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 2019-02-15 16:59:28.897 7f8a67b8c700 -1 monclient: ERROR: missing keyring, cannot use cephx for authentication [errno 2] error connecting to the cluster
[root@local-node-1 ceph-cluster]# ceph-deploy mon create-initial
[root@local-node-1 ceph-cluster]# ceph-deploy admin local-node-1 local-node-2 local-node-3
[root@local-node-1 ceph-cluster]# ceph-deploy mgr create local-node-1
# ceph-deploy disk list local-node-1 ... [local-node-1][INFO ] Disk /dev/sda: 10.7 GB, 10737418240 bytes, 20971520 sectors [local-node-1][INFO ] Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
使用disk zap
命令会抹掉磁盘上的分区和数据
[root@local-node-1 ceph-cluster]# ceph-deploy disk zap local-node-1 /dev/sdb
建立OSD磁盘,添加三个节点的三个磁盘:
[root@local-node-1 ceph-cluster]# ceph-deploy osd create --data /dev/sdb local-node-1 [root@local-node-1 ceph-cluster]# ceph-deploy osd create --data /dev/sdb local-node-2 [root@local-node-1 ceph-cluster]# ceph-deploy osd create --data /dev/sdb local-node-3
==注意:== 若是使用LVM逻辑卷来添加OSD,应该使用参数 --data volume_group/lv_name
而不是直接使用逻辑卷的路径。
[root@local-node-1 ceph-cluster]# ceph health HEALTH_OK [root@local-node-1 ceph-cluster]# ceph -s cluster: id: 6a4812f7-83cb-43e5-abac-f2b8e37db127 health: HEALTH_OK services: mon: 1 daemons, quorum local-node-1 mgr: local-node-1(active) osd: 3 osds: 3 up, 3 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 3.0 GiB used, 27 GiB / 30 GiB avail pgs:
检查节点端口信息:
[root@local-node-1 ceph-cluster]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 859/sshd tcp 0 0 10.0.0.1:6789 0.0.0.0:* LISTEN 2893/ceph-mon tcp 0 0 0.0.0.0:6800 0.0.0.0:* LISTEN 3815/ceph-osd tcp 0 0 0.0.0.0:6801 0.0.0.0:* LISTEN 3815/ceph-osd tcp 0 0 0.0.0.0:6802 0.0.0.0:* LISTEN 3815/ceph-osd tcp 0 0 0.0.0.0:6803 0.0.0.0:* LISTEN 3815/ceph-osd tcp 0 0 0.0.0.0:6804 0.0.0.0:* LISTEN 4049/ceph-mgr tcp6 0 0 :::22 :::* LISTEN 859/sshd [root@local-node-2 /]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 860/sshd tcp 0 0 0.0.0.0:6800 0.0.0.0:* LISTEN 2439/ceph-osd tcp 0 0 0.0.0.0:6801 0.0.0.0:* LISTEN 2439/ceph-osd tcp 0 0 0.0.0.0:6802 0.0.0.0:* LISTEN 2439/ceph-osd tcp 0 0 0.0.0.0:6803 0.0.0.0:* LISTEN 2439/ceph-osd tcp6 0 0 :::22 :::* LISTEN 860/sshd [root@local-node-3 ~]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 861/sshd tcp 0 0 0.0.0.0:6800 0.0.0.0:* LISTEN 2352/ceph-osd tcp 0 0 0.0.0.0:6801 0.0.0.0:* LISTEN 2352/ceph-osd tcp 0 0 0.0.0.0:6802 0.0.0.0:* LISTEN 2352/ceph-osd tcp 0 0 0.0.0.0:6803 0.0.0.0:* LISTEN 2352/ceph-osd tcp6 0 0 :::22 :::* LISTEN 861/sshd
至此,ceph 基础存储集群部署完成。
http://docs.ceph.com/docs/master/start/quick-ceph-deploy/#
当咱们有了以上基础的ceph集群后,能够经过ceph-deploy来扩展集群。
为了实现mon组件的高可用,咱们能够在node2和node3上也部署上mon(monitor的数量必须为奇数个,1,3,5等,以便在节点出现故障时进行选举),同时,咱们还须要在node1上添加Matedata Server(mds)组件。
要使用CephFS,咱们就必须至少安装一个metadata sever,执行以下命令安装 metadata server:
[root@local-node-1 ceph-cluster]# ceph-deploy mds create local-node-1
根据输出提示能够发现ceph-mds@local-node-1服务已经启动。
# netstat -lntp|grep mds tcp 0 0 0.0.0.0:6805 0.0.0.0:* LISTEN 4549/ceph-mds
在添加第二个mon或者更多mon时,必须先修改admin节点和将要部署mon节点的ceph.conf的配置文件,修改mon_initial_members
, mon_host
和 public_network
的相关配置:
[root@local-node-1 ceph-cluster]# cat ceph.conf [global] fsid = 6a4812f7-83cb-43e5-abac-f2b8e37db127 mon_initial_members = local-node-1,local-node-2,local-node-3 mon_host = 10.0.0.1,10.0.0.2,10.0.0.3 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx public_network = 10.0.0.0/24
下发配置到集群中的全部节点:
[root@local-node-1 ceph-cluster]# ceph-deploy --overwrite-conf config push local-node-2 local-node-3
更新新的配置到全部的 monitor节点上:
ceph-deploy --overwrite-conf config push local-node-1 local-node-2 local-node-3
添加mon到local-node-2和local-node-3节点上:
ceph-deploy mon add local-node-2 ceph-deploy mon add local-node-3
新增 Monitor 后,Ceph 会自动开始同步并造成法定人数。你能够用下面的命令检查法定人数状态:
# ceph quorum_status --format json-pretty { "election_epoch": 14, "quorum": [ 0, 1, 2 ], "quorum_names": [ "local-node-1", "local-node-2", "local-node-3" ], "quorum_leader_name": "local-node-1", "monmap": { "epoch": 3, "fsid": "6a4812f7-83cb-43e5-abac-f2b8e37db127", "modified": "2019-02-18 13:39:00.705952", "created": "2019-02-15 17:38:09.329589", "features": { "persistent": [ "kraken", "luminous", "mimic", "osdmap-prune" ], "optional": [] }, "mons": [ { "rank": 0, "name": "local-node-1", "addr": "10.0.0.1:6789/0", "public_addr": "10.0.0.1:6789/0" }, { "rank": 1, "name": "local-node-2", "addr": "10.0.0.2:6789/0", "public_addr": "10.0.0.2:6789/0" }, { "rank": 2, "name": "local-node-3", "addr": "10.0.0.3:6789/0", "public_addr": "10.0.0.3:6789/0" } ] } }
==注意:== 当你的 Ceph 集群运行着多个 monitor 时,各 monitor 主机上都应该配置 NTP ,并且要确保这些 monitor 位于 NTP 服务的同一级。
Ceph Manager守护进程以活动/备用的模式运行。 部署其余管理器(Manager)守护程序可确保在一个守护程序或主机发生故障时,另外一个守护程序或主机能够在不中断服务的状况下接管。
为 其它两台节点添加Manager:
[root@local-node-1 ceph-cluster]# ceph-deploy mgr create local-node-2 local-node-3
查看状态,已经添加了三个mgr:
[root@local-node-1 ceph-cluster]# ceph -s cluster: id: 6a4812f7-83cb-43e5-abac-f2b8e37db127 health: HEALTH_OK services: mon: 3 daemons, quorum local-node-1,local-node-2,local-node-3 mgr: local-node-1(active), standbys: local-node-2, local-node-3 osd: 3 osds: 3 up, 3 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 3.0 GiB used, 27 GiB / 30 GiB avail pgs:
使用ceph的 Ceph Object Gateway,还须要部署一个RGW的实例,使用以下命令建立一个新的RGW实例:
[root@local-node-1 ceph-cluster]# ceph-deploy rgw create local-node-1
默认状况下RGW会监听7480端口,若是想修改此默认端口能够经过编辑运行RGW节点上的ceph.conf文件:
[client] rgw frontends = civetweb port=80
使用IPv6的状况:
[client] rgw frontends = civetweb port=[::]:80
使用浏览器访问此端口能获取到以下信息:
# curl 10.0.0.1:7480 <?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>
若是要存储对象数据到ceph集群中,ceph的客户必须知足如下条件:
Ceph客户端检索最新的集群映射,CRUSH算法计算如何将对象映射到放置组,而后计算如何动态地将放置组分配给Ceph OSD守护进程。 要查找对象位置,您只须要对象名称和池名称。例如:
ceph osd map {poolname} {object-name}
做为练习,咱们建立一个对象,指定对象的名称,并指定一个文件路径,此文件包含了对象数据,并使用rados put 命令指定存储池名称:
echo {Test-data} > testfile.txt ceph osd pool create mytest 8 rados put {object-name} {file-path} --pool=mytest # 示例: echo testdata > testfile.txt # ceph osd pool create mytest 8 pool 'mytest' created rados put test-object-1 testfile.txt --pool=mytest
验证ceph存储了此对象:
# rados -p mytest ls test-object-1
定位对象:
ceph osd map {pool-name} {object-name} # ceph osd map mytest test-object-1 osdmap e34 pool 'mytest' (5) object 'test-object-1' -> pg 5.74dc35e2 (5.2) -> up ([1,0,2], p1) acting ([1,0,2], p1)
删除对象:
rados rm test-object-1 --pool=mytest
删除存储池:
ceph osd pool rm mytest
使用上面的删除命令会提示确认信息,正常删除使用以下命令:
# ceph osd pool rm mytest mytest --yes-i-really-really-mean-it Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool
若是是上述报错须要修改ceph.conf配置文件,并重启mon服务:
[mon] mon allow pool delete = true
重启ceph-mon:
systemctl restart ceph-mon.target
而后再执行删除,便可成功:
[root@local-node-1 ceph-cluster]# ceph osd pool rm mytest mytest --yes-i-really-really-mean-it pool 'mytest' removed [root@local-node-1 ceph-cluster]# rados df POOL_NAME USED OBJECTS CLONES COPIES MISSING_ON_PRIMARY UNFOUND DEGRADED RD_OPS RD WR_OPS WR .rgw.root 1.1 KiB 4 0 12 0 0 0 12 8 KiB 4 4 KiB default.rgw.control 0 B 8 0 24 0 0 0 0 0 B 0 0 B default.rgw.log 0 B 175 0 525 0 0 0 10251 9.8 MiB 6834 0 B default.rgw.meta 0 B 0 0 0 0 0 0 0 0 B 0 0 B total_objects 187 total_used 3.0 GiB total_avail 27 GiB total_space 30 GiB
若是在配置的过程当中出现问题想要从新配置,能够执行下面的命令来清除配置和ceph软件:
// 清除节点ceph软件和数据,若是运行了purge命令,必须从新安装ceph ceph-deploy purge {ceph-node} [{ceph-node}] ceph-deploy purgedata {ceph-node} [{ceph-node}] // 清除配置: ceph-deploy forgetkeys // 清除当前目录的配置文件 rm ceph.*
若是集群是处于 active + clean 状态,则说明集群正常:
[root@local-node-1 ceph-cluster]# ceph -s cluster: id: 6a4812f7-83cb-43e5-abac-f2b8e37db127 health: HEALTH_OK services: mon: 3 daemons, quorum local-node-1,local-node-2,local-node-3 mgr: local-node-1(active), standbys: local-node-2, local-node-3 osd: 3 osds: 3 up, 3 in rgw: 1 daemon active data: pools: 4 pools, 32 pgs objects: 187 objects, 1.1 KiB usage: 3.0 GiB used, 27 GiB / 30 GiB avail pgs: 32 active+clean