通過Ansible以Docker形式部署Ceph3

聲明

  • 本文的內容僅限於技術探討,不能作爲指導生產環境的素材;
  • 鼓勵讀者購買紅帽培訓獲得更多系統性的培訓。

一、Ceph的架構

Ceph Cluster:

  • Heart of Ceph distributed object store 是Ceph分佈式對象存儲的核心
  • Referred to as reliable autonomic distributed object store (RADOS)
  • Consists of device nodes and monitor nodes 由OSD節點和Monitor節點組成

Device nodes OSD節點

  • Servers with multiple disks X86服務器配置了較多的磁盤
  • Each disk is Ceph object storage device (OSD) 每個磁盤是一個OSD
  • Daemons:進程
    • Join Ceph OSDs to cluster
    • Serve requests for data residing on OSDs
    • Communicate OSD status

Monitor nodes

  • Servers ideally distinct from OSD servers
  • Run intelligent daemons called Ceph MON daemons
  • Daemons monitor system state

二、Ceph的算法與設計

CRUSH數據放置算法

  • 基礎設施感知、快速響應故障
  • 計算出數據位置
  • 客戶端與存儲數據的服務器通信
  • 客戶端執行並行I / O以大大提高吞吐量

高度可擴展

  • 支持大量活動/活動元數據服務器
  • 提供高吞吐量和帶寬
  • 非常可靠和可用
  • 完整的POSIX語義和一致性保證
  • 有FUSE客戶端,集成到Linux內核中

三、Ceph的角色

Monitors

  • 主要作用:維護集羣狀態,爲分佈式決策提供共識
  • 管理關鍵RADOS集羣狀態和配置信息
  • 維護CRUSH Map的主副本
  • Ceph守護進程/客戶端使用監視器檢查以確保它們具有最新的映射副本
  • Monitor不向客戶端提供存儲的對象
  • 必須有奇數
  • 最低:三

Monitors的Quorum作用

  • 在具有偶數Monitors的羣集中,羣集可能會發生腦裂
  • 要使Ceph集羣可操作/可訪問,至少有一半以上的Monitors必須正在運行
  • 在關鍵環境中,請考慮5個Monitors
  • Monitors映射是Ceph集羣爲操作維護的一個映射

Ceph Journal

  • 爲了提高性能/可靠性,Ceph OSD在寫入文件系統時使用日誌
  • 每個OSD都有專門使用的日誌
  • 將每個操作的描述寫入日誌
  • 寫入最少數量的副本日誌時,寫入RADOS羣集
  • 提交對文件系統的操作
  • 進程可以對對象進行原子更新

Journals提高了可靠性

  • 如果OSD或節點出現故障,則重新啓動時日誌會replay
  • 保留“in-flight”事務,確保磁盤數據的一致性
  • replay序列在上次同步操作完成後開始,因爲先前的日誌記錄被修剪掉了
  • Journals使用設備節點上的原始卷
  • 更好的性能,更高的一致性
  • 小I / O請求爲主機文件系統提供了合併寫入的時間
  • 每隔幾秒,OSD停止寫入,同步日誌與執行的文件系統提交
  • 從日誌修剪完成的操作以回收日誌磁盤捲上的空間
  • 默認值:Ceph日誌寫入與OSD數據相同的磁盤
  • 更好的性能:配置日誌以寫入自己的高性能硬盤(SSD)

OSD包括:

  • One hard disk
  • One Linux file system
  • One Ceph OSD daemon

文件系統

  • 每個OSD將磁盤和底層文件系統連接到Ceph集羣
  • 文件系統必須是xfs或ext4

後續會支持ZFS

  • 必須支持並啓用XATTR
  • 用於存儲和檢索有關以下內容的信息:

內部對象狀態

快照元數據

Ceph網關訪問控制列表(ACL)

文件系統選擇推薦:從穩定性考慮,建議使用xfs

OSD設計和目標

  • 使計算能力儘可能接近數據
  • 啓用計算能力以執行最大程度的處理
  • 當前:OSD處理基於角色作爲主要或次要的功能
  • 未來:Ceph利用OSD和數據之間的聯繫來擴展OSD計算能力

四、Ceph的Storage Pool

存儲池:用於存儲對象數據的邏輯分區

允許數據:

  • 在邏輯上分類
  • 存儲在對象存儲系統中時應用規則

對於存儲對象,池定義/指定:

  • 所有權和訪問權限
  • 對象副本數
  • PG的數量
  • CRUSH規則設置使用

Storage Pool的特性

  • Pool內的PG動態映射到OSD
  • 首次部署集羣而不創建池時,Ceph使用默認池來存儲數據
  • 爲池指定的一個屬性:存儲在池中的對象的默認副本數
  • 池與CRUSH基於位置的buckets 不同,因爲池中沒有單個物理位置

Storage Pool的屬性:

Ceph集羣默認的三個Storage Pool

  • data
  • metadata
  • rbd

如果想創建額外的Storage Pool,需要指定:

  • Name
  • Number of PGs that can belong to pool

五、對Ceph訪問方式

對Ceph的訪問

  • 所有訪問方法都建立在librados之上
  • 提供對Ceph集羣(RADOS)的本機訪問
  • 適用於C,C ++,Python,PHP,Java™,Erlang
  • 推薦:開發時,直接在應用程序中使用librados
  • librados爲Ceph環境提供了訪問,可靠性和性能的最佳結果

其他易於使用和實施的訪問方法:

  • RADOS塊設備(RBD)
  • RADOS網關(RADOSGW)
  • CephFS

CephFS:

  • 並行文件系統
  • 提供可大規模擴展的單層次共享磁盤
  • 元數據服務器(MDS)負責文件系統中文件的元數據信息 示例:訪問,修改,創建日期

在Ceph集羣中存儲數據

六、通過Ansible的部署Docker格式的Ceph

本實驗,我們使用ansible部署Ceph3(Ceph3是docker image)。使用的鏡像是由紅帽官網提供:registry.access.redhat.com。

在實驗環境中,有一個部署服務器。我們首先在部署服務器上安裝docker-distribution,然後,從紅帽官網拉取Ceph的docker imager。然後將Ceph集羣節點上的鏡像倉庫指定到部署服務器上。

首先安裝docker-distribution

配置docker-distribution的端口的域名:

生成證書:

啓動docker-distribution進程:

在部署服務器上安裝docker:

接下來,配置腳本,紅帽官網拉取Ceph docker image,並推送到本地倉庫:

部署服務器上安裝ceph-ansible包

配置Ceph節點的inventory文件:

書寫playbook,對節點進行預配置:

對三個節點進行預配置

接下來,創建對三個節點的admin用戶ssh信任:

接下來,配置ansible.cfg(該配置文件中定義了ansible的主機的默認配置部分,如默認是否需要輸入密碼、是否開啓sudo認證、action_plugins插件的位置、hosts主機組的位置、是否開啓log功能、默認端口、key文件位置等等。)

配置all.yml文件,裏面定義了ceph集羣的相關參數:

osds.yml定了了OSD的參數配置:

mons.yml定義了和監控相關的參數

根據模板,創建site-docker.yml主playbook(下面貼出了具體內容供參考)

[root@workstation-e6c4 ~]# cat /usr/share/ceph-ansible/site-docker.yml

# Defines deployment design and assigns role to server groups

- hosts:

- mons

- agents

- osds

- mdss

- rgws

- nfss

- restapis

- rbdmirrors

- clients

- iscsigws

- mgrs

gather_facts: false

tasks:

become: True

vars:

delegate_facts_host: True

pre_tasks:

- name: gather facts

setup:

when:

- not delegate_facts_host | bool

- name: gather and delegate facts

setup:

delegate_to: "{{ item }}"

delegate_facts: True

with_items: "{{ groups['all'] }}"

run_once: true

when:

- delegate_facts_host | bool

- hosts: mons

become: True

gather_facts: false

roles:

- ceph-defaults

- ceph-docker-common

- ceph-config

- ceph-mon

serial: 1 # MUST be '1' WHEN DEPLOYING MONITORS ON DOCKER CONTAINERS

- hosts: mgrs

become: True

gather_facts: false

roles:

- ceph-defaults

- ceph-docker-common

- { role: ceph-config, when: "ceph_release_num.{{ ceph_release }} >= ceph_release_num.luminous" }

- { role: ceph-mgr, when: "ceph_release_num.{{ ceph_release }} >= ceph_release_num.luminous" }

- hosts: osds

become: True

gather_facts: false

roles:

- ceph-defaults

- ceph-docker-common

- ceph-config

- ceph-osd

- hosts: mdss

become: True

gather_facts: false

roles:

- ceph-defaults

- ceph-docker-common

- ceph-config

- ceph-mds

- hosts: rgws

become: True

gather_facts: false

roles:

- ceph-defaults

- ceph-docker-common

- ceph-config

- ceph-rgw

- hosts: nfss

become: True

gather_facts: false

roles:

- ceph-defaults

- ceph-docker-common

- { role: ceph-config, when: "ceph_release_num.{{ ceph_release }} >= ceph_release_num.luminous" }

- { role: ceph-nfs, when: "ceph_release_num.{{ ceph_release }} >= ceph_release_num.luminous" }

- hosts: rbdmirrors

become: True

gather_facts: false

roles:

- ceph-defaults

- ceph-docker-common

- ceph-config

- ceph-rbd-mirror

- hosts: restapis

become: True

gather_facts: false

roles:

- ceph-defaults

- ceph-docker-common

- ceph-config

- ceph-restapi

- hosts: clients

become: True

gather_facts: false

roles:

- ceph-defaults

- ceph-docker-common

- ceph-config

- ceph-client

執行Playbook,安裝Ceph:

在部署節點上安裝 ceph-common 軟件:

將管理祕鑰複製到部署服務器:

查看Ceph集羣的狀態:

查看Ceph集羣的健康狀態:

查看OSD:

接下來,到ceph-node2上檢查docker(可以看到mgr、osd、mon角色都是以docker方式在運行)

查看Ceph進程(docker的系統守護進程):

部署成功。

參考文檔:

https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/3/html/container_guide/deploying-red-hat-ceph-storage-in-containers#installing-a-red-hat-ceph-storage-cluster-in-containers

魏新宇

  • "大魏分享"運營者、紅帽資深解決方案架構師
  • 專注開源雲計算、容器及自動化運維在金融行業的推廣
  • 擁有MBA、ITIL V3、Cobit5、C-STAR、TOGAF9.1(鑑定級)等管理認證。
  • 擁有紅帽RHCE/RHCA、VMware VCP-DCV、VCP-DT、VCP-Network、VCP-Cloud、AIX、HPUX等技術認證
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章