こんにちは。@jedipunkz です。

Ceph を運用する上で考慮しなければいけないのがトラフィックの負荷です。特に OSD 同士のレプリケーション・ハートビートには相当トラフィックの負荷が掛かることが想 像出来ます。

このため MDS, MON の通信に影響を与えないよう、OSD レプリケーション・ハートビー トのためのネットワークを別に設けるのがベストプラクティスな構成の様です。このネッ トワークのことをクラスターネットワークと Ceph 的に言うそうです。

こんな接続になります。

                +------+
                |Client|
                +------+
                |
+-------+-------+-------+-------+------ public network
|       |       |       |       |
+-----+ +-----+ +-----+ +-----+ +-----+
| MON | | MDS | | OSD | | OSD | | OSD |
+-----+ +-----+ +-----+ +-----+ +-----+
                |       |       |
----------------+-------+-------+------ cluster network

上図の様に MON, MDS は public ネットワークを介し OSD のレプリケーション・ハー トビートのみ cluster ネットワークを介します。Client と MDS との通信に影響を与 えない構成になります。

今回はその様な構成を ceph-deploy を使って構築する方法を書いていきます。前提と なるホストとプロセスとネットワークの関係は下記の図の通りです。

+----------+
| 'client' |
+----------+
|
+---------------+---------------+------------- public network
|               |               |
|10.0.0.11      | 10.0.0.12     | 10.0.0.13
+----------+    +----------+    +----------+
| 'ceph01' |    | 'ceph02' |    | 'ceph03' |
|    osd   |    |    osd   |    |    osd   |
|    mon   |    |    mon   |    |    mon   |
|    mds   |    |    mds   |    |    mds   |
+----------+    +----------+    +----------+
|172.18.0.11    | 172.18.0.12   | 172.18.0.13
|               |               |
+---------------+---------------+------------- cluster network

特徴としては..

  • ceph01-03 には NIC を2本出します。
  • ceph01-03 の全てに MDS, MON, OSD を稼働させます。
  • ceph01-03:/dev/sdb を Ceph 用のディスクとして利用

となります。

Ceph-Deply を利用するまでの準備

今回は ceph-deploy を利用し Ceph を構築する。そのための準備として下記の操作を 行う。

ceph サーバ (ceph01-03) の準備

‘ceph’ ユーザの作成を行う。

% ssh user@ceph-server
% sudo useradd -d /home/ceph -m ceph
% sudo passwd ceph

sudoers の設定を行う。

% echo "ceph ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ceph
% sudo chmod 0440 /etc/sudoers.d/ceph

‘client’ の準備

ホスト ‘client’ で準備をします。この準備によって ceph-deploy をそれぞれのホス トに対して実行できるようになります。

まず、ノンパスフレーズの SSH 公開鍵・秘密鍵を生成します。

client% ssh-keygen
Generating public/private key pair.
Enter file in which to save the key (/ceph-client/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /ceph-client/.ssh/id_rsa.
Your public key has been saved in /ceph-client/.ssh/id_rsa.pub.

公開鍵をターゲットホスト (ceph01-03) に配置します。

client% ssh-copy-id ceph@ceph01
client% ssh-copy-id ceph@ceph02
client% ssh-copy-id ceph@ceph03

ceph-deploy を取得します。

client% git clone https://github.com/ceph/ceph-deploy.git ~/ceph-deploy

‘python-virtualenv’ パッケージをインストールする。

client% sudo apt-get update ; sudo apt-get -y install python-virtualenv

ceph-deploy をブートストラップする

client% cd ~/ceph-deploy
client% ./bootstrap

PATH を通す。下記は例。

client% ${EDITOR} ~/.zshrc
export PATH=$HOME/ceph-deploy:$PATH

ホスト名の解決を行う。

cephclient% sudo ${EDITOR} /etc/hosts
10.0.0.11    ceph01
10.0.0.12    ceph02
10.0.0.13    ceph03

これで準備は OK です。ceph-deploy が使える状態になりました。

Ceph 構築手順

今回は ceph01-03 の3台構成を構築しますが、すべての操作はホスト ‘client’ から行 います。先ほど配置した公開鍵によってそれぞれのホストに対して操作が行えます。

ceph サーバ・クライアント間通信のための鍵の生成とコンフィギュレーションの生成 を下記の操作にて行う。

client% ceph-deploy new ceph01 ceph02 ceph03

上記の操作で生成されたカレントディレクトリ上の ceph.conf に対して下記の記述を 追記する。

public network = 10.0.0.0/24
cluster network = 172.18.0.0/24

[mon.a]
    host = ceph01
    mon addr = 10.0.0.11:6789

[mon.b]
    host = ceph02
    mon addr = 10.0.0.12:6789

[mon.c]
    host = ceph03
    mon addr = 10.0.0.13:6789

[osd.0]
    public addr = 10.0.0.11
    cluster addr = 172.18.0.11

[osd.1
    public addr = 10.0.0.12
    cluster addr = 172.18.0.12

[osd.2]
    public addr = 10.0.0.13
    cluster addr = 172.18.0.13

[mds.a]
    host = ceph01

[mds.a]
    host = ceph02

[mds.a]
    host = ceph03

次の操作でそれぞれのホストに対して ceph の公開しているレポジトリを参照させ ceph をインストールしていきます。

cephclient% ceph-deploy install ceph01 ceph02 ceph03

MON daemon のデプロイを行う。

cephclient% ceph-deploy mon create ceph01 ceph02 ceph03

鍵のデプロイを行う。Ceph サーバ間・クライアント間での共有鍵です。1 Cluster に対して1つの鍵を保有することになります。

cephclient% ceph-deploy gatherkeys ceph01 ceph02 ceph03

OSD daemon のデプロイを行う。下記の様にパーティションを指定しなければツールが 自動でパーティショニングを行なってくれます。

cephclient% ceph-deploy osd create create ceph01:/dev/sdb ceph02:/dev/sdb ceph03:/dev/sdb

MDS deamon のデプロイを行う。

cephcleint% ceph-deploy mds create ceph01 ceph02 ceph03

完成です。

全てのホスト ceph01-03 にて MON, MDS, OSD のプロセスが稼働しているのが確認出来 ると思います。実際にどれかのホストの MDS に対して client から ceph ストレージ をマウントしてみてください。

まとめ

通常のフラットなネットワーク上にデプロイする方法とほぼ同じ操作で構築出来ます。 異なるところは ceph.conf に対して設定を追加した点です。また、それぞれのホスト への ceph のインストールの時にオプションが渡せます。–testing と渡せば RC 版の ceph が利用できます。今回の様に何も記さなければ stable 版の利用ということにな ります。