【从0开始 分布式存储】Win10环境 使用 VirtualBox 搭建Ubuntu20.04虚拟机 使用cephadm 搭建ceph小集群 运行对象存储服务 使用s3cmd进行测试

本文摘要:Win10环境下使用VirtualBox安装三台Ubuntu20.04虚拟机,搭建ceph,运行对象存储系统,使用s3cmd进行测试

要用到的软件
VirtualBox:装虚拟机
Xshell:终端管理

以上工具装好后进行后面步骤

本文写的是详细步骤,系统操作熟悉的可以看简略版

正文:

1 基础准备

1.1 虚拟机装系统 详细步骤

1.2 系统装起来之后配网络。
网卡1是上外网的,不动,网卡2配置静态ip,用于虚拟机间,虚拟机和主机通信
ip自行设置,方法可以参考 -> 静态ip配置
本人主机与ip分配如下:

ceph11 10.0.0.211
ceph12 10.0.0.212
ceph13 10.0.0.213

1.3.网络配置好后,验证网络
外网:ping baidu.com
内网:ping 其他主机

1.4.用Xshell连接终端
步骤见链接->Xshell连接步骤

这步做完后,基本操作平台就好了,接下来是使用cephadm搭建ceph
在这里插入图片描述

2 使用cephadm搭建ceph集群

总的流程见官方文档,本文内容在此基础上提炼了必要步骤,建议结合官网文档阅读
2.0 cephadm介绍
在这里插入图片描述

2.1 安装cephadm需求的环境

在这里插入图片描述
因为使用的是Ubuntu20,所以只差docker了
直接

apt install docker.io

安装后通过

docker -v

检查一下

2.2 安装cephadm
有两种方法,基于curl和特点版本安装
这里直接使用简单的

apt install -y cephadm

注意两种方法只能用一种
在这里插入图片描述
2.3引导一个新集群
cephadm bootstrap --mon-ip
其中ip填写集群里第一个主机的ip

cephadm bootstrap --mon-ip 10.0.0.211

这一步需要等一会,成功后显示dashboard可用
在这里插入图片描述
可在浏览器中访问
在这里插入图片描述
2.4启用 CEPH CLI

cephadm shell

详细可见官网文档对应部分
在这里插入图片描述
2.5 添加主机

这一步是【重要步骤】

2.5.1 给其他主机添加SSH公钥

ssh-copy-id -f -i /etc/ceph/ceph.pub root@*<new-host>*

例如

ssh-copy-id -f -i /etc/ceph/ceph.pub root@host2

没有配置host的话可用直接输入ip,比如

ssh-copy-id -f -i /etc/ceph/ceph.pub root@10.0.0.212 
ssh-copy-id -f -i /etc/ceph/ceph.pub root@10.0.0.213

【注意】这一步需要开启机器的远程登录root功能,详见文中标准解决方法->配置ssh可root登录及问题

2.5.2 告诉ceph,新节点属于集群

ceph orch host add *<newhost>* [*<ip>*] [*<label1> ...*]

例如

ceph orch host add host2 10.10.0.102

【注意】这一步后要开始等待docker拉进程,进程没起来之前不能做之后的步骤

sudo docker ps

查看进程在这里插入图片描述
也可以直接在dashboard里查看
在这里插入图片描述

2.6 添加OSD

每一个存储盘可以当做一个OSD,要求:
在这里插入图片描述

查看可用设备

ceph orch device ls

在这里插入图片描述
添加OSD
在这里插入图片描述
图简单可以直接使用方法1,但这样每当系统添加一个盘都会被当做OSD,不适用实际部署

自行选择一种方法运行
在这里插入图片描述
查看集群状态

ceph -s #查看集群状态

可以看到OSD以及挂载,系统健康
在这里插入图片描述
dashboard一样可以查看
在这里插入图片描述
至此Ceph环境搭建完成

3 创建对象存储

官方文档:https://docs.ceph.com/en/pacific/cephadm/services/rgw/#cephadm-deploy-rgw

3.1 开启RGW服务
先说几个我自己学习过程中觉得重要的概念

1、zone:可用区,有一个或多个对象网关实例组成。zone不可以跨集群,配置zone不同于其他典型配置,因为不需要在ceph.conf中配置。
2、zonegroup:以前叫做"region”,有多个zone组成,一个zonegroup里面有一个master
zone,在同一个zonegroup中的多个zone 可以同步元数据和数据,提供灾难恢复能力。
3、realm:代表一个唯一的命名空间,有一个或多个zonegroup组成。在同一个realm中的不同zonegroup只能同步元数据。在realm中有period的概念,表示zonegroup的配置状态,修改zonegroup,必须更新period。

要明确一点,一个zone属于一个zonegroup,两者都属于一个realm(域名)
创建RGW的命令中realm和zone是不可缺省的。
可以结合以上概念可以看看上一节的 官方文档 中的内容。

然后这一节的干货来了!!!

详细看了cephadm中关于rgw的创建语句
其实总的来说就是一句话

ceph orch apply rgw *<name>* [--realm=*<realm-name>*] [--zone=*<zone-name>*] --placement="*<num-daemons>* [*<host1>* ...]"

很重要的一点是这句话会自动创建里面写的realm和zone,所以对于初次上手完全不需要做realm,zone,zonegroup的创建

所以最终命令简化就是

ceph orch apply rgw <reaml> < zone> --placement="*<num-daemons>* [*<host1>* ...]"

对于本例来说就是

 ceph orch apply rgw rgw01 zone01 --placement="3 ceph11 ceph12 ceph13"  --port=8000

查看各节点 rgw 是否启动

ceph orch ps --daemon-type rgw

在这里插入图片描述
3.2 给Dashboard配置对象网关
Dashboard一开始是不能直接看见对象网关的,需要自行进行配置,方便可视化查看(可以不做)
步骤如下:
3.2.1 创建Dashboard账户

radosgw-admin user create --uid=dashboard --display-name=dashboard --system

获取"access_key"与"secret_key",自行保存。

3.2.2 "access_key"与"secret_key"写入对应文件
【注】这一步在容器中进行,也就是在root账户下 输入cephadm shell后的环境中

vi access-key

然后将access_key保存(:wq)

vi secret-key

secret-key同理。
3.2.3 启用

ceph dashboard set-rgw-api-access-key -i access-key
ceph dashboard set-rgw-api-secret-key -i secret-key

完成后即可在Dashboard中看见对象网关。
在这里插入图片描述

3.3 创建S3用户

radosgw-admin user create --uid=s3user01 --display-name=s3user01 

同样记得保存下"access_key"与 “secret_key”

同样可以在Dashboard中查看结果
在这里插入图片描述

4 使用s3cmd测试对象存储

4.1 安装s3cmd

sudo apt install s3cmd

4.2 配置

s3cmd --configure

内容中几个较为重要的为:

Access Key
Secret Key
S3 Endpoint
DNS-style bucket+hostname:port template for accessing a bucket
Use HTTPS protocol

其他的按回车默认就行
示例


> Access Key: xxxxxxxx (上一步创建的s3账户中的Access Key)
> Secret Key: xxxxxxxx (同理)
> S3 Endpoint: 10.0.0.211:8000(主机ip+端口号)
> DNS-style bucket+hostname:port template for accessing a bucket:%(bucket)s.10.0.0.211  
> Use HTTPS protocol:no

最后显示如下
在这里插入图片描述
4.3 测试
创建桶

s3cmd mb s3://my-bucket-name

在这里插入图片描述
若遇到无法创建 报错

ERROR: [Errno -2] Name or service not known ERROR: Connection Error:
Error resolving a server hostname. Please check the servers address
specified in ‘host_base’, ‘host_bucket’, ‘cloudfront_host’,
‘website_endpoint’

解决方法:https://blog.csdn.net/HzauTriste/article/details/123139323

列举桶

s3cmd ls

在这里插入图片描述
上传 file.txt 到某个 bucket

s3cmd put file.txt s3://my-bucket-name/file.txt

删除桶

s3cmd rb s3://my-bucket-name

在这里插入图片描述
该节参考自https://www.cnblogs.com/xd502djj/p/3604783.html

至此实验结束。
后续内容是使用负载生成器进行负载测试,观测分布式存储系统性能特点(尾延迟等)。

后续内容的博客地址:
使用s3的python接口操作ceph对象存储基本操作
https://blog.csdn.net/HzauTriste/article/details/123183580?spm=1001.2014.3001.5502


版权声明:本文为HzauTriste原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。