こんにちは :-)
Airitech株式会社で、インフラ寄りのシステムやアプリケーション開発を生業にしている三宅です。
前回のCeph Orchestratorの概要紹介の続きとして、何回かに分けてIBM Storage CephのCephクラスタ構築手順について書いていこうと思います。
IBM Storage Cephを前提とした手順を書いていきますが、OSS版のCephクラスタ構築でもそのまま適用できるはずです。
この1回目では、Cephクラスタ構築の起点となるBootstrapの構築とCephクラスタを構成するCephホストの初期化や登録手順について書いていきます。
構築するCephクラスタの構成
まず最初に、構築するCephクラスタの構成を説明します。
Cephクラスタ構成の説明をする前に、Cephクラスタの基本的なネットワーク構成について説明します。
Cephのネットワーク構成
Cephクラスタを構成するネットワークには、以下の図にあるようにCephクラスタを利用するクライアントとの間のデータ通信に使うPublicネットワークと、OSD間でのデータ同期/複製を行うための使うClusterネットワークの2つがあります。
厳密にいえば、PublicネットワークではcephadmからのCephクラスタ制御用のssh通信や監視用の通信なども行われています。
クライアントとの間のデータ通信とOSD間のデータ同期/複製のデータ通信を1つのネットワークで行うと、ネットワークに負荷がかかるため、性能が劣化する可能性が出てきます。特にデータ更新を頻繁に行うケースではOSD間でのデータ複製の通信が多量に発生するため、性能劣化が顕著になります。
そのため、PublicネットワークとClusterネットワークを物理的に分離することが望ましいです。
しかし物理的にネットワークを分離するには、ネットワークスイッチを複数用意したりする必要があるなど費用がかかるため、費用対効果を考慮して2つのネットワークを1つにまとめるケースもあります。
これについては、システム要件に合わせて1つにまとめるか、分離するかを決めることになります。
Cephクラスタを構成するネットワークの詳細については、Ceph のネットワーク構成を参照してみてください。
今回構築するCephクラスタのネットワークは、ClusterネットワークをPublicネットワークに集約して1つにまとめた構成にします。
Cephクラスタ構成
今回の説明では、以下の図にある5台のホストで構成するCephクラスタを使用します。
今後行うCephクラスタ構築手順の説明でも、この構成を使います。

ネットワーク構成は、運用者が保守運用でCephクラスタにアクセスする運用ネットワーク(192.168.0.0./24)と、Cephクラスタを利用するクライアントとの通信を行うPublicネットワーク(10.10.1.0/24)の2つの構成とします。
運用ネットワークは1Gbpsのメタルケーブルで、Publicネットワークは10Gbpsか25Gbpsの光ケーブルで構成することになります。
IPアドレス
Cephホストに割り当てるIPアドレスは以下のようにします。
ホスト名称 |
Publicネットワーク |
運用ネットワーク |
ceph-node001 |
10.10.1.1 |
192.168.0.1 |
ceph-node002 |
10.10.1.2 |
192.168.0.2 |
ceph-node003 |
10.10.1.3 |
192.168.0.3 |
ceph-node004 |
10.10.1.4 |
192.168.0.4 |
ceph-node005 |
10.10.1.5 |
192.168.0.5 |
Cephホストへの初期設定
cephadmを使ってCephクラスタを構築する場合、事前にCephホストに対して以下の3つの初期設定を行っておく必要があります。
hosts設定
まず最初に、hosts設定を行う必要があります。
cephadmのオーケストレーター機能がCephホストに対して制御を行う際、Cephホストのホスト名称からIPドレスを引き当てて制御を行っています。
そのため、事前にPublicネットワーク上にDNSを立てるかCephホストのhosts設定を行い、ホスト名称からIPアドレスを引き当てることができる状態にしておく必要があります。
今回のCephクラスタ構築では、hosts設定を行うことで対応します。
hostsを使うかDNSを使うかは、Cephクラスタを構築する環境に合わせて選んでください。
全てのCephホストの/etc/hostsに、以下の設定を追加します。
10.10.1.1 ceph-node001
10.10.1.2 ceph-node002
10.10.1.3 ceph-node003
10.10.1.4 ceph-node004
10.10.1.5 ceph-node005
Cephホストを増設する場合は、全てのCephホストの/etc/hostsに対して、増設するCephホストの名称とIPアドレスの設定を追加する必要があります。
NTP設定
次にNTP設定を行います。
Cephクラスタは、Cephホストの時刻が同期していることを前提にして動作しているため、Cephホストの時刻がずれていると誤動作することがあります。
Cephクラスタの監視機能は、Cephホスト間の時刻のずれを検知してアラートを出すようになっています。
詳細は、時刻同期を参照してみてください。
RHELでは、chronyが標準NTPとして採用されているので、/etc/chrony.conf にNTPサーバの定義を追加してchronydを再起動し、時刻同期が行えるように設定します。
cephadm用アカウントの追加
最後に、cephadmオーケストレーターがCephホストに対してsshコマンドで制御を行う際に用いるcephadm用アカウントを追加します。
このアカウントにはsudo権限を与え、パスワードなしでsudoを実行できるようにしておきます。
アカウント名称は、運用する側で適当な名称を決めることになります。
ここでは、 cephadmin という名称にして進めます。
Bootstrapの構築手順
ここから、Cephクラスタ構築の起点となるBootstrapの構築手順の説明を行います。
この構築手順では、ceph-node001にBootstrapを構築します。
cephadmパッケージインストール
まずはceph-node001(192.168.0.1)に対してsudo権限のあるアカウントでsshでログインします。
ceph-node001にログインしたのち、以下のコマンドを実行してcephadmパッケージをインストールします。
[xxx@ceph-node001 ~]$ sudo dnf install cephadm
[xxx@ceph-node001 ~]$ sudo dnf install cephadm-ansible
Cephコンテナレジストリファイルの準備
次に、Cephコンテナレジストリを定義したjsonファイルを用意します。
今回は、以下の内容の/tmp/registry.json を作成します。
{
"url": "cp.icr.io",
"username": "xxxx",
"password": "yyyy"
}
username とpasswordには、Cephライセンス登録時に取得したCephコンテナレジストリのユーザ名称とパスワードを設定します。
【補足】OSS版Cephを使って構築する場合は、このCephコンテナレジストリファイルは不要になります。
Bootstrap構築
cephadmのインストールが完了したのち、以下のcephadmコマンドを実行してBootstrapを構築します。
[xxx@ceph-node001 ~]$ sudo cephadm bootstrap \
--ssh-user=cephadmin \
--mon-ip 10.10.1.1 \
--skip-monitoring-stack \
--registry-json /tmp/registry.json
--ssh-user には、追加したcephadm用アカウント名称(cephadmin)
--mon-ip には、bootstrapノードであるceph-node001のPublicネットワークのIPアドレス(10.10.1.1)
--registry-json には、Cephコンテナレジストリを定義したjosnファイル
を指定します。
--skip-monitoring-stack は、Bootstrap構築時に監視機能(Prometheusなど)の構築を行わないようにするパラメータになります。
これは構築する際の考え方によると思いますが、あとから監視機能の設定を行った方がわかりやすいと考えているため、ここでの構築手順ではこのようにしています。
上記のコマンドを実行すると、コマンドを実行したホスト上にBootstrapが構築されます。
上記コマンドを実行したあと、以下のコマンドを実行してPubricネットワークのIPアドレスをCIDR表記で設定します。
[xxx@ceph-node001 ~]$ sudo cephadm shell -- ceph config set global public_network 10.10.1.0/24
【補足説明】PublicネットワークとClusterネットワークを別ネットワークにする場合
今回の手順でCephクラスタを構築すると、PublicネットワークとClusterネットワークは同じIPアドレスで構築されます。
PublicネットワークとClusterネットワークを分離した別ネットワークとして構築する場合は、以下にあるようにBootstrap構築コマンド実行時の引数に、--cluster-network を追加して、ClusterネットワークのIPアドレスをCIDR表記で設定します。
[xxx@ceph-node001 ~]$ sudo cephadm bootstrap \
--ssh-user=cephadmin \
--mon-ip 10.10.1.1 \
--cluster-network 10.10.2.0/24 \
--skip-monitoring-stack \
--registry-json /tmp/registry.json
Ceph Dashboardのユーザ名とパスワードの確認
Bootstrap構築時にDashboardが構築されます。
構築したDashboardにアクセスするためのURLとユーザ名(user)、パスワード(password)は、以下の太字の部分にあるような内容で、Bootstrap構築処理中に出力されます。
...
Ceph Dashboard is now available at:
URL: https://ceph-node001:8443/
User: admin
Password: xxxxxxxxxx
...
Cephクラスタ構築後にDashboardへアクセスする際は、上記のURLにブラウザからアクセスして、上記のユーザ名とパスワードでログインしてください。
上記のパスワードは仮パスワードなので、初期ログイン時にパスワードの再設定を要求されます。
cephadmオーケストレーター公開鍵の配置
cephadmオーケストレーターがCephホストを制御する際は、sshコマンドを実行して行うと、以前に説明したと思います。
cephadmオーケストレーターがsshでログインする際のユーザは、事前にcephadm用アカウント(cephadmin)としてすでに作成していますが、cephadmオーケストレーターがsshでアクセスするためには、下の図にあるようにcephadmオーケストレーターの公開鍵をCephホストのcephadm用アカウントに設定する必要があります。
cephadmオーケストレーターの秘密鍵と公開鍵は、Bootstrap構築時に生成されます。
bootstrapホストであるceph-node001への公開鍵設定は、Bootstrap構築時に行われています。
cephadmオーケストレーターの公開鍵の取得は、以下のコマンドを実行して行います。
上記コマンドを実行すると、/tmp/ceph.pubにcephadmオーケストレーターの公開鍵が保存されるので、この公開鍵をbootstrapホスト以外のCephホストのcephadm用アカウント(cephadmin)の.ssh/authorized_keysに追加します。
Cephホストを増設する場合は、増設するCephホストへのcephadm用アカウント(cephadmin)の追加とcephadmオーケストレーターの公開鍵の追加を忘れずに行ってください。
Cephノードの登録
Bootstrapの構築が完了したのち、cephadmオーケストレーターに対してCephホスト(bootstrapホストであるceph-node001を除く)の登録を行います。
Bootstrap構築直後のcephadmオーケストレーターに登録されているCephホストは、以下にあるようにbootstrapホストであるceph-node001のみが登録された状態になります。
[xxx@ceph-node001 ~]$ sudo cephadm shell -- ceph orch host ls 2> /dev/null
HOST ADDR LABELS STATUS
ceph-node001 10.10.1.1 _admin
cephadmオーケストレーターへのCephホストの登録は、以下のコマンドを実行して行います。
[xxx@ceph-node001 ~]$ sudo cephadm shell -- ceph orch host add ceph-node002 10.10.1.2
[xxx@ceph-node001 ~]$ sudo cephadm shell -- ceph orch host add ceph-node003 10.10.1.3
[xxx@ceph-node001 ~]$ sudo cephadm shell -- ceph orch host add ceph-node004 10.10.1.4
[xxx@ceph-node001 ~]$ sudo cephadm shell -- ceph orch host add ceph-node005 10.10.1.5
Cephホストを登録するコマンドの引数は、
ceph orch host add [Cephホスト名称] [PublicネットワークのIPアドレス]
となります。
上記のCephホスト登録コマンド実行後のホストの状態は、以下のようになります。
[xxx@ceph-node001 ~]$ sudo cephadm shell -- ceph orch host ls 2> /dev/null
HOST ADDR LABELS STATUS
ceph-node001 10.10.1.1 _admin
ceph-node002 10.10.1.2
ceph-node003 10.10.1.3
ceph-node004 10.10.1.4
ceph-node005 10.10.1.5
ラベルの設定
登録したCephノードに対してラベルを設定する場合は、以下のコマンドを実行して行います。
[xxx@ceph-node001 ~]$ sudo cephadm shell -- ceph orch host label add ceph-node002 mon,osd,mgr
ラベルについては、ホストのラベル付けを参照してください。
Cephホスト登録後のMONについて
Cephホストを登録すると、ホスト数から適切なMON数をcephadmオーケストレーターが割り出して、自動的にMONを生成します。
5つ以上のCephホストを登録すると、cephadmオーケストレーターは自動的に5つのMONを生成します。
[xxx@ceph-node001 ~]$ sudo cephadm shell -- ceph orch ls 2> /dev/null
NAME PORTS RUNNING REFRESHED AGE PLACEMENT
crash 5/5 7m ago 16h *
mgr 2/2 7m ago 16h count:2
mon 5/5 7m ago 16h count:5
node-proxy 0/0 - 16h *
osd 0 7m ago - <unmanaged>
もしMONの数を減らしたい(3にする)場合は、以下のコマンドを実行してMONの数を設定します。
[xxx@ceph-node001 ~]$ sudo cephadm shell -- ceph orch apply mon 3
このコマンドを実行したのち、cephadmオーケストレーターはMONの数が3になるよう、MONの配置変更を行います。
配置変更が完了したあとに、以下のコマンドを実行してサービス数を確認すると、MONの数が3になっていることを確認することができます。
[xxx@ceph-node001 ~]$ sudo cephadm shell -- ceph orch ls 2> /dev/null
NAME PORTS RUNNING REFRESHED AGE PLACEMENT
crash 5/5 7m ago 16h *
mgr 2/2 7m ago 16h count:2
mon 3/3 7m ago 16h count:3
node-proxy 0/0 - 16h *
osd 0 7m ago - <unmanaged>
以上で、Bootstrapの構築とホスト登録が完了となります。
これでCephクラスタの基礎部分の準備ができました。
これ以降は、OSDの登録や監視サービスの設定、RADOS Gatewayなどのサービスの起動を行うことになります。
次回は、OSDの登録手順について書く予定です。
それではまた :-)