理解 OpenStack + Ceph (1):Ceph + OpenStack 集群部署和配置(转)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lic95/article/details/49818103

本系列文章會深入研究 Ceph 以及 Ceph 和 OpenStack 的集成:

(1)安裝和部署

(2)Ceph 與 OpenStack 集成的實現

(3)TBD

1. 測試環境

爲了深入學習 Ceph 以及 Ceph 和 OpenStack 的集成,搭建了如下的測試環境:

理解 OpenStack + Ceph (1):Ceph + OpenStack 集群部署和配置

硬件環境:

  • System X 服務器一台,CPU、內存和磁盤空間足夠
  • 服務器只有一個物理網卡

軟件環境:

  • 服務器安裝 RedHat 6.5 操作系統
  • OpenStack 使用 Ubuntu 鏡像庫中的 Kilo master 版本
  • 每個節點操作系統采用 Ubuntu 14.04 服務器版

2. Ceph 集群部署

    從上圖可見,該環境使用三個虛機作爲Ceph節點,每個節點上增加兩個虛擬磁盤 vda 和 vdb 作爲 OSD 存儲磁盤,每個節點上安裝 MON,前兩個節點上安裝 MDS。三個節點使用物理網絡進行通信。

(0)准備好三個節點 ceph{1,2,3}:安裝操作系統、設置 NTP、配置 ceph1 可以通過 ssh 無密碼訪問其余節點(依次運行 ssh-keygen,ssh-copy-id ceph2,ssh-copy-id ceph3,修改 /etc/ssh/sshd_config 文件中的 PermitRootLogin yes 來使得 ssh 支持 root 用戶)

節點名稱
IP 地址
部署進程
數據盤

ceph1
192.168.1.194
1MON+1MDS+2OSD
/dev/vda, /dev/vdb

ceph2
192.168.1.195
1MON+1MDS+2OSD
/dev/vda, /dev/vdb

ceph3
192.168.1.218
1MON+1OSD
/dev/vda, /dev/vdb

(1)在 ceph1 上安裝 ceph-deploy,接下來會使用這個工具來部署 ceph 集群

(2)在ceph 上,運行 ceph-deploy install ceph{1,2,3} 命令在各節點上安裝 ceph 軟件。安裝好後可以查看 ceph 版本:

root@ceph1:~# ceph -v
ceph version 0.80.10 (ea6c958c38df1216bf95c927f143d8b13c4a9e70)

(3)在 ceph1 上執行以下命令創建 MON 集群

ceph-deploy new ceph{1,2,3}
ceph-deploy mon create ceph{1,2,3}
ceph-deploy mon create-initial

完成後查看 MON 集群狀態:

root@ceph1:~# ceph mon_status
{"name":"ceph1","rank":0,"state":"leader","election_epoch":16,"quorum":[0,1,2],"outside_quorum":[],"extra_probe_peers":[],"sync_provider":[],"monmap":{"epoch":1,"fsid":"4387471a-ae2b-47c4-b67e-9004860d0fd0","modified":"0.","created":"0.","mons":[{"rank":0,"name":"ceph1","addr":"192.168.1.194:6789\/0"},{"rank":1,"name":"ceph2","addr":"192.168.1.195:6789\/0"},{"rank":2,"name":"ceph3","addr":"192.168.1.218:6789\/0"}]}}

(4)在各節點上准備數據盤,只需要在 fdisk -l 命令輸出中能看到數據盤即可,不需要做任何別的操作,然後在 ceph1 上執行如下命令添加 OSD

ceph-deploy --overwrite-conf osd prepare ceph1:/data/osd:/dev/vda ceph2:/data/osd:/dev/vda ceph3:/data/osd:/dev/vda
ceph-deploy --overwrite-conf osd activate ceph1:/data/osd:/dev/vda ceph2:/data/osd:/dev/vda ceph3:/data/osd:/dev/vda

ceph-deploy --overwrite-conf osd prepare ceph1:/data/osd2:/dev/vdb ceph2:/data/osd2:/dev/vdb ceph3:/data/osd2:/dev/vdb
ceph-deploy --overwrite-conf osd activate ceph1:/data/osd2:/dev/vdb ceph2:/data/osd2:/dev/vdb ceph3:/data/osd2:/dev/vdb

完成後查看 OSD 狀態:

  root@ceph1:~# ceph osd tree
# id    weight  type name       up/down reweight
-1      0.1399  root default
-2      0.03998         host ceph1
3       0.01                 osd.3   up      1
6       0.01                 osd.6   up      1
-3      0.05997         host ceph2
4       0.01                 osd.4   up      1
7       0.01                 osd.7   up      1
-4      0.03998         host ceph3
5       0.01                 osd.5   up      1
8       0.01                 osd.8   up      1

(5)將 Admin key 到其余各個節點,然後安裝 MDS 集群

ceph-deploy admin ceph1 ceph2 ceph3
eph-deploy mds  create ceph1 ceph2

完成後可以使用 “ceph mds” 命令來操作 MDS 集群,比如查看狀態:

root@ceph1:~# ceph mds stat
e13: 1/1/1 up {0=ceph1=up:active}, 1 up:standby

看起來 MDS 集群是個 active/standby 模式的集群。

至此,Ceph 集群部署完成,可以使用 ceph 命令查看集群狀態:

root@ceph1:~# ceph mds stat
e13: 1/1/1 up {0=ceph1=up:active}, 1 up:standby
root@ceph1:~# ceph -s
    cluster 4387471a-ae2b-47c4-b67e-9004860d0fd0
     health HEALTH_OK
     monmap e1: 3 mons at {ceph1=192.168.1.194:6789/0,ceph2=192.168.1.195:6789/0,ceph3=192.168.1.218:6789/0}, election epoch 16, quorum 0,1,2 ceph1,ceph2,ceph3
     mdsmap e13: 1/1/1 up {0=ceph1=up:active}, 1 up:standby
     osdmap e76: 10 osds: 7 up, 7 in

在這過程中,失敗和反複是難免的,在任何時候,可以使用如下的命令將已有的配置擦除然後從頭安裝:

ceph-deploy purge ceph{1,2,3}
ceph-deploy purgedata ceph{1,2,3}
ceph-deploy forgetkeys

3. OpenStack 集群部署

3.1 網絡准備

爲方便起見,管理網絡直接連接物理網卡;租戶網絡就比較麻煩一點,因爲機器上只有一個物理網卡,幸虧所有的計算節點都在同一個物理服務器上,因此可以:

1. 在物理服務器上,創建一個虛擬網卡 tap0,再創建一個 linux bridge ‘mgtbr0’

tunctl -t tap0 -u root
chmod  /dev/net/tun
ifconfig tap0 0.0.0.0 promisc
brctl addbr mgtbr0
brctl addif mgtbr0 tap0 

2. 這是 mgtbr0 的配置腳本:

[root@rh65 ~]# cat /etc/sysconfig/network-scripts/ifcfg-mgtbr0
DEVICE=mgtbr0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=10.0.0.100
PREFIX=24
GATEWAY=10.0.0.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
TYPE=Bridge

3. 在網絡和各計算節點上,增加一塊網卡,連接到物理服務器上的 bridge。

理解 OpenStack + Ceph (1):Ceph + OpenStack 集群部署和配置

把所有的節點連接到管理和租戶網絡後,在物理服務器上看到的 linux bridge 是這樣子:

bridge name     bridge id               STP enabled     interfaces
br0             8.3440b5d905ee       no              eth1                 #物理網卡
                                                        vnet0                #controller 節點 
                                                        vnet1                #network 節點
                                                        vnet2                #compute1 節點
                                                        vnet3                #compute2 節點
                                                        vnet4                #ceph1 節點 
                                                        vnet5                #ceph2 節點
                                                        vnet8                #ceph3 節點
br1             8.       no
mgtbr0          8.f29e2c075ca6       no              tap0                 #虛擬網卡
                                                        vnet6                #network 節點
                                                        vnet7                #compute1 節點
                                                        vnet9                #compute2 節點
3.2 OpenStack 安裝和配置

    參考 Installation Guide for Ubuntu 14.04 (LTS) 完成配置,沒感覺到 Kilo 版本和 Juno 版本太大的不同,除了 keystone 使用 Apache web server 替代了 Keystone WSGI Server 以外(注意不能同時啓動 apache2 和 keystone 服務,兩者有沖突,感覺 Kilo 版本中 Identity 部分改動很大,還是存在不少問題)。

4. OpenStack 和 Ceph 整合配置

本例中,OpenStack Cinder、Glance 和 Nova 分別會將卷、鏡像和虛機鏡像保存到 Ceph  分布式塊設備(RBD)中。

4.1 Ceph 中的配置

(1)在 ceph 中創建三個 pool 分別給 Cinder,Glance 和 nova 使用

ceph osd pool create volumes 64
ceph osd pool create images 64
ceph osd pool create vms 64

(2)將 ceph 的配置文件傳到 ceph client 節點 (glance-api, cinder-volume, nova-compute andcinder-backup)上:

ssh controller sudo tee /etc/ceph/ceph.conf </etc/ceph/ceph.conf
ssh compute1 sudo tee /etc/ceph/ceph.conf </etc/ceph/ceph.conf
ssh compute2 sudo tee /etc/ceph/ceph.conf </etc/ceph/ceph.conf

(3)在各節點上安裝ceph 客戶端

在 glance-api 節點,安裝 librbd
sudo apt-get install python-rbd

在 nova-compute 和 cinder-volume 節點安裝 ceph-common:
sudo apt-get install ceph-common

(4)配置 cinder 和 glance 用戶訪問 ceph 的權限

# cinder 用戶會被 cinder 和 nova 使用,需要訪問三個pool
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'

# glance 用戶只會被 Glance 使用,只需要訪問 images 這個 pool ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'

(5)將 client.cinder 和 client.glance 的 keystring 文件拷貝到各節點並設置訪問權限

ceph auth get-or-create client.glance  ssh controller sudo tee /etc/ceph/ceph.client.glance.keyring
ssh controller  sudo chown glance:glance /etc/ceph/ceph.client.glance.keyring

ceph auth get-or-create client.cinder  ssh controller  sudo tee /etc/ceph/ceph.client.cinder.keyring
ssh controller  sudo chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring

ceph auth get-or-create client.cinder  ssh compute1 sudo tee /etc/ceph/ceph.client.cinder.keyring
ceph auth get-or-create client.cinder  ssh compute2 sudo tee /etc/ceph/ceph.client.cinder.keyring

(6)在 compute1 和 compute2 節點上做 libvirt 配置

ceph auth get-key client.cinder  ssh compute1 tee client.cinder.key
cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
  <uuid>e21a123a-31f8-425a-86db-7204c33a6161</uuid>
  <usage type='ceph'>
    <name>client.cinder secret</name>
  </usage>
</secret>
EOF
sudo virsh secret-define --file secret.xml
sudo virsh secret-set-value --secret e21a123a-31f8-425a-86db-7204c33a6161 --base64 $(cat client.cinder.key) && rm client.cinder.key secret.xml
4.2 OpenStack 中的配置
4.2.1 Glance 中的配置
在 /etc/glance/glance-api.conf 文件中做如下修改:

[DEFAULT]
...
show_image_direct_url = True
...
[glance_store]
stores=glance.store.rbd.Store
default_store = rbd
rbd_store_pool = images
rbd_store_user = glance
rbd_store_ceph_conf = /etc/ceph/ceph.conf
rbd_store_chunk_size = 8
4.2.2 配置 Cinder
修改 /etc/cinder/cinder.conf:

[DEFAULT]
...
#volume_group = cinder-volumes
volume_driver = cinder.volume.drivers.rbd.RBDDriver
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_flatten_volume_from_snapshot = false
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1
glance_api_version = 2
rbd_user = cinder
rbd_secret_uuid = e21a123a-31f8-425a-86db-7204c33a6161
...
4.3.3 配置 Nova
在每個計算節點上的 /etc/nova/nova.conf 文件中做如下修改:

[libvirt]
images_type = rbd
images_rbd_pool = vms
images_rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_user = cinder
rbd_secret_uuid = e21a123a-31f8-425a-86db-7204c33a6161
disk_cachemodes="network=writeback"
hw_disk_discard = unmap
inject_password = false
inject_key = false
inject_partition = -2
live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED"

至此,環境安裝和配置完成,通過 cinder,glance 和 nova 命令創建的卷、鏡像和虛機的鏡像都會被保存在 Ceph 的 RBD 中。接下來的文章會深入分析其中的原理和實現。

參考文檔:

http://docs.ceph.com/docs/master/rbd/rbd-openstack/

猜你喜欢

转载自blog.csdn.net/lic95/article/details/49818103