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 内では、通常クラスターの全ノードに適用される基本的なパラメーターが定義されています。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 のインストール方法です。repository、distro、local の 3 つの方法から選択できます。ceph_origin
: Cephアップストリームのリポジトリを使用するrepository: Linuxディストリビューション同梱のCephを使用するdistro: ローカルでビルドしたCephバイナリを使用するlocal
その名の通り Ceph のリリースバージョンです。ここでは Luminous LTS を使用していますが、現在の最新版は Mimic です。ceph_stable_release
前述のネットワーク構成の説明にある通り、2つのネットワークセグメントの CIDR を入力します。public_network<code> 與 </code>cluster_network
monitor の通信に使用されるインターフェースです。monitor_interface
osds.yml 設定
osds.yml ここではいくつかの OSD パラメータを定義します。通常、OSD ノード全体に適用されます。osds.yml
devices:
- '/dev/sdb'
- '/dev/sdc'
osd_scenario: collocated
。devices<code>: 用來儲存的裝置,可以定義多個,如果每個 node 並不相同的話,可以嘗試使用 </code>osd_auto_discovery<code>,將其設為 </code>true
: OSD のデプロイ方式です。collocated、non-collocated、lvm の3つのオプションがあります。osd_scenario
同一デバイス上に配置する。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、dataのみが必須項目です。lvm<code>: 需要設定 </code>data<code>、</code>wal<code>跟</code>db<code> 的 </code>lv name<code> 跟 </code>vg group
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 クラスターのデプロイは成功です!
リファレンス
著作権表示:このブログのすべての記事は、以下のライセンスのもとで提供されています。 CC BY-NC-SA 4.0 (別途記載がある場合を除く)

