ceph 集群部署

参考文档:https://wiki.deimos.fr/Ceph_:_performance,_reliability_and_scalability_storage_solutionnode

Ceph 版本选择

1. Ceph的版本发布周期

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

  • LTS (长期稳定):直到后续两个 LTS 发布
  • 稳定版:直到下一个稳定版发布
  • 开发、或测试版:不会给它移植

2. 版本约定

第一个 Ceph 版本是 0.1 ,要回溯到 2008 年 1 月。多年来,版本号方案一直没变,直到 2015 年 4 月 0.94.1 ( Hammer 的第一个修正版)发布后,为了不 0.99 (以及 0.100 或 1.00 ?),咱们制定了新策略。算法

  • x.0.z - 开发版(给早期测试者和勇士们)
  • x.1.z - 候选版(用于测试集群、高手们)
  • x.2.z - 稳定、修正版(给用户们)

x 将从 9 算起,它表明 Infernalis ( I 是第九个字母),这样咱们第九个发布周期的第一个开发版就是 9.0.0 ;后续的开发版依次是 9.0.1 、 9.0.2 等等。json

3. 硬件推荐和系统要求

具体介绍能够参考官方文档:
硬件需求说明: http://docs.ceph.com/docs/master/start/hardware-recommendations/
系统需求说明:http://docs.ceph.com/docs/master/start/os-recommendations/浏览器

4. 部署说明

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

使用ceph-deploy部署集群

官方文档

0. 部署前的准备

在部署以前须要准备好三台CentOS主机,我这里使用的是CentOS7.5,并将系统内核升级到4.x长期支持版本,相关的配置信息以下:

  1. 节点主机名和IP信息
local-node-1: 10.0.0.1
local-node-2: 10.0.0.2
local-node-3: 10.0.0.3
  1. 配置hosts解析三台节点的主机名,并将三台节点配置为无密码认证模式。

  2. 关闭防火墙和Selinux

  3. 每台主机节点至少添加一块磁盘用于ceph存储,在实际的生产中能够将多块盘作raid,ceph 在添加磁盘时会自动格式化,因此此处不须要格式化。

  4. ceph对节点之间时间的要求很高,须要安装ntp并作好时间同步,配置好epel源。

1. 全部节点安装依赖包

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

2. 仅在部署节点安装 ceph-deploy工具

yum install ceph-deploy -y

3. 使用ceph-deploy部署节点

1).建立存放ceph配置文件的目录:
mkdir /opt/ceph-cluster
2). 进入配置文件目录,初始化node-1节点:
[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),生产环境严禁这样作。

3). 安装ceph到各个节点,各个节点执行:
yum install ceph ceph-radosgw -y

在网络正常的状况下也可使用ceph-deploy来批量部署,实际效果和上述yum安装软件同样:

ceph-deploy install --release mimic local-node-1 local-node-2 local-node-3

在国内网络很差的状况下,不推荐这么作,执行此命令以后,咱们经过前台输出,能够发现这步操做作了以下工做:

  • 移除安装节点上已经存在的yum源
  • 更新主机节点上的yum源,这个源是官方源,因为网络缘由有可能会形成安装不成功
  • 执行yum -y install ceph ceph-radosgw 命令安装ceph
4). 检查各个节点是否安装成功:
[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
5). 在node-1节点上建立monitor,会在当前目录生成几个key:
[root@local-node-1 ceph-cluster]# ceph-deploy  mon create-initial
6). 分发key
[root@local-node-1 ceph-cluster]# ceph-deploy admin local-node-1 local-node-2 local-node-3
7). 建立一个管理进程(只有在luminous+ 以上版本才有此功能 >= 12.x版本)
[root@local-node-1 ceph-cluster]# ceph-deploy mgr create local-node-1
8). 查看节点上的可用磁盘,排除系统盘
# 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
9).格式化node-1节点用于ceph存储的磁盘

使用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 而不是直接使用逻辑卷的路径。

10). 查看集群状态是否正常
[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)组件。

image

1. 添加Metadata Server

要使用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

2. 添加Monitors

在添加第二个mon或者更多mon时,必须先修改admin节点和将要部署mon节点的ceph.conf的配置文件,修改mon_initial_members, mon_hostpublic_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 服务的同一级。

3. 添加 Managers

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:

4. 添加RGW 实例

使用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
相关文章
相关标签/搜索