openSUSE Leap 16

Ceph Reef : クラスターの設定 #12025/10/28

 

分散ファイルシステム Ceph をインストールして、ストレージクラスターを構成します。

当例では 3 台 のノードでクラスターを構成します。
3 台 のノードにはそれぞれ空きブロックデバイスがあることが前提です。
(当例では [/dev/sdb] を使用)

                                         |
            +----------------------------+----------------------------+
            |                            |                            |
            |10.0.0.51                   |10.0.0.52                   |10.0.0.53 
+-----------+-----------+    +-----------+-----------+    +-----------+-----------+
|   [node01.srv.world]  |    |   [node02.srv.world]  |    |   [node03.srv.world]  |
|     Object Storage    +----+     Object Storage    +----+     Object Storage    |
|     Monitor Daemon    |    |                       |    |                       |
|     Manager Daemon    |    |                       |    |                       |
+-----------------------+    +-----------------------+    +-----------------------+

[1] [Monitor Daemon] を設定するノード (以下、管理ノードと表記) から各ノードへ SSH 鍵ペア認証ができるよう設定しておきます。
当例では [root] ユーザーで、パスフレーズ無の鍵ペアを設定します。
一般ユーザーを使用する場合は Sudo の設定が必要です
また、SSH 鍵ペアのパスフレーズを設定する場合は SSH Agent の設定が必要です
各ノードに SSH 鍵を設定した後は、パスワード認証での SSH ログインは禁止しておいた方がよいでしょう。
node01:~ #
ssh-keygen -q -N ""

Enter file in which to save the key (/root/.ssh/id_ed25519):

node01:~ #
vi ~/.ssh/config
# 新規作成 (各ノードと接続ユーザーを定義)

Host node01
    Hostname node01.srv.world
    User root
Host node02
    Hostname node02.srv.world
    User root
Host node03
    Hostname node03.srv.world
    User root

node01:~ #
chmod 600 ~/.ssh/config
# 各ノードに公開鍵を転送

node01:~ #
ssh-copy-id node01

root@node01.srv.world's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'node01'"
and check to make sure that only the key(s) you wanted were added.

node01:~ #
ssh-copy-id node02

node01:~ #
ssh-copy-id node03

[2] 管理ノードから各ノードへ Ceph をインストールします。
node01:~ # for NODE in node01 node02 node03
do
    ssh $NODE "zypper -n install ceph"
done 
[3] 管理ノードで [Monitor Daemon], [Manager Daemon] の設定をします。
node01:~ #
uuidgen

a1598936-342f-40c2-babf-f4b61a9e0bf2
# 設定ファイル新規作成
# 設定ファイル名 ⇒ (任意のクラスター名).conf
# 当例ではデフォルトのクラスター名 [ceph] で設定 ⇒ [ceph.conf]

node01:~ #
vi /etc/ceph/ceph.conf
[global]
# 監視用のクラスターネットワークを指定
cluster network = 10.0.0.0/24
# パブリックネットワークを指定
public network = 10.0.0.0/24
# 先に生成した UUID を指定
fsid = a1598936-342f-40c2-babf-f4b61a9e0bf2
# Monitor Daemon 設定ホストの IP アドレスを指定
mon host = 10.0.0.51
# Monitor Daemon 設定ホストのホスト名を指定
mon initial members = node01
osd pool default crush rule = -1

# mon.(ノード名)
[mon.node01]
# Monitor Daemon のホスト名を指定
host = node01
# Monitor Daemon の IP アドレス
mon addr = 10.0.0.51
# プールの削除を許可する
mon allow pool delete = true

# クラスター管理用のシークレットキーを生成

node01:~ #
ceph-authtool --create-keyring /etc/ceph/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'

creating /etc/ceph/ceph.mon.keyring
# クラスター管理者用のキーを生成

node01:~ #
ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'

creating /etc/ceph/ceph.client.admin.keyring
# ブートストラップ用のキーを生成

node01:~ #
ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'

creating /var/lib/ceph/bootstrap-osd/ceph.keyring
# 生成したキーを [ceph.mon.keyring] にインポート

node01:~ #
ceph-authtool /etc/ceph/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring

importing contents of /etc/ceph/ceph.client.admin.keyring into /etc/ceph/ceph.mon.keyring
node01:~ #
ceph-authtool /etc/ceph/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring

importing contents of /var/lib/ceph/bootstrap-osd/ceph.keyring into /etc/ceph/ceph.mon.keyring
# モニターマップを生成

node01:~ #
FSID=$(grep "^fsid" /etc/ceph/ceph.conf | awk {'print $NF'})

node01:~ #
NODENAME=$(grep "^mon initial" /etc/ceph/ceph.conf | awk {'print $NF'})

node01:~ #
NODEIP=$(grep "^mon host" /etc/ceph/ceph.conf | awk {'print $NF'})

node01:~ #
monmaptool --create --add $NODENAME $NODEIP --fsid $FSID /etc/ceph/monmap

monmaptool: monmap file /etc/ceph/monmap
setting min_mon_release = pacific
monmaptool: set fsid to a1598936-342f-40c2-babf-f4b61a9e0bf2
monmaptool: writing epoch 0 to /etc/ceph/monmap (1 monitors)

# Monitor Daemon 用データディレクトリ作成
# ディレクトリ名 ⇒ (クラスター名)-(ノード名)

node01:~ #
mkdir /var/lib/ceph/mon/ceph-$NODENAME
# Monitor Daemon に生成したモニターマップとキーを関連付け
# --cluster (クラスター名)

node01:~ #
ceph-mon --cluster ceph --mkfs -i $NODENAME --monmap /etc/ceph/monmap --keyring /etc/ceph/ceph.mon.keyring

node01:~ #
chown ceph:ceph /etc/ceph/ceph.*

node01:~ #
chown -R ceph:ceph /var/lib/ceph

node01:~ #
systemctl enable --now ceph-mon@$NODENAME
# Messenger v2 Protocol 有効化

node01:~ #
ceph mon enable-msgr2
node01:~ #
ceph config set mon auth_allow_insecure_global_id_reclaim false
# Placement Groups オートスケール モジュール有効化

node01:~ #
ceph mgr module enable pg_autoscaler
# Manager Daemon 用データディレクトリ作成
# ディレクトリ名 ⇒ (クラスター名)-(ノード名)

node01:~ #
mkdir /var/lib/ceph/mgr/ceph-$NODENAME
# 認証用キーを生成

node01:~ #
ceph auth get-or-create mgr.$NODENAME mon 'allow profile mgr' osd 'allow *' mds 'allow *'

[mgr.node01]
        key = AQCuCQBpsx0CGhAA5HRzgxRG3qU7vcYGRPv8GA==

node01:~ #
ceph auth get-or-create mgr.$NODENAME > /etc/ceph/ceph.mgr.admin.keyring

node01:~ #
cp /etc/ceph/ceph.mgr.admin.keyring /var/lib/ceph/mgr/ceph-$NODENAME/keyring

node01:~ #
chown ceph:ceph /etc/ceph/ceph.mgr.admin.keyring

node01:~ #
chown -R ceph:ceph /var/lib/ceph/mgr/ceph-$NODENAME

node01:~ #
systemctl enable --now ceph-mgr@$NODENAME

[4] 管理ノードで Firewalld を有効にしている場合は、サービスポートの許可が必要です。
node01:~ #
firewall-cmd --add-service=ceph-mon

success
node01:~ #
firewall-cmd --runtime-to-permanent

success
[5] クラスターステータスで [Monitor Daemon], [Manager Daemon] が有効になっていれば OK です。
OSD (Object Storage Device) はこの後設定するため、現時点では [HEALTH_WARN] で問題ありません。
node01:~ #
ceph -s

  cluster:
    id:     a1598936-342f-40c2-babf-f4b61a9e0bf2
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3

  services:
    mon: 1 daemons, quorum node01 (age 87s)
    mgr: node01(active, since 31s)
    osd: 0 osds: 0 up, 0 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:
関連コンテンツ