ceph分布式文件系统搭建与使用

ceph简介

Ceph is a distributed object, block, and file storage platform.

也就是说,使用Ceph系统我们可以提供对象存储、块设备存储和文件系统服务,Ceph底层提供了分布式的RADOS存储,用与支撑上层的librados和RGW、RBD、CephFS等服务。Ceph实现了非常底层的object storage,是纯粹的SDS,并且支持通用的ZFS、BtrFS、Ext4等文件系统,能轻易得Scale,没有单点故障。

所有 Ceph 存储集群的部署都始于部署一个个 Ceph 节点、网络和 Ceph 存储集群。 Ceph 存储集群至少需要一个 Ceph Monitor ,一个Ceph Manager,一个 OSD 守护进程。而运行 Ceph 文件系统客户端时,则必须要有元数据服务器( Metadata Server )。

Monitors: Ceph Monitor维护着展示集群状态的各种图表,包括监视器map、管理map、 OSD map、归置组( PG )map、和 CRUSH map。这些映射是Ceph守护进程相互协调所需的关键集群状态。Monitors还负责管理守护进程和客户端之间的身份验证。通常需要至少三台显示器才能实现冗余和高可用性。

Managers: Ceph Manager守护进程(ceph-mgr)负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载。Ceph Manager守护程序还托管基于python的插件来管理和公开Ceph集群信息,包括基于Web的仪表板和REST API。高可用性通常需要至少两个managers节点。

Ceph OSD:Ceph OSD(对象存储守护进程,ceph-osd)存储数据,处理数据复制,恢复,重新平衡,并通过检查其他Ceph OSD守护进程的心跳向Ceph Manager和Monitors提供一些监视信息。通常需要至少3个Ceph OSD来实现冗余和高可用性。

MDSs:Ceph元数据服务器(MDS,ceph-mds)代表Ceph文件系统存储元数据(即,Ceph块设备和Ceph对象存储器不使用MDS)。 Ceph元数据服务器允许POSIX文件系统用户执行基本命令(如ls,find等),而不会给Ceph存储集群带来巨大的负担。

Ceph将数据作为对象存储在逻辑存储池中。使用CRUSH算法,Ceph计算哪个放置组应包含该对象,并进一步计算哪个Ceph OSD守护程序应存储放置组。 CRUSH算法使Ceph存储集群能够动态扩展,重新平衡和恢复。

ceph 存储集群搭建

ceph集群架构

安装前准备

1 管理节点安装ceph-deploy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

cat << EOM > /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-luminous/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOM

sudo yum update
sudo yum install ceph-deploy

2 配置预装环境

1
2
3
4
5
6
7
8
9
10
11
12
13
1 安装 ntp 
sudo yum install ntp
2 创建一个deploy用户,使用ansible用户。
useradd ansible
passwd ansible
echo "ansible ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ansible
3 配置免密登录
su - ansible
ssh-keygen
ssh-copy-id ceph-01 ceph-02 ceph-03
4 关闭防火墙,关闭selinux
systemctl stop firewall
sudo setenforce 0

部署ceph 存储集群

都是在admin-node 执行下面操作

1 创建一个ceph-admin文件夹

1
2
su - ansible
mkdir ceph-admin

2 初始化安装镜像源

1
2
export CEPH_DEPLOY_REPO_URL=http://mirrors.163.com/ceph/rpm-luminous/el7
export CEPH_DEPLOY_GPG_URL=http://mirrors.163.com/ceph/keys/release.asc

3 创建mon节点

1
ceph-deploy new ceph-01 ceph-02 ceph-03

4 配置 ceph.conf配置文件
添加如下配置:

1
2
3
4
5
6
7
8
9
osd pool default size = 3
osd pool default min size = 2
osd pool default pg num = 32
osd pool default pgp num = 32
rgw_thread_pool_size = 512
objecter_inflight_ops = 4096
objecter_inflight_op_bytes = 1048576000
osd_op_num_shards = 16
osd_client_message_size_cap = 1073741824

5 安装 Ceph packages

1
ceph-deploy install ceph-01 ceph-02 ceph-03

6 初始化 mon节点,生成key

1
ceph-deploy mon create-initial

7 复制key ceph.conf到各节点

1
ceph-deploy admin ceph-01 ceph-02 ceph-03

8 创建管理节点

1
ceph-deploy mgr create ceph-01 ceph-02 ceph-03

9 创建添加OSDs

1
2
3
4
5
6
ceph-deploy osd create --data vgdata/dataceph1 ceph-01
ceph-deploy osd create --data vgdata/dataceph2 ceph-01
ceph-deploy osd create --data vgdata/dataceph1 ceph-02
ceph-deploy osd create --data vgdata/dataceph2 ceph-02
ceph-deploy osd create --data vgdata/dataceph1 ceph-03
ceph-deploy osd create --data vgdata/dataceph2 ceph-03

10 检查状态

1
ssh ceph-01 sudo ceph -s

11 激活dashboard prometheus

1
2
ceph mgr module enable dashboard
ceph mgr module enable prometheus

创建对象存储及对象存储操作

1 创建对象储存服务

1
ceph-deploy rgw create ceph-01 ceph-02 ceph-03

2 创建对象存储admin用户,保存user跟keys

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 radosgw-admin user create --uid=rgw_admin --display-name="rgw_admin"
lay-name="rgw_admin"
{
"user_id": "rgw_admin",
"display_name": "rgw_admin",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [],
"keys": [
{
"user": "rgw_admin",
"access_key": "ETD21OM**********3R7",
"secret_key": "****FvXC**********0LBWIjO****bKI"
}
],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
...
...
}

3 安装配置s3cmd

1
2
3
4
5
yum install s3cmd
s3cmd --configure 配置keys host_base
修改 root/.s3cfg
host_base = 192.168.1.4:3480
host_bucket = 192.168.1.4:3480/%(bucket)

4 创建桶

1
s3cmd mb s3://store-test

5 操作桶测试

1
s3cmd put a.jpg s3://store_test --acl-public

6 网页验证图片显示

1
https://***********.com/a.jpg