目录
理论部分
Ceph的诞生主要是为了解决以下问题:
操作部分
第一部分(虚拟机配置)
一、修改主机名
二、修改防火墙、SELinux状态
三、修改hosts文件
四、验证网络环境(请参阅 第一步、第四步)
五、配置 ceph 源
六、开始执行yum安装
七、创建目录
第二部分(部署ceph)
1.1初始化ceph集群
1.2修改ceph.conf配置文件为单节点
2.1初始化 Ceph 监视器(MON)节点
2.2 Ceph 配置文件和密钥分发到指定的管理节点
2.3在指定的节点上创建一个 Ceph 管理器(MGR)守护进程。
3.1磁盘部署
3.2 创建OSD
4.1启动rgw
4.2测试rgw是否正常启动
4.3设置pool 和 pgs的值
4.4利用s3创建 桶来测试
4.5查看用户信息
5.5创建一个名为 rbd-demo 的专门用于 RBD 的存储池
5.6将存储池转换为 RBD 模式
5.7初始化存储池
5.8创建镜像
5.9镜像管理
6.1创建ceph文件系统(ceph fs)池
6.2创建文件系统
7.1创建dashboard
7.2禁用ssl加密
7.3配置IP和端口
第三部分(S3cmd的部署配置)
1.S3cmd安装
2.创建s3cmd使用的用户生成key
3.1 配置s3使其可以连接到ceph集群
3.2 修改刚生成的/root/.s3cfg中的三处配置
3.3 创建名为test-bucket的bucket
3.6 查看bucket桶列表
理论部分
Ceph的诞生主要是为了解决以下问题:
统一存储的I/O问题:
Ceph提供对象、块和文件存储,是一个统一存储解决方案,旨在解决不同类型数据存储的I/O问题。
通过整合多种存储接口,Ceph能够满足不同应用对数据存储的需求。
高性能分布式文件系统的需求:
Ceph最初是作为一个PhD研究项目开始的,目标是开发下一代高性能分布式文件系统。
随着云计算的发展,Ceph成为了一个受关注的开源项目,并乘上了OpenStack的春风,得到了广泛的应用和推广。
数据容错和无缝复制:
Ceph被设计成一个没有单点故障的完全分布式存储系统。
通过数据复制和容错机制,确保数据的可靠性和稳定性。这种设计使得Ceph能够在硬件故障时自动进行数据修复和管理,提高了存储系统的可用性。
可扩展性和灵活性:
Ceph支持PB级别的数据扩展,并且可以部署到上千台通用服务器上。
这种可扩展性使得Ceph能够满足不断增长的数据存储需求。同时,Ceph的去中心化设计也提供了更大的灵活性,使得集群的扩展更加容易和高效。
Ceph的诞生主要是为了解决统一存储的I/O问题、高性能分布式文件系统的需求、数据容错和无缝复制以及可扩展性和灵活性等问题。
操作部分
第一部分(虚拟机配置)
一、修改主机名
-
[root@localhost ~]# hostnamectl set-hostname user33
-
[root@localhost ~]# hostname
-
-
[root@localhost ~]# bash
二、修改防火墙、SELinux状态
-
[root@user33 ~]# setenforce 0
-
[root@user33 ~]# sed -i "s/SELINUX=enforcing/SELINUX=permissive/g" /etc/selinux/config
-
-
[root@user33 ~]# systemctl disable firewalld.service
-
[root@user33 ~]# systemctl stop firewalld.service
三、修改hosts文件
[root@user33 ~]# echo "10.18.33.143 user33" | tee -a /etc/hosts
四、验证网络环境(请参阅 第一步、第四步)
https://blog.csdn.net/weixin_73460492/article/details/137519244?spm=1001.2014.3001.5501http://DHCP集群-(双机热备、DHCP主从服务器)
五、配置 ceph 源
-
[root@user33 ~]# ls /etc/yum.repos.d/
-
[root@user33 ~]# mkdir /etc/yum.repos.d/bak
-
[root@user33 ~]# mv /etc/yum.repos.d/* /etc/yum.repos.d/bak/
-
-
[root@user33 ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
-
[root@user33 ~]# curl -o /etc/yum.repos.d/epel-7.repo https://mirrors.aliyun.com/repo/epel-7.repo
-
[root@user33 ceph]# cat -n /etc/yum.repos.d/ceph.repo
-
1 [Ceph]
-
2 name=Ceph packages for $basearch
-
3 baseurl=http://download.ceph.com/rpm-mimic/el7/$basearch
-
4 enabled=1
-
5 gpgcheck=1
-
6 type=rpm-md
-
7 gpgkey=https://download.ceph.com/keys/release.asc
-
8 priority=1
-
9
-
10 [Ceph-noarch]
-
11 name=Ceph noarch packages
-
12 baseurl=http://download.ceph.com/rpm-mimic/el7/noarch
-
13 enabled=1
-
14 gpgcheck=1
-
15 type=rpm-md
-
16 gpgkey=https://download.ceph.com/keys/release.asc
-
17 priority=1
-
18
-
19 [ceph-source]
-
20 name=Ceph source packages
-
21 baseurl=http://download.ceph.com/rpm-mimic/el7/SRPMS
-
22 enabled=1
-
23 gpgcheck=1
-
24 type=rpm-md
-
25 gpgkey=https://download.ceph.com/keys/release.asc
-
26 priority=1
六、开始执行yum安装
-
[root@user33 ~]# yum clean all && yum makecache && yum repolist
-
源标识 源名称 状态
-
Ceph/x86_64 Ceph packages for x86_64 524
-
Ceph-noarch Ceph noarch packages 16
-
base/7/x86_64 CentOS-7 - Base - mirrors.aliyun.com 10,072
-
ceph-source Ceph source packages 0
-
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 13,798
-
extras/7/x86_64 CentOS-7 - Extras - mirrors.aliyun.com 526
-
updates/7/x86_64 CentOS-7 - Updates - mirrors.aliyun.com 5,802
-
repolist: 30,738
-
-
[root@user33 ceph]# yum -y install ceph-deploy ceph ceph-radosgw python-setuptools python2-subprocess32 pyhton-pip epel-release
七、创建目录
-
[root@user33 ~]# mkdir ./ceph
-
[root@user33 ~]# cd ceph/
第二部分(部署ceph)
1.1初始化ceph集群
[root@user33 ceph]# ceph-deploy new user33
1.2修改ceph.conf配置文件为单节点
-
[root@user33 ceph]# echo "osd pool default min_size = 1" | tee -a ceph.conf
-
[root@user33 ceph]# echo "osd pool default size = 1" | tee -a ceph.conf
-
[root@user33 ceph]# echo "public_network = 10.18.33.0/24" | tee -a ceph.conf
osd pool default min_size = 1
这行配置追加到ceph.conf
文件的末尾。这设置了OSD(对象存储设备)池的默认最小大小为1。这意味着,为了保持数据完整性,Ceph将尝试确保至少有一个OSD是可用的。
osd pool default size = 1
这行配置追加到ceph.conf
。这设置了OSD池的默认大小为1。这通常与复制策略和其他相关的设置一起工作,以确定数据应如何在OSD之间进行复制。
public_network = 10.18.33.0/24
这行配置追加到ceph.conf
。这指定了Ceph集群用于公共通信(例如,客户端与集群之间的通信)的网络。
2.1初始化 Ceph 监视器(MON)节点
[root@user33 ceph]# ceph-deploy mon create-initial
2.2 Ceph 配置文件和密钥分发到指定的管理节点
[root@user33 ceph]# ceph-deploy admin user33
2.3在指定的节点上创建一个 Ceph 管理器(MGR)守护进程。
[root@user33 ceph]# ceph-deploy mgr create user33
3.1磁盘部署
部署数据盘可参阅文献(请参阅 第三步):
https://blog.csdn.net/weixin_73460492/article/details/137612920?spm=1001.2014.3001.5501http://linux部署RAID10磁盘阵列
3.2 创建OSD
[root@user33 ~]# ceph-deploy osd create user33 --data /dev/sdb1
4.1启动rgw
[root@user33 ceph]# ceph-deploy rgw create user33
4.2测试rgw是否正常启动
-
[root@user33 ceph]# ss -nltp | grep 7480
-
LISTEN 0 128 *:7480 *:* users:(("radosgw",pid=12013,fd=38))
-
-
[root@user33 ceph]# curl 10.18.33.143: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>
参数 | 讲解 |
---|---|
-n | 用于不解析服务名称 |
-t | 表示TCP套接字 |
-l | 用于仅显示正在监听的套接字 |
-p | 用于显示与每个套接字关联的进程信息 |
4.3设置pool 和 pgs的值
-
[root@user33 ceph]# ceph osd pool set .rgw.root pg_num 40
-
set pool 1 pg_num to 40
-
[root@user33 ceph]# ceph osd pool set .rgw.root pgp_num 40
-
set pool 1 pgp_num to 40
.rgw.root
通常是Ceph对象存储网关(RADOS Gateway, RGW)使用的内部存储池。
pg_num
: 设置存储池的Placement Group(PG)数量。Placement Groups是Ceph用于在OSDs(Object Storage Daemons)之间分散存储对象的逻辑容器。
合理设置PG数量对于性能和数据分布非常重要。
太少的PGs可能导致OSD之间负载不均衡,而太多的PGs则可能导致额外的管理开销。
pgp_num
: 设置用于Placement Group的放置目的的PGP(Placement Group for Placement)数量。在大多数情况下,
pg_num
和pgp_num
应该设置为相同的值。PGP是用于计算数据应该放置到哪个OSD上的逻辑结构,通常与PGs一一对应。
4.4利用s3创建 桶来测试
[root@user33 ceph]# radosgw-admin user create --uid="admin" --display-name="admin"
4.5查看用户信息
-
# 记录access_key和secret_access_key的值
-
[root@user33 ceph]# radosgw-admin user info --uid="admin"
5.5创建一个名为 rbd-demo 的专门用于 RBD 的存储池
-
[root@admin03 ceph]# ceph osd pool create rbd-demo 64 64
-
pool 'rbd-demo' created
5.6将存储池转换为 RBD 模式
-
[root@admin03 ceph]# ceph osd pool application enable rbd-demo rbd
-
enabled application 'rbd' on pool 'rbd-demo'
5.7初始化存储池
-
# -p 等同于 --pool
-
[root@admin03 ceph]# rbd pool init -p rbd-demo
5.8创建镜像
-
[root@admin03 ~]# ls
-
anaconda-ks.cfg ceph ceph-deploy-ceph.log cirros-0.3.4-x86_64-disk.img
-
-
[root@admin03 ~]# rbd create -p rbd-demo --image cirros-0.3.4-x86_64-disk.img --size 1G
5.9镜像管理
-
# 列出Ceph集群中所有的存储池(pools)
-
[root@admin03 ~]# ceph osd lspools
-
1 .rgw.root
-
2 default.rgw.control
-
3 default.rgw.meta
-
4 default.rgw.log
-
5 default.rgw.buckets.index
-
6 rbd-demo
-
-
# 列出指定存储池(在这里是rbd-demo)中的所有RBD镜像
-
[root@admin03 ~]# rbd ls -l -p rbd-demo
-
NAME SIZE PARENT FMT PROT LOCK
-
cirros-0.3.4-x86_64-disk.img 1 GiB 2
-
-
#列出指定存储池(在这里是rbd-demo)中的所有RBD镜像
-
[root@admin03 ~]# rbd info -p rbd-demo --image cirros-0.3.4-x86_64-disk.img
-
rbd image 'cirros-0.3.4-x86_64-disk.img':
-
size 1 GiB in 256 objects
-
order 22 (4 MiB objects)
-
id: d3816b8b4567
-
block_name_prefix: rbd_data.d3816b8b4567
-
format: 2
-
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
-
op_features:
-
flags:
-
create_timestamp: Thu May 9 10:48:55 2024
6.1创建ceph文件系统(ceph fs)池
-
# 创建了一个名为cephfs_data的存储池,并设置了其PG(Placement Group)的数量为64
-
[root@admin03 ~]# ceph osd pool create cephfs_data 64
-
pool 'cephfs_data' created
-
-
# 创建了一个名为cephfs_metadata的存储池,并设置了其PG的数量为32
-
[root@admin03 ~]# ceph osd pool create cephfs_metadata 32
-
pool 'cephfs_metadata' created
6.2创建文件系统
-
[root@admin03 ~]# ceph fs new cephfs cephfs_metadata cephfs_data
-
new fs with metadata pool 8 and data pool 7
-
-
# 查看文件系统
-
[root@admin03 ~]# ceph fs ls
-
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
-
-
# 查看文件系统状态
-
[root@admin03 ~]# ceph fs status cephfs
-
cephfs - 0 clients
-
======
-
+------+-------+-----+----------+-----+------+
-
| Rank | State | MDS | Activity | dns | inos |
-
+------+-------+-----+----------+-----+------+
-
+------+-------+-----+----------+-----+------+
-
+-----------------+----------+-------+-------+
-
| Pool | type | used | avail |
-
+-----------------+----------+-------+-------+
-
| cephfs_metadata | metadata | 0 | 46.4G |
-
| cephfs_data | data | 0 | 46.4G |
-
+-----------------+----------+-------+-------+
-
+-------------+
-
| Standby MDS |
-
+-------------+
-
+-------------+
-
+---------+---------+
-
| version | daemons |
-
+---------+---------+
-
+---------+---------+
7.1创建dashboard
[root@user33 ~]# ceph mgr module enable dashboard
7.2禁用ssl加密
[root@user33 ~]# ceph config set mgr mgr/dashboard/ssl false
7.3配置IP和端口
-
# 配置IP和端口
-
[root@user33 ~]# name="user33"
-
[root@user33 ~]# ip=10.18.33.143
-
[root@user33 ~]# POART=8443
-
-
[root@user33 ~]# ceph config set mgr "mgr/dashboard/$name/server_addr" "$IP"
-
[root@user33 ~]# ceph config set mgr "mgr/dashboard/$name/server_port" "$PORT"
-
[root@user33 ~]# ceph config set mgr "mgr/dashboard/$name/ssl_server_port" "$PORT"
-
-
[root@user33 ~]# ceph config set mgr mgr/dashboard/user33/server_addr 10.18.33.143
-
[root@user33 ~]# ceph config set mgr mgr/dashboard/user33/server_port 8443
-
-
# 设置账户密码
-
[root@user33 ~]# ceph dashboard set-login-credentials admin admin
-
-
# 更改ceph配置文件
-
[root@user33 ~]# echo "mgr_modules = dashboard" >> ./ceph/ceph.config
-
[root@user33 ~]# echo "mgr/dashboard/user33/server_addr = 10.18.33.143" >> ./ceph/ceph.config
-
[root@user33 ~]# echo "mgr/dashboard/user33/server_port = 8443" >> ./ceph/ceph.config
-
-
[root@user33 ceph]# systemctl restart ceph-mgr@user33.service
-
-
# 创建dashboard使用的用户
-
[root@admin03 ceph]# radosgw-admin user create --uid=admin --display-name=admin --system
-
-
#将两个key保存到单独一个文件中,以便下一步使用
-
[root@admin03 ceph]# echo "9AJ3IIIR4RA4TKOYFZGI" | tee -a access_key
-
9AJ3IIIR4RA4TKOYFZGI
-
[root@admin03 ceph]# echo "ruXgDbxCEoPus1LTSbNUdotN2v3B21jI1k26GvQy" | tee -a secret_key
-
ruXgDbxCEoPus1LTSbNUdotN2v3B21jI1k26GvQy
-
-
-
# 向仪表板提供凭据
-
# 配置Ceph集群的仪表盘(Dashboard)与Rados Gateway(RGW)之间的身份验证信息
-
[root@admin03 ceph]# ceph dashboard set-rgw-api-access-key access_key
-
Option RGW_API_ACCESS_KEY updated
-
[root@admin03 ceph]# ceph dashboard set-rgw-api-secret-key secret_key
-
Option RGW_API_SECRET_KEY updated
-
-
# Shell命令替换功能来从文件中读取密钥,并将其设置为RGW API的访问密钥
-
[root@admin03 ceph]# ls
-
access_key ceph.bootstrap-osd.keyring ceph.conf ceph.mon.keyring
-
ceph.bootstrap-mds.keyring ceph.bootstrap-rgw.keyring ceph-deploy-ceph.log secret_key
-
ceph.bootstrap-mgr.keyring ceph.client.admin.keyring ceph.log
-
[root@admin03 ceph]# ceph dashboard set-rgw-api-access-key $(cat access_key)
-
Option RGW_API_ACCESS_KEY updated
-
[root@admin03 ceph]# ceph dashboard set-rgw-api-secret-key $(cat secret_key)
-
Option RGW_API_SECRET_KEY updated
-
-
-
-
[root@admin03 ceph]# mkdir /mnt/cephfs
-
[root@admin03 ceph]# echo "Hello, CephFS\!" > /mnt/cephfs/testfile.txt
-
[root@admin03 ceph]# sudo mount -t ceph 10.18.33.143:8443:/ /mnt/cephfs -o name=client.admin,secret=
-
ruXgDbxCEoPus1LTSbNUdotN2v3B21jI1k26GvQy
-
adding ceph secret key to kernel failed: Invalid argument.
-
failed to parse ceph_options
-
-
# 重启dashboard
-
[root@user33 ~]# ceph mgr module disable dashboard
-
[root@user33 ~]# ceph mgr module enable dashboard
第三部分(S3cmd的部署配置)
1.S3cmd安装
[root@user33 ~]# yum install -y s3cmd
2.创建s3cmd使用的用户生成key
[root@user33 ~]# radosgw-admin user create --uid=admin --display-name=admin
3.1 配置s3使其可以连接到ceph集群
-
[root@user33 ~]# s3cmd --configure
-
-
Enter new values or accept defaults in brackets with Enter.
-
Refer to user manual for detailed description of all options.
-
-
Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
-
Access Key: 9AJ3IIIR4RA4TKOYFZGI # 复制上一步的对应key值
-
Secret Key: ruXgDbxCEoPus1LTSbNUdotN2v3B21jI1k26GvQy # 复制上一步的对应key值
-
Default Region [US]: # 默认回车
-
-
Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.
-
S3 Endpoint [s3.amazonaws.com]: # 默认回车
-
-
Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars can be used
-
if the target S3 system supports dns based buckets.
-
DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]: # 默认回车
-
-
Encryption password is used to protect your files from reading
-
by unauthorized persons while in transfer to S3
-
Encryption password:
-
Path to GPG program [/usr/bin/gpg]: # 默认回车
-
-
When using secure HTTPS protocol all communication with Amazon S3
-
servers is protected from 3rd party eavesdropping. This method is
-
slower than plain HTTP, and can only be proxied with Python 2.7 or newer
-
Use HTTPS protocol [Yes]: no # 输入no
-
-
On some networks all internet access must go through a HTTP proxy.
-
Try setting it here if you can't connect to S3 directly
-
HTTP Proxy server name: # 默认回车
-
-
New settings:
-
Access Key: 9AJ3IIIR4RA4TKOYFZGI
-
Secret Key: ruXgDbxCEoPus1LTSbNUdotN2v3B21jI1k26GvQy
-
Default Region: US
-
S3 Endpoint: s3.amazonaws.com
-
DNS-style bucket+hostname:port template for accessing a bucket: %(bucket)s.s3.amazonaws.com
-
Encryption password:
-
Path to GPG program: /usr/bin/gpg
-
Use HTTPS protocol: False
-
HTTP Proxy server name:
-
HTTP Proxy server port: 0
-
-
Test access with supplied credentials? [Y/n] n # 输入n
-
-
Save settings? [y/N] y # 输入y
-
Configuration saved to '/root/.s3cfg'
3.2 修改刚生成的/root/.s3cfg中的三处配置
-
[root@user33 ~]# cat /root/.s3cfg | grep -n cloudfront_host
-
11:cloudfront_host = 10.18.33.143
-
[root@user33 ~]# cat /root/.s3cfg | grep -n host_base
-
35:host_base = 10.18.33.143:7480
-
[root@user33 ~]# cat /root/.s3cfg | grep -n host_bucket
-
36:host_bucket = 10.18.33.143:7480
3.3 创建名为test-bucket的bucket
-
[root@user33 ~]# s3cmd mb s3://test-bucket
-
Bucket 's3://test-bucket/' created
3.6 查看bucket桶列表
-
[root@user33 ~]# s3cmd ls
-
2024-04-22 06:49 s3://test-bucket