目錄
理論部分
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
四、驗證網絡環境(請參閲 第一步、第四步)
五、配置 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 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