Ceph-Ansible を使用した Ceph クラスターのデプロイ

Ceph logo

Ceph は、オブジェクト、ブロック、ファイルシステムのストレージを同時に提供できるオープンソースの分散ストレージシステムです。そのため、OpenStack のデプロイメントで広く使用されており、Swift、Cinder、Manila のバックエンドを提供しています。この記事では、Ceph-Ansible を使用して、プロダクション環境に対応した高可用性(High-availability)の Ceph クラスターをデプロイする方法を紹介します。

基本構成

基本的な Ceph クラスターは、主に Ceph Monitor、Ceph OSD、Ceph Manager Daemon の 3 つのコンポーネントで構成されています。

Ceph Monitor

Ceph Monitor は Ceph のコアコンポーネントであり、monitor、manager、OSD、および CRUSH の状態を含むクラスター全体のステータスマップの維持を担当します。これらのデータは Ceph の動作を維持するために不可欠な要素です。さらに、Monitor はデーモンとクライアント間の認証も担当します。高可用性(High-availability)の Ceph クラスターには、最低 3 つの Monitor が必要です。

Ceph OSD

Ceph OSD はデータの保存を担当し、データの複製、復旧、再配置を処理します。また、他の Ceph OSD のハートビートをチェックすることで、Monitor や Manager に監視情報を提供します。高可用性の Ceph クラスターには、最低 3 つの OSD が必要です。

Ceph Manager デーモン

Ceph Manager Daemon は通常、Ceph Monitor と同じノードにインストールされます。ストレージの使用率、パフォーマンス、システム負荷など、Ceph クラスター全体の状況を監視します。主な目的は、外部の監視・管理システムのセットアップを容易にするための追加の監視機能とインターフェースを提供することです。Ceph Luminous 以降、クラスターの必須コンポーネントとなりました。高可用性の Manager Daemon には 2 つのノードが必要です。

上記の説明から、高可用性の Ceph クラスターをデプロイするには、最低 3 つのノードが必要であることがわかります。

ネットワーク

Ceph のネットワーク構成は基本的に非常にシンプルで、クラスターネットワーク(cluster network)とパブリックネットワーク(public network)で構成されています。

クラスターネットワーク

クラスターネットワークは、Ceph 内部のノード間でデータのバックアップや複製を行う際に使用されるネットワークです。通常、10G 以上のネットワークインターフェースの使用が推奨されます。

パブリックネットワーク

パブリックネットワークは、Ceph が外部サービス(例:Cinder)にデータを提供する際に使用されるネットワークです。こちらも通常、10G 以上のネットワークインターフェースの使用が推奨されます。

事前準備

まず、Ceph-Ansible のソースコードをダウンロードし、stable ブランチに切り替えます。

git clone https://github.com/ceph/ceph-ansible
cd ceph-ansible
git checkout stable-3.1
cp site.yml.example site.yml

Ansible のインストール

Ansible のインストールは、Linux ディストリビューションのパッケージマネージャーを使用して直接行うことができます。

CentOS

sudo yum install epel-release
sudo yum install ansible

Ubuntu

sudo apt install ansible

環境設定

Ceph-Ansible の環境設定ファイルはすべて以下に配置されています。 group_vars/<code> 下,預設會提供 </code>sample<code> 結尾的範例檔,會需要把 sample 拿掉。簡單的部署需要設定的檔案只有 </code>all.yml<code> 跟 </code>osds.yml

cp group_vars/all.yml.sample group_vars/all.yml
cp group_vars/osds.yml.sample group_vars/osds.yml

all.yml 設定

all.yml 内では、通常クラスターの全ノードに適用される基本的なパラメーターが定義されています。

ceph_origin: repository
ceph_repository: community
ceph_stable_release: luminous
public_network: "192.168.113.0/24"
cluster_network: "172.168.113.0/24"
monitor_interface: eth1

ceph_origin: Ceph のインストール方法です。repository、distro、local の 3 つの方法から選択できます。

  • repository: Cephアップストリームのリポジトリを使用する
  • distro: Linuxディストリビューション同梱のCephを使用する
  • local: ローカルでビルドしたCephバイナリを使用する

ceph_stable_release その名の通り Ceph のリリースバージョンです。ここでは Luminous LTS を使用していますが、現在の最新版は Mimic です。

public_network<code> 與 </code>cluster_network 前述のネットワーク構成の説明にある通り、2つのネットワークセグメントの CIDR を入力します。

monitor_interface monitor の通信に使用されるインターフェースです。

osds.yml 設定

osds.yml ここではいくつかの OSD パラメータを定義します。通常、OSD ノード全体に適用されます。

devices:
  - '/dev/sdb'
  - '/dev/sdc'
osd_scenario: collocated

devices<code>: 用來儲存的裝置,可以定義多個,如果每個 node 並不相同的話,可以嘗試使用 </code>osd_auto_discovery<code>,將其設為 </code>true

osd_scenario: OSD のデプロイ方式です。collocated、non-collocated、lvm の3つのオプションがあります。

  • collocated<code>: 將 </code>ceph data<code>、</code>ceph block<code>、</code>ceph block.db<code>跟</code>ceph block.wal 同一デバイス上に配置する。
  • non-collocated<code>: 會將 </code>ceph data<code>跟</code>ceph block<code> 放在 </code>devices<code> 上,並且將 </code>ceph block.db<code>跟</code>ceph block.wal<code> 放在額外設定的 </code>dedicated_devices 上。
  • lvm<code>: 需要設定 </code>data<code>、</code>wal<code>跟</code>db<code> 的 </code>lv name<code> 跟 </code>vg group、dataのみが必須項目です。

Ansible Inventory の設定

Ansible Inventory には、選択した各ノードのホスト名または IP アドレスを入力します。この例では 3 台の Ceph ノードが含まれます。 ceph01, ceph02, ceph03<code>,所有 ceph 元件在這三個 node 上皆會安裝。會將以下資訊寫入 </code>hosts ファイル内

[mons]
ceph01
ceph02
ceph03

[osds]
ceph01
ceph02
ceph03

[mgrs]
ceph01
ceph02
ceph03

# 實際部署

實際部署非常簡單,只需要跑 Ansible-Playbook 即可,指令如下:

```bash
ansible-playbook -i hosts site.yml

実行後に問題がなければ、いずれかの Ceph ノードに接続し、コマンドを使用して Ceph クラスターの状態を確認できます:

ceph -s

HEALTH_OK と正しく表示されれば、Ceph クラスターのデプロイは成功です!

リファレンス

Ceph Ansible ドキュメント


著作権表示:このブログのすべての記事は、以下のライセンスのもとで提供されています。 CC BY-NC-SA 4.0 (別途記載がある場合を除く)

コメントを残す