openstack+ceph大型試驗!全程可跟做!

一往無前,未來可期發表於2020-11-06

openstack+ceph大型試驗!全程可跟做!

前言

mark

一: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提供給一些監控資訊
  • 什麼是Monitor

    監視整個叢集的狀態資訊、當Ceph的叢集為2個副本,至少需要2個OSD ,才能達到健康的狀態,同時還守護各種圖表(OSD圖、PG組、Crush圖等等)

  • ceph-mgr

    • Ceph Manager Daemon,簡稱ceph-mgr。 該元件的主要作用是分擔和擴充套件monitor的部分功能,
      減輕monitor的負擔,讓更好地管理ceph儲存系統ceph

1.3:完全無中心架構

  • 完全無中心架構一-計算模式(ceph)
  • 如圖是ceph儲存系統的架構,在該架構中與HDFS不同的地方在於該架構中沒有中心節點。客戶端是通過一個裝置對映關係計算出來其寫入資料的位置,這樣客戶端可以直接與儲存節點通訊,從而避免中心節點的效能瓶頸。
  • 在ceph儲存系統架構中核心元件有Mon服務、OSD服務和MDS服務等。對於塊儲存型別只需要Mon服務、OSD服務和客戶端的軟體即可。其中Mon服務用於維護儲存系統的硬體邏輯關係,主要是伺服器和硬碟等線上資訊。Mon服務通過叢集的方式保證其服務的可用性。OSD服務用於實現對磁碟的管理,實現真正的資料讀寫,通常一個磁碟對應一個OSD服務。

mark

  • 客戶端訪問儲存的大致流程是,客戶端在啟動後會首先從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、關閉防火牆等
  • 三個節點本地源配置(僅展示控制節點的操作)

mark

[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

mark

mark

三: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
  • 上傳映象做測試

mark

[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配置檔案並修改
  1. 重啟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一定要頂格寫不能有空格'

  • 建立卷mark

檢視建立的卷

[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節點相同操作'

相關文章