openstack+ceph大型試驗!全程可跟做!
openstack+ceph大型試驗!全程可跟做!
文章目錄
前言
一:CEPH理論基礎
1.1:概述
- Ceph是一個分散式叢集系統,是一個可靠、自動重均衡、自動恢復的分散式儲存系統,Ceph的主要優點是分散式儲存,在儲存每一個資料時,都會通過計算得出該資料儲存的位置,儘量將資料分佈均衡,不存在傳統的單點故障的問題,可以水平擴充套件。
- Ceph可以提供物件儲存(RADOSGW)、塊裝置儲存(RBD)和檔案系統服務(CephFS),其物件儲存可以對接網盤(owncloud)應用業務等;其塊裝置儲存可以對接(IaaS),當前主流的IaaS運平臺軟體,如:OpenStack、CloudStack、Zstack、Eucalyptus等以及kvm等。
- 至少需要一個monitor和2個OSD守護程式,執行Ceph檔案系統客戶端還需要MS(Metadata server)
1.2:相關概念
-
什麼是OSD
- OSD是儲存資料、處理資料的複製、回覆、回填在均衡、並且通過檢查其他的OSD的
守護程式的心跳,向monitor提供給一些監控資訊
- OSD是儲存資料、處理資料的複製、回覆、回填在均衡、並且通過檢查其他的OSD的
-
什麼是Monitor
監視整個叢集的狀態資訊、當Ceph的叢集為2個副本,至少需要2個OSD ,才能達到健康的狀態,同時還守護各種圖表(OSD圖、PG組、Crush圖等等)
-
ceph-mgr
- Ceph Manager Daemon,簡稱ceph-mgr。 該元件的主要作用是分擔和擴充套件monitor的部分功能,
減輕monitor的負擔,讓更好地管理ceph儲存系統ceph
- Ceph Manager Daemon,簡稱ceph-mgr。 該元件的主要作用是分擔和擴充套件monitor的部分功能,
1.3:完全無中心架構
- 完全無中心架構一-計算模式(ceph)
- 如圖是ceph儲存系統的架構,在該架構中與HDFS不同的地方在於該架構中沒有中心節點。客戶端是通過一個裝置對映關係計算出來其寫入資料的位置,這樣客戶端可以直接與儲存節點通訊,從而避免中心節點的效能瓶頸。
- 在ceph儲存系統架構中核心元件有Mon服務、OSD服務和MDS服務等。對於塊儲存型別只需要Mon服務、OSD服務和客戶端的軟體即可。其中Mon服務用於維護儲存系統的硬體邏輯關係,主要是伺服器和硬碟等線上資訊。Mon服務通過叢集的方式保證其服務的可用性。OSD服務用於實現對磁碟的管理,實現真正的資料讀寫,通常一個磁碟對應一個OSD服務。
- 客戶端訪問儲存的大致流程是,客戶端在啟動後會首先從Mon服務拉取儲存資源佈局資訊,然後根據該佈局資訊和寫入資料的名稱等資訊計算出期望資料的位置(包含具體的物理伺服器資訊和磁碟資訊),然後該位置資訊直接通訊,讀取或者寫入資料。
二:部署CEPH叢集
- 本次實驗使用之前的openstack多節點的環境,具體參考部落格https://blog.csdn.net/CN_TangZheng/article/details/104543185
- 採用的是本地源方式,因為實驗環境有限採用777的記憶體分配,推薦32G記憶體使用888的記憶體分配
2.1:部署CEPH環境
- 部署CEPH之前,必須把和儲存有關係資料清理乾淨
- 1、如果OpenStack安裝了例項,必須刪除----在控制檯dashboard刪除
- 2、如果OPenStack上產的映象,必須刪除----在控制檯dashboard刪除
- 3、如果OpenStack的cinder塊,必須刪除----在控制檯dashboard刪除
三個節點iptables 防火牆關閉
'//三個節點操作相同,僅展示控制節點的操作'
[root@ct ~]# systemctl stop iptables
[root@ct ~]# systemctl disable iptables
Removed symlink /etc/systemd/system/basic.target.wants/iptables.service.
- 檢查節點的免互動、主機名、hosts、關閉防火牆等
- 三個節點本地源配置(僅展示控制節點的操作)
[root@ct opt]# tar zxvf openstack_rocky.tar.gz '//解壓上傳的包'
[root@ct opt]# ls
openstack_rocky openstack_rocky.tar.gz
[root@ct opt]# cd /etc/yum.repos.d
[root@ct yum.repos.d]# vi local.repo
[openstack]
name=openstack
baseurl=file:///opt/openstack_rocky '//剛解壓的資料夾名稱和之前的名稱一樣,所以不需要修改'
gpgcheck=0
enabled=1
[mnt]
name=mnt
baseurl=file:///mnt
gpgcheck=0
enabled=1
[root@ct yum.repos.d]# yum clean all '//清除快取'
已載入外掛:fastestmirror
正在清理軟體源: mnt openstack
Cleaning up list of fastest mirrors
[root@ct yum.repos.d]# yum makecache '//建立快取'
2.2:CEPH叢集搭建
-
三個節點安裝Python-setuptools工具和ceph軟體
[root@ct yum.repos.d]# yum -y install python-setuptools [root@ct yum.repos.d]# yum -y install ceph
-
在控制節點,建立ceph配置檔案目錄並安裝ceph-deploy
[root@ct yum.repos.d]# mkdir -p /etc/ceph
[root@ct yum.repos.d]# yum -y install ceph-deploy
- 控制節點建立三個mon
[root@ct yum.repos.d]# cd /etc/ceph
[root@ct ceph]# ceph-deploy new ct c1 c2
[root@ct ceph]# more /etc/ceph/ceph.conf
[global]
fsid = 8c9d2d27-492b-48a4-beb6-7de453cf45d6
mon_initial_members = ct, c1, c2
mon_host = 192.168.11.100,192.168.11.101,192.168.11.102
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
-
控制節點操作:初始化mon 並收集祕鑰(三個節點)
[root@ct ceph]# ceph-deploy mon create-initial [root@ct ceph]# ls ceph.bootstrap-mds.keyring ceph.bootstrap-rgw.keyring ceph-deploy-ceph.log ceph.bootstrap-mgr.keyring ceph.client.admin.keyring ceph.mon.keyring ceph.bootstrap-osd.keyring ceph.conf rbdmap
-
控制節點建立OSD
[root@ct ceph]# ceph-deploy osd create --data /dev/sdb ct
[root@ct ceph]# ceph-deploy osd create --data /dev/sdb c1
[root@ct ceph]# ceph-deploy osd create --data /dev/sdb c2
- 使用ceph-deploy下發配置檔案和admin祕鑰下發到ct c1 c2
[root@ct ceph]# ceph-deploy admin ct c1 c2
- 給ct c1 c2 每個節點的keyring增加許可權.
[root@ct ceph]# chmod +x /etc/ceph/ceph.client.admin.keyring
[root@c1 ceph]# chmod +x /etc/ceph/ceph.client.admin.keyring
[root@c2 ceph]# chmod +x /etc/ceph/ceph.client.admin.keyring
- 建立mgr管理服務
[root@ct ceph]# ceph-deploy mgr create ct c1 c2
- 檢視ceph叢集狀態
[root@ct ceph]# ceph -s
cluster:
id: 8c9d2d27-492b-48a4-beb6-7de453cf45d6
health: HEALTH_OK '//健康狀態OK'
services:
mon: 3 daemons, quorum ct,c1,c2
mgr: ct(active), standbys: c1, c2
osd: 3 osds: 3 up, 3 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 3.0 TiB / 3.0 TiB avail
pgs:
- 建立三個與openstack對接的pool(volumes、vms、images)64是PG
[root@ct ceph]# ceph osd pool create volumes 64
pool 'volumes' created
[root@ct ceph]# ceph osd pool create vms 64
pool 'vms' created
[root@ct ceph]# ceph osd pool create images 64
pool 'images' created
- 檢視CEPH狀態
[root@ct ceph]# ceph mon stat '//檢視mon狀態'
e1: 3 mons at {c1=192.168.11.101:6789/0,c2=192.168.11.102:6789/0,ct=192.168.11.100:6789/0}, election epoch 4, leader 0 ct, quorum 0,1,2 ct,c1,c2
[root@ct ceph]# ceph osd status '//檢視osd狀態'
+----+------+-------+-------+--------+---------+--------+---------+-----------+
| id | host | used | avail | wr ops | wr data | rd ops | rd data | state |
+----+------+-------+-------+--------+---------+--------+---------+-----------+
| 0 | ct | 1026M | 1022G | 0 | 0 | 0 | 0 | exists,up |
| 1 | c1 | 1026M | 1022G | 0 | 0 | 0 | 0 | exists,up |
| 2 | c2 | 1026M | 1022G | 0 | 0 | 0 | 0 | exists,up |
+----+------+-------+-------+--------+---------+--------+---------+-----------+
[root@ct ceph]# ceph osd lspools '//檢視osd建立的pools池'
1 volumes
2 vms
3 images
2.3:CEPH叢集管理頁面安裝
- 檢視CEPH狀態 ,狀態不要出現錯誤error
- 啟用dashboard模組
[root@ct ceph]# ceph mgr module enable dashboard
- 建立https證照
[root@ct ceph]# ceph dashboard create-self-signed-cert
Self-signed certificate created
- 檢視mgr服務
[root@ct ceph]# ceph mgr services
{
"dashboard": "https://ct:8443/"
}
- 設定賬號和密碼
[root@ct ceph]# ceph dashboard set-login-credentials admin 123 '//admin是賬號 123是密碼這個可以改'
Username and password updated
- 在瀏覽器中開啟ceph網頁,https://192.168.11.100:8443
三:CEPH與openstack對接
3.1:CEPH與OPenStack對接環境初始化準備
- 控制節點建立client.cinder並設定許可權
[root@ct ceph]# ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children,allow rwx pool=volumes,allow rwx pool=vms,allow rx pool=images'
[client.cinder]
key = AQBQ7GRett8kAhAA4Q2fFNQybe0RJaEubK8eFQ==
- 控制節點建立client.glance並設定許可權
[root@ct ceph]# ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children,allow rwx pool=images'
[client.glance]
key = AQB37GRe64mXGxAApD5AVQ4Js7++tZQvVz1RgA==
- 傳送祕鑰到對接的節點,因為glance自身就裝在控制節點所以不需要傳送到其他的節點
[root@ct ceph]# chown glance.glance /etc/ceph/ceph.client.glance.keyring '//設定屬主屬組'
- 傳送祕鑰到對接的節點,將client.cinder節點 因為這個預設也是安裝在controller上 ,所以不需要傳遞到其他節點
[root@ct ceph]# ceph auth get-or-create client.cinder | tee /etc/ceph/ceph.client.cinder.keyring
[client.cinder]
key = AQBQ7GRett8kAhAA4Q2fFNQybe0RJaEubK8eFQ==
[root@ct ceph]# chown cinder.cinder /etc/ceph/ceph.client.cinder.keyring
- 同時也需要將client.cinder 傳遞到計算節點(計算節點要呼叫)
'//由於計算節點需要將使用者的client.cinder使用者的金鑰檔案儲存在libvirt中,所以需要執行如下操作'
[root@ct ceph]# ceph auth get-key client.cinder |ssh c1 tee client.cinder.key
AQBQ7GRett8kAhAA4Q2fFNQybe0RJaEubK8eFQ==
[root@ct ceph]# ceph auth get-key client.cinder |ssh c2 tee client.cinder.key
AQBQ7GRett8kAhAA4Q2fFNQybe0RJaEubK8eFQ==
[root@c1 ceph]# ls ~ '//c1節點檢視是否收到'
anaconda-ks.cfg client.cinder.key
[root@c2 ceph]# ls ~ '//c2節點檢視是否收到'
anaconda-ks.cfg client.cinder.key
3.2:在執行nova-compute的計算節點講臨時金鑰檔案新增到libvirt 中然後刪除
- 配置libvirt secret
- KVM虛擬機器需要使用librbd才可以訪問ceph叢集
- Librbd訪問ceph又需要賬戶認證
- 因此在這裡,需要給libvirt設定賬戶資訊
3.2.1:在c1節點上操作
- 生成UUID
[root@c1 ceph]# uuidgen
f4cd0fff-b0e4-4699-88a8-72149e9865d7 '//此UUID複製,之後都要用到它'
- 用如下內容建立一個祕鑰檔案確保使用上一步驟中生成唯一的UUID
[root@c1 ceph]# cd /root
[root@c1 ~]# cat >secret.xml <<EOF
> <secret ephemeral='no' private='no'>
> <uuid>f4cd0fff-b0e4-4699-88a8-72149e9865d7</uuid>
> <usage type='ceph'>
> <name>client.cinder secret</name>
> </usage>
> </secret>
> EOF
[root@c1 ~]# ls
anaconda-ks.cfg client.cinder.key secret.xml
- 定義祕鑰,並將其儲存。後續步驟中使用這個祕鑰
[root@c1 ~]# virsh secret-define --file secret.xml
生成 secret f4cd0fff-b0e4-4699-88a8-72149e9865d7
- 設定祕鑰並刪除臨時檔案。刪除檔案的步驟是可選的,目的是保持系統的純淨
[root@c1 ~]# virsh secret-set-value --secret f4cd0fff-b0e4-4699-88a8-72149e9865d7 --base64 $(cat client.cinder.key) && rm -rf client.cinder.key secret.xml
secret 值設定
3.2.2:在C2節點上操作
- 建立祕鑰檔案
[root@c2 ceph]# cd /root
[root@c2 ~]# cat >secret.xml <<EOF
> <secret ephemeral='no' private='no'>
> <uuid>f4cd0fff-b0e4-4699-88a8-72149e9865d7</uuid>
> <usage type='ceph'>
> <name>client.cinder secret</name>
> </usage>
> </secret>
> EOF
[root@c2 ~]# ls
anaconda-ks.cfg client.cinder.key secret.xml
- 定義祕鑰,並將其儲存
[root@c2 ~]# virsh secret-define --file secret.xml
生成 secret f4cd0fff-b0e4-4699-88a8-72149e9865d7
- 設定祕鑰並刪除臨時檔案
[root@c2 ~]# virsh secret-set-value --secret f4cd0fff-b0e4-4699-88a8-72149e9865d7 --base64 $(cat client.cinder.key) && rm -rf client.cinder.key secret.xml
secret 值設定
- 控制節點上開啟ceph的監控
[root@ct ceph]# ceph osd pool application enable vms mon
enabled application 'mon' on pool 'vms'
[root@ct ceph]# ceph osd pool application enable images mon
enabled application 'mon' on pool 'images'
[root@ct ceph]# ceph osd pool application enable volumes mon
enabled application 'mon' on pool 'volumes'
3.3:Ceph對接Glance
- 登入到glance 所在的節點(控制節點) 然後修改
- 備份配置檔案
[root@ct ceph]# cp /etc/glance/glance-api.conf /etc/glance/glance-api.conf.bak
- 修改對接配置檔案
[root@ct ceph]# vi /etc/glance/glance-api.conf
2054 stores=rbd '//2054行修改為rbd格式(儲存的型別格式)'
2108 default_store=rbd '//修改預設儲存格式'
2442 #filesystem_store_datadir=/var/lib/glance/images/ '//註釋掉映象本地儲存'
2605 rbd_store_chunk_size = 8 '//取消註釋'
2626 rbd_store_pool = images '//取消註釋'
2645 rbd_store_user =glance '//取消註釋,指定使用者'
2664 rbd_store_ceph_conf = /etc/ceph/ceph.conf '//取消註釋,指定ceph路徑'
- 查詢glance使用者,對接上面
[root@ct ceph]# source /root/keystonerc_admin
[root@ct ceph(keystone_admin)]# openstack user list |grep glance
| e2ee9c40f2f646d19041c28b031449d8 | glance |
- 重啟OpenStack-glance-api服務
[root@ct ceph(keystone_admin)]# systemctl restart openstack-glance-api
- 上傳映象做測試
[root@ct ceph(keystone_admin)]# ceph df '//檢視映象大小'
GLOBAL:
SIZE AVAIL RAW USED %RAW USED
3.0 TiB 3.0 TiB 3.0 GiB 0.10
POOLS:
NAME ID USED %USED MAX AVAIL OBJECTS
volumes 1 0 B 0 972 GiB 0
vms 2 0 B 0 972 GiB 0
images 3 13 MiB '//上傳13M成功' 0 972 GiB 8
[root@ct ceph(keystone_admin)]# rbd ls images '//檢視映象'
0ab61b48-4e57-4df3-a029-af6843ff4fa5
- 確認本地還有沒有映象
[root@ct ceph(keystone_admin)]# ls /var/lib/glance/images
'//發現下面沒有映象是正常的'
3.4:ceph與cinder對接
- 備份cinder.conf配置檔案並修改
- 重啟cinder服務
[root@ct ceph(keystone_admin)]# systemctl restart openstack-cinder-volume
檢視cinder卷的型別有幾個
[root@ct ceph(keystone_admin)]# cinder type-list
+--------------------------------------+-------+-------------+-----------+
| ID | Name | Description | Is_Public |
+--------------------------------------+-------+-------------+-----------+
| c33f5b0a-b74e-47ab-92f0-162be0bafa1f | iscsi | - | True |
+--------------------------------------+-------+-------------+-----------+
- 命令列建立cinder 的ceph儲存後端相應的type
[root@ct ceph(keystone_admin)]# cinder type-create ceph '//建立ceph型別'
+--------------------------------------+------+-------------+-----------+
| ID | Name | Description | Is_Public |
+--------------------------------------+------+-------------+-----------+
| e1137ee4-0a45-4a21-9c16-55dfb7e3d737 | ceph | - | True |
+--------------------------------------+------+-------------+-----------+
[root@ct ceph(keystone_admin)]# cinder type-list '//檢視型別'
+--------------------------------------+-------+-------------+-----------+
| ID | Name | Description | Is_Public |
+--------------------------------------+-------+-------------+-----------+
| c33f5b0a-b74e-47ab-92f0-162be0bafa1f | iscsi | - | True |
| e1137ee4-0a45-4a21-9c16-55dfb7e3d737 | ceph | - | True |
+--------------------------------------+-------+-------------+-----------+
[root@ct ceph(keystone_admin)]# cinder type-key ceph set volume_backend_name=ceph '//設定後端的儲存型別 volume_backend_name=ceph一定要頂格寫不能有空格'
- 建立卷
檢視建立的卷
[root@ct ceph(keystone_admin)]# ceph osd lspools
1 volumes
2 vms
3 images
[root@ct ceph(keystone_admin)]# rbd ls volumes
volume-47728c44-85db-4257-a723-2ab8c5249f5d
開啟cinder服務
[root@ct ceph(keystone_admin)]# systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service
[root@ct ceph(keystone_admin)]# systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service
3.5:Ceph與Nova 對接
-
備份配置檔案(C1、C2節點)
-
規劃 修改配置檔案(C1、C2節點)(僅展示c1)
-
7072 images_type=rbd '//7072行修改為rbd格式,取消註釋' 7096 images_rbd_pool=vms '//7096行、去掉註釋、改為VMS在CEPH中宣告的' 7099 images_rbd_ceph_conf =/etc/ceph/ceph.conf '//7099行、去掉註釋、新增CEPH配置檔案路徑' 7256 rbd_user=cinder '//7256行、去掉註釋、新增cinder' 7261 rbd_secret_uuid=f4cd0fff-b0e4-4699-88a8-72149e9865d7 '//7261行、去掉註釋、新增UUID值' 6932 disk_cachemodes ="network=writeback" '//6932行、去掉註釋、新增"network=writeback"硬碟快取模式' live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE, VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED" '//找到live_migration附近新增整行 是否啟用熱遷移' hw_disk_discard=unmap '//取消註釋,新增unmap'
-
安裝Libvirt(C1、C2節點)
[root@c1 ~]# yum -y install libvirt
[root@c2 ~]# yum -y install libvirt
- 編輯計算節點(C1、C2節點)(僅展示c1節點操作)
[root@c1 ~]# vi /etc/ceph/ceph.conf
'//尾行新增'
[client]
rbd cache=true
rbd cache writethrough until flush=true
admin socket = /var/run/ceph/guests/$cluster-$type.$id.$pid.$cctid.asok
log file = /var/log/qemu/qemu-guest-$pid.log
rbd concurrent management ops = 20
[root@c1 ~]# mkdir -p /var/run/ceph/guests/ /var/log/qemu/ '//'
- 建立配置檔案目錄和許可權
[root@c1 ~]# mkdir -p /var/run/ceph/guests/ /var/log/qemu/
[root@c1 ~]# chown 777 -R /var/run/ceph/guests/ /var/log/qemu/
- 將控制節點的/ect/ceph/下的金鑰複製到兩個計算節點
[root@ct ceph(keystone_admin)]# cd /etc/ceph
[root@ct ceph(keystone_admin)]# scp ceph.client.cinder.keyring root@c1:/etc/ceph
ceph.client.cinder.keyring 100% 64 83.5KB/s 00:00
[root@ct ceph(keystone_admin)]# scp ceph.client.cinder.keyring root@c2:/etc/ceph
ceph.client.cinder.keyring 100% 64 52.2KB/s 00:00
- 計算節點重啟服務
[root@c1 ~]# systemctl restart libvirtd
[root@c1 ~]# systemctl enable libvirtd
[root@c1 ~]# systemctl restart openstack-nova-compute
'//c2節點相同操作'
相關文章
- 想去Google做AI?面試題在手,全程無憂!GoAI面試題
- NB-iot模組可做財物防盜竊器,讓你的財物可定位跟蹤!
- 重型包裝檢測運輸驗證哪裡可做?
- 怎麼做PFMEA效果跟進?
- 9、Metasploit域滲透測試全程實錄
- 為什麼要做介面測試?可做介面測試的軟體測試公司分享
- 做個試驗:簡單的緩衝區溢位
- 大型前端應用如何做系統融合前端
- 軟體介面測試有什麼作用?可做介面測試的外包公司安利
- 如何在Java中做基準測試?JMH使用初體驗Java
- 某大型能源公司RPA實施經驗分享
- XtraBackup不停機不鎖表做MySQL主從複製的試驗MySql
- 在大疆做測試開發是一種什麼體驗?
- DNS域名解析 學習瞭解作用以及如何配置 內附案例可跟做 適合初學者DNS
- 不會做易拉寶設計方案,可試試線上用易拉寶模板製圖
- 做題經驗總結
- 軟體相容性測試該怎麼進行?哪些軟體測試公司可做相容性測試?
- 大模型的禾下乘涼夢,百度自己來做試驗田大模型
- 大型網站的可伸縮性架構如何設計?網站架構
- 跟HR在大群吵架是什麼體驗?
- 使用 Solon Cloud 的 Jaeger 做請求鏈路跟蹤Cloud
- Dubbo 整合 Pinpoint 做分散式服務請求跟蹤分散式
- 人人可做提示工程師!Claude上新:一鍵生成、測試和評估prompt工程師
- 針對大型檔案系統可以試試此 Bash 指令碼指令碼
- 做網站,還是大有可為!網站
- Tool Share (002)---anyproxy (可做介面抓取)
- 軟體為什麼要進行安全測試?可做安全測試的軟體檢測公司安利
- 軟體效能測試有哪些效能指標?可做效能測試的軟體檢測機構安利指標
- ABAP的許可權檢查跟蹤(Authorization trace)工具
- SpringBoot整合JWT做身份驗證Spring BootJWT
- jmeter做效能測試JMeter
- 測試是如何跟進和管理 bug
- 大型網際網路公司必考java面試題與面試技巧Java面試題
- 安卓測試跟ios 測試有什麼區別?安卓iOS
- 基於RBAC做資料許可權
- 《Temtem》:更為硬核的「類寶可夢」大型多人線上網遊
- 軟體滲透測試基礎知識分享,可做滲透測試的軟體檢測公司有哪些?
- 使用hibernate validate做引數校驗