环境:centos7.6

1、ceph概论解析

Ceph 存储集群至少需要一个 Ceph Monitor 和两个 OSD 守护进程。而运行 Ceph 文件系统客户端时,则必须要有元数据服务器( Metadata Server )

  • Ceph OSDsCeph OSD 守护进程( Ceph OSD )的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD 守护进程的心跳来向 Ceph Monitors 提供一些监控信息。当 Ceph 存储集群设定为有2个副本时,至少需要2个 OSD 守护进程,集群才能达到 active+clean 状态( Ceph 默认有3个副本,但你可以调整副本数)。
  • MonitorsCeph Monitor维护着展示集群状态的各种图表,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图。 Ceph 保存着发生在Monitors 、 OSD 和 PG上的每一次状态变更的历史信息(称为 epoch )。
  • MDSsCeph 元数据服务器( MDS )为 Ceph 文件系统存储元数据(也就是说,Ceph 块设备和 Ceph 对象存储不使用MDS )。元数据服务器使得 POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 lsfind 等基本命令。
  • RGW为Rados Gateway的缩写,ceph通过RGW为互联网云服务提供商提供对象存储服务。RGW在librados之上向应用提供访问ceph集群的RestAPI, 支持Amazon S3和openstack swift两种接口。对RGW最直接的理解就是一个协议转换层,把从上层应用符合S3或Swift协议的请求转换成rados的请求, 将数据保存在rados集群中。
  • mgr 作为 Ceph 集群的管理进程,未来会负责整个集群的管理操作和监控。现在的部分 Monitor 功能会迁移到 ceph-mgr 中,使得 Monitor 更专注于集群的数据面控制,降低集群对于 Monitor 的要求。
    在12.2版本以后的版本,mgr已成为标配,不安装成功的话,集群状态会WARN。

Ceph 把客户端数据保存为存储池内的对象。通过使用 CRUSH 算法, Ceph 可以计算出哪个归置组(PG)应该持有指定的对象(Object),然后进一步计算出哪个 OSD 守护进程持有该归置组。 CRUSH 算法使得 Ceph 存储集群能够动态地伸缩、再均衡和修复。

2、Ceph版本发行的策略是:

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

3、本次ceph安装规划

ceph13.2使用docker部署

1、安装docker

https://www.cnblogs.com/wukc/p/13265528.html  --参考

2、下载ceph镜像

一、有网络的情况
docker pull ceph/daemon:latest-mimic   #直接在线下载
二、没有网络可以在线下载拷贝进入
链接: https://pan.baidu.com/s/1ynE2HJa5P1yuwMUI40BOmg 提取码: p42r
docker load -i ceph-images.tar

3、创建ceph目录

mkdir /etc/ceph /var/lib/ceph

4、部署mon

docker run -d --restart=always --net=host --name=mon \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph:/var/lib/ceph \
-e MON_IP=172.21.210.28 \
-e CEPH_PUBLIC_NETWORK=172.21.210.0/24 \
d24426627972 mon
验证mon1
[root@host-172-21-210-28 ~]# docker exec mon ceph -s
cluster:
id: 332df68e-812d-432d-82ac-9e2dc443a228
health: HEALTH_OK

services:
mon: 1 daemons, quorum host-172-21-210-28
mgr: no daemons active
osd: 0 osds: 0 up, 0 in

data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs: 

参数解析
Monitor不能通过NAT网络通信,使用--net=host 暴露Docker主机网络;
MON_IP 是Monitor的IP地址, 写宿主机的ip;
MON_NAME 是Monitor的名称,默认是主机名;
CEPH_PUBLIC_NETWORK 这个是Monitor所在网络的CIDR ,这里也写宿主机的;
CEPH_CLUSTER_NETWORK 这个OSD之间复制数据用到的网络,默认和CEPH_PUBLIC_NETWORK相同;
ceph/daemon mon 这个ceph/daemon是images;
这些参数都是在镜像内部的variables_entrypoint.sh中定义的
如果要增加同一个集群的Monitor的数量,需要将/etc/ceph/和/var/lib/ceph/bootstrap-* 这些目录下的文件复制到其他主机上,记得不要保留文件的属主权限。使用rsync -r 或者scp -r远程复制就行

设置pool副本数(两种方法)
命令行docker exec mon ceph osd pool set data size 3
配置文件:vim ceph/ceph.conf
      osd_pool_default_size = 2

修改mon的副本数 默认是3个我们只有两台服务器,改成2
echo "osd_pool_default_size = 2" >> /etc/ceph/ceph.conf
docker restart mon

拷贝文件到29
scp -r /etc/ceph/* root@172.21.210.29:/etc/ceph/
scp -r /var/lib/ceph/bootstrap-* root@172.21.210.29:/var/lib/ceph/

部署29的mon
docker run -d --restart=always --net=host --name=mon1 \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph:/var/lib/ceph \
-e MON_IP=172.21.210.29 \
-e CEPH_PUBLIC_NETWORK=172.21.210.0/24 \
d24426627972 mon
验证mon1
[root@host-172-21-210-29 ceph]# docker exec mon1 ceph -s
cluster:
id: 332df68e-812d-432d-82ac-9e2dc443a228
health: HEALTH_OK

services:
mon: 2 daemons, quorum host-172-21-210-28,host-172-21-210-29
mgr: no daemons active
osd: 0 osds: 0 up, 0 in

data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:

5、部署OSD

28上运行
docker run -d  --restart=always --net=host --name=osd \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph:/var/lib/ceph \
-v /dev/:/dev/ \
--pid=host \
--privileged=true \
-e OSD_DEVICE=/dev/vdb \
-e OSD_TYPE=disk \
-v /run/udev:/run/udev/ \
d24426627972 osd

29 上运行
docker run -d --restart=always --net=host --name=osd1 \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph:/var/lib/ceph \
-v /dev/:/dev/ \
--pid=host \
--privileged=true \
-e OSD_DEVICE=/dev/vdb \
-e OSD_TYPE=disk \
-v /run/udev:/run/udev/ \
d24426627972 osd

6、mgr安装

28上执行
docker run -d --restart=always --net=host --name=mgr \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph:/var/lib/ceph \
d24426627972 mgr
--查看状态
docker exec -it mon ceph -s 

7、开启mgr的dashbord

1、开启dashboard 功能
docker exec mgr ceph mgr module enable dashboard
2、创建证书
docker exec mgr ceph dashboard create-self-signed-cert
3、创建 web 登录用户密码
docker exec mgr ceph dashboard set-login-credentials {user-name} {password}
4 配置端口:mgr dashboard
docker exec mgr ceph config set mgr mgr/dashboard/server_addr $IP
docker exec mgr ceph config set mgr mgr/dashboard/server_port $PORT
5 关闭https
docker exec mgr ceph config set mgr mgr/dashboard/ssl false
6 重启
docker restart mgr
7、查看服务访问方式
docker exec mgr ceph mgr services
访问:
curl http://$ip:$prot

8、Ceph RGW节点安装

29上执行
docker run --restart=always \
-d --net=host \
--name=rgw \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph/:/var/lib/ceph \
d24426627972 rgw

[root@host-172-21-210-29 ~]# curl http://127.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>

9、集群状态验证

[root@host-172-21-210-28 ~]# docker exec mon ceph -s
  cluster:
    id:     332df68e-812d-432d-82ac-9e2dc443a228
    health: HEALTH_OK
 
  services:
    mon: 2 daemons, quorum host-172-21-210-28,host-172-21-210-29
    mgr: host-172-21-210-28(active)
    osd: 2 osds: 2 up, 2 in
    rgw: 1 daemon active
 
  data:
    pools:   4 pools, 32 pgs
    objects: 219  objects, 1.1 KiB
    usage:   2.0 GiB used, 998 GiB / 1000 GiB avail
    pgs:     32 active+clean

ceph13.2使用docker部署

 10、ceph常用命令

--查看mon状态 
docker exec mon ceph -s
docker exec -it mon ceph -s
观察集群内正发生的事件
docker exec mon ceph -w
检查集群的使用情况
docker exec mon1 ceph df 
检查OSD状态
docker exec mon1 ceph osd stat
查看PG
docker exec mon1 ceph pg dump
列出存储池
docker exec mon1 ceph osd lspools
创建存储池
docker exec mon1 ceph osd pool create data 200
设置存储池最大对象数
docker exec mon1 ceph osd pool set-quota data max_objects 10000
删除存储池
docker exec mon1 ceph osd pool delete data data --yes-i-really-really-mean-it
如果确定要删除存储,需要将pg_name 输入两次,然后写上--yes-i-really-really-mean-it
这里有个提示,修改当前的Monitor配置文件/etc/ceph/ceph.conf
添加参数: mon_allow_pool_delete = true
然后执行 docker restart mon
docker exec mon1 ceph osd pool delete data data --yes-i-really-really-mean-it
pool 'data' removed
重命名存储池
docker exec mon1 ceph osd pool rename data datanew
pool 'data' renamed to 'datanew'
查看存储池统计信息
docker exec mon1 rados df
执行下面的命令新建一个用户 (S3 接口):
radosgw-admin user create --uid={username} --display-name="{display-name}" [--email={email}]
docker exec mon1 radosgw-admin user create --uid=johndoe --display-name="John Doe" --email=john@example.com