目录
2.3在指定的节点上创建一个 Ceph 管理器(MGR)守护进程。
5.5创建一个名为 rbd-demo 的专门用于 RBD 的存储池
理论部分
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
四、验证网络环境(请参阅 第一步、第四步)
五、配置 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磁盘部署
部署数据盘可参阅文献(请参阅 第三步):
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 [email protected]
- # 创建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