Red Hat Training

A Red Hat training course is available for Red Hat Ceph Storage

1.2. Ceph Monitor

Ceph モニターは、クラスターマップのマスターコピーを維持する軽量プロセスです。すべての Ceph クライアントは Ceph モニターに問い合わせ、クラスターマップの現在のコピーを取得し、クライアントがプールにバインドし、読み取りと書き込みを可能にします。

Ceph モニターは Paxos プロトコルのバリエーションを使用して、クラスター全体でマップやその他の重要な情報について合意を確立します。Paxos の性質上、Ceph は、クォーラムを確立するためにモニターの大部分を実行する必要があり、合意を確立します。

重要

Red Hat では、実稼働クラスターのサポートを受け取るために、別のホストで少なくとも 3 つのモニターが必要になります。

Red Hat は、奇数のモニターをデプロイすることを推奨します。奇数のモニターは、偶数のモニターよりも障害に対する回復性が高くなっています。たとえば、2 つのモニターのデプロイメントでクォーラムを維持するには、Ceph は障害を許容できません。3 つのモニターでは障害を 1 つ、4 つのモニターでは障害を 1 つ、5 つのモニターでは障害を 2 つ許容します。このため、奇数も推奨されています。要約すると、Ceph は、モニターの大部分 (3 つのうち 2 つ、 4 つのうち 3 つなど) が実行され、相互に通信できるようにする必要があります。

マルチノードの Ceph ストレージクラスターの初回のデプロイには、Red Hat では 3 つのモニターが必要です。3 つ以上のモニターが有効な場合には、一度に数を 2 つ増やします。

モニターは軽量であるため、OpenStack ノードと同じホストで実行できます。ただし、Red Hat は、別のホストでモニターを実行することを推奨します。

重要

Red Hat では、同じノードで Ceph Monitor と OSD を共存させるサポートはありません。これを行うと、ストレージクラスターのパフォーマンスに悪影響を与える可能性があります。

Red Hat は、コンテナー化された環境における Ceph サービスを共存させることのみをサポートしています。

ストレージクラスターからモニターを削除する場合、Ceph モニターは Paxos プロトコルを使用して、マスターストレージクラスターマップに関する合意を確立することを検討してください。クォーラムを確立するには、十分な数のモニターが必要です。

関連情報

1.2.1. 新規 Ceph Monitor ノードの準備

新規 Ceph Monitor をストレージクラスターに追加する場合は、それらを別のノードにデプロイします。ノードのハードウェアは、ストレージクラスター内のすべてのノードについて統一する必要があります。

前提条件

手順

  1. 新規ノードをサーバーラックに追加します。
  2. 新しいノードをネットワークに接続します。
  3. 新規ノードに Red Hat Enterprise Linux 7 または Ubuntu 16.04 のいずれかをインストールします。
  4. NTP をインストールし、信頼できるタイムソースを設定します。

    [root@monitor ~]# yum install ntp
  5. ファイアウォールを使用している場合は、TCP ポート 6789 を開きます。

    Red Hat Enterprise Linux

    [root@monitor ~]# firewall-cmd --zone=public --add-port=6789/tcp
    [root@monitor ~]# firewall-cmd --zone=public --add-port=6789/tcp --permanent

    Ubuntu

    iptables -I INPUT 1 -i $NIC_NAME -p tcp -s $IP_ADDR/$NETMASK_PREFIX --dport 6789 -j ACCEPT

    Ubuntu の例

    [user@monitor ~]$ sudo iptables -I INPUT 1 -i enp6s0 -p tcp -s 192.168.0.11/24 --dport 6789 -j ACCEPT

1.2.2. Ansible を使用した Ceph Monitor の追加

Red Hat は、奇数のモニターを維持するために、一度に 2 つのモニターを追加することを推奨します。たとえば、ストレージクラスターに 3 つのモニターがある場合、Red Hat は 5 つのモニターに拡張することを推奨します。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスター。
  • 新規ノードへの root アクセスがあること。

手順

  1. [mons] セクションの下に、新しい Ceph Monitor ノードを /etc/ansible/hosts Ansible インベントリーファイルに追加します。

    [mons]
    monitor01
    monitor02
    monitor03
    $NEW_MONITOR_NODE_NAME
    $NEW_MONITOR_NODE_NAME

  2. Ansible が Ceph ノードと通信できることを確認します。

    # ansible all -m ping
  3. ディレクトリーを Ansible 設定ディレクトリーに移動します。

    # cd /usr/share/ceph-ansible
  4. Ansible Playbook の実行:

    $ ansible-playbook site.yml

    新規モニターを Ceph のコンテナー化されたデプロイメントに追加する場合は、site-docker.yml Playbook を実行します。

    $ ansible-playbook site-docker.yml
  5. Ansible Playbook が完了すると、新しいモニターノードがストレージクラスターに置かれます。

1.2.3. コマンドラインインターフェイスを使用した Ceph Monitor の追加

Red Hat は、奇数のモニターを維持するために、一度に 2 つのモニターを追加することを推奨します。たとえば、ストレージクラスターに 3 つのモニターがある場合、Red Hat は 5 つのモニターに拡張することを推奨します。

重要

Red Hat は、ノードごとに Ceph モニターデーモンを 1 つだけ実行することを推奨します。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスター。
  • 実行中の Ceph Monitor ノードおよび新規モニターノードへの root アクセス権限があること。

手順

  1. Red Hat Ceph Storage 3 モニターリポジトリーを追加します。

    Red Hat Enterprise Linux

    [root@monitor ~]# subscription-manager repos --enable=rhel-7-server-rhceph-3-mon-els-rpms

    Ubuntu

    [user@monitor ~]$ sudo bash -c 'umask 0077; echo deb https://$CUSTOMER_NAME:$CUSTOMER_PASSWORD@rhcs.download.redhat.com/3-updates/Tools $(lsb_release -sc) main | tee /etc/apt/sources.list.d/Tools.list'
    [user@monitor ~]$ sudo bash -c 'wget -O - https://www.redhat.com/security/fd431d51.txt | apt-key add -'

  2. ceph-mon パッケージを新しい Ceph Monitor ノードにインストールします。

    Red Hat Enterprise Linux

    [root@monitor ~]# yum install ceph-mon

    Ubuntu

    [user@monitor ~]$ sudo apt-get install ceph-mon

  3. ストレージクラスターが起動時または再起動時にモニターを特定するようにするには、モニターの IP アドレスを Ceph 設定ファイルに追加します。

    ストレージクラスターの既存のモニターノードの Ceph 設定ファイルの [mon] セクションまたは [global] セクションに新規モニターを追加するには、以下を実行します。mon_host 設定: DNS で解決できるホスト名または IP アドレスの一覧で、,、;、または で区切ります。オプションとして、新規モニターノード用に Ceph 設定ファイルに特定のセクションを作成することもできます。

    構文

    [mon]
    mon host = $MONITOR_IP:$PORT $MONITOR_IP:$PORT ... $NEW_MONITOR_IP:$PORT

    または

    [mon.$MONITOR_ID]
    host = $MONITOR_ID
    mon addr = $MONITOR_IP

    最初のクォーラムグループのモニター部分を作成するには、Ceph 設定ファイルの [global] セクションの mon_initial_members パラメーターにホスト名を追加する必要もあります。

    [global]
    mon initial members = node1 node2 node3 node4 node5
    ...
    [mon]
    mon host = 192.168.0.1:6789 192.168.0.2:6789 192.168.0.3:6789 192.168.0.4:6789 192.168.0.5:6789
    ...
    [mon.node4]
    host = node4
    mon addr = 192.168.0.4
    
    [mon.node5]
    host = node5
    mon addr = 192.168.0.5

    重要

    本番ストレージクラスターには、高可用性を確保するために、 mon_initial_membersmon_hostに少なくとも 3 台のモニターを設定する必要があります。初期モニターが 1 つだけのストレージクラスターにモニターを 2 つ追加しても、それらをmon_initial_members および mon_host に追加しないと、初期モニターが失敗するとストレージクラスターがロックされます。追加するモニターが mon_initial_members および mon_host の一部であるモニターを置き換える場合は、新しいモニターを mon_initial_members および mon_host にも追加する必要があります。

  4. 更新された Ceph 設定ファイルをすべての Ceph ノードおよび Ceph クライアントにコピーします。

    構文

    scp /etc/ceph/$CLUSTER_NAME.conf $TARGET_NODE_NAME:/etc/ceph

    [root@monitor ~]# scp /etc/ceph/ceph.conf node4:/etc/ceph

  5. モニターのデータのディレクトリーを新規モニターノードに作成します。

    構文

    mkdir /var/lib/ceph/mon/$CLUSTER_NAME-$MONITOR_ID

    [root@monitor ~]# mkdir /var/lib/ceph/mon/ceph-node4

  6. 実行中のモニターノードおよび新規モニターノードに一時ディレクトリーを作成し、この手順に必要なファイルを保持します。このディレクトリーは、直前の手順で作成したモニターのデフォルトディレクトリーとは異なる必要があり、すべての手順の完了後に削除できます。

    構文

    mkdir $TEMP_DIRECTORY

    [root@monitor ~]# mkdir /tmp/ceph

  7. 実行中のモニターノードから新しいモニターノードに admin キーをコピーし、ceph コマンドを実行できるようにします。

    構文

    scp /etc/ceph/$CLUSTER_NAME.client.admin.keyring $TARGET_NODE_NAME:/etc/ceph

    [root@monitor ~]# scp /etc/ceph/ceph.client.admin.keyring node4:/etc/ceph

  8. 実行中のモニターノードから、モニターキーリングを取得します。

    構文

    ceph auth get mon. -o /$TEMP_DIRECTORY/$KEY_FILE_NAME

    [root@monitor ~]# ceph auth get mon. -o /tmp/ceph/ceph_keyring.out

  9. 実行中のモニターノードから、モニターマップを取得します。

    構文

    ceph mon getmap -o /$TEMP_DIRECTORY/$MONITOR_MAP_FILE

    [root@monitor ~]# ceph mon getmap -o /tmp/ceph/ceph_mon_map.out

  10. 収集したモニターデータを新しいモニターノードにコピーします。

    構文

    scp /tmp/ceph $TARGET_NODE_NAME:/tmp/ceph

    [root@monitor ~]# scp /tmp/ceph node4:/tmp/ceph

  11. 先に収集したデータから、新しいモニターのデータディレクトリーを準備します。モニターからクォーラム情報を取得するため、モニターマップへのパスをfsidと共に指定する必要があります。モニターキーリングへのパスも指定する必要があります。

    構文

    ceph-mon -i $MONITOR_ID --mkfs --monmap /$TEMP_DIRECTORY/$MONITOR_MAP_FILE --keyring /$TEMP_DIRECTORY/$KEY_FILE_NAME

    [root@monitor ~]# ceph-mon -i node4 --mkfs --monmap /tmp/ceph/ceph_mon_map.out --keyring /tmp/ceph/ceph_keyring.out

  12. カスタム名を持つストレージクラスターの場合は、以下の行を /etc/sysconfig/ceph ファイルに追加します。

    Red Hat Enterprise Linux

    [root@monitor ~]# echo "CLUSTER=<custom_cluster_name>" >> /etc/sysconfig/ceph

    Ubuntu

    [user@monitor ~]$ sudo echo "CLUSTER=<custom_cluster_name>" >> /etc/default/ceph

  13. 新規モニターノードで所有者およびグループのパーミッションを更新します。

    構文

    chown -R $OWNER:$GROUP $DIRECTORY_PATH

    [root@monitor ~]# chown -R ceph:ceph /var/lib/ceph/mon
    [root@monitor ~]# chown -R ceph:ceph /var/log/ceph
    [root@monitor ~]# chown -R ceph:ceph /var/run/ceph
    [root@monitor ~]# chown -R ceph:ceph /etc/ceph

  14. 新しい monitor ノードで ceph-mon プロセスを有効にして起動します。

    構文

    systemctl enable ceph-mon.target
    systemctl enable ceph-mon@$MONITOR_ID
    systemctl start ceph-mon@$MONITOR_ID

    [root@monitor ~]# systemctl enable ceph-mon.target
    [root@monitor ~]# systemctl enable ceph-mon@node4
    [root@monitor ~]# systemctl start ceph-mon@node4

関連情報

1.2.4. Ansible を使用した Ceph Monitor の削除

Ansible で Ceph Monitor を削除するには、Playbook の shrink-mon.yml を使用します。

前提条件

  • Ansible 管理ノード。
  • Ansible によりデプロイされた実行中の Red Hat Ceph Storage クラスター

手順

  1. /usr/share/ceph-ansible/ ディレクトリーに移動します。

    [user@admin ~]$ cd /usr/share/ceph-ansible
  2. infrastructure-playbooks ディレクトリーから現在のディレクトリーに、shrink-mon.yml Playbook をコピーします。

    [root@admin ceph-ansible]# cp infrastructure-playbooks/shrink-mon.yml .
  3. Red Hat Ceph Storage の通常デプロイメントまたはコンテナー化されたデプロイメント用に、shrink-mon.yml Playbook を実行します。

    [user@admin ceph-ansible]$ ansible-playbook shrink-mon.yml -e mon_to_kill=<hostname> -u <ansible-user>

    以下を置き換えます。

    • <hostname> は、Monitor ノードの短縮ホスト名に置き換えます。複数の Monitor を削除するには、ホスト名をコンマで区切ります。
    • <ansible-user> は、Ansible ユーザーの名前に置き換えてください。

    たとえば、ホスト名 monitor1 のノードにある Monitor を削除するには、以下を実行します。

    [user@admin ceph-ansible]$ ansible-playbook shrink-mon.yml -e mon_to_kill=monitor1 -u user
  4. クラスター内のすべての Ceph 設定ファイルから Monitor エントリーを削除します。
  5. Monitor が正常に削除されていることを確認します。

    [root@monitor ~]# ceph -s

関連情報

1.2.5. コマンドラインインターフェイスを使用した Ceph Monitor の削除

Ceph Monitor を削除するには、ストレージクラスターから ceph-mon デーモンを削除し、ストレージクラスターマップを更新します。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスター。
  • モニターノードへの root アクセス権限がある。

手順

  1. monitor サービスを停止します。

    構文

    systemctl stop ceph-mon@$MONITOR_ID

    [root@monitor ~]# systemctl stop ceph-mon@node3

  2. ストレージクラスターからモニターを削除します。

    構文

    ceph mon remove $MONITOR_ID

    [root@monitor ~]# ceph mon remove node3

  3. Ceph 設定ファイル (デフォルトでは /etc/ceph/ceph.conf) からモニターエントリーを削除します。
  4. Ceph 設定ファイルを、ストレージクラスターの残りの全 Ceph ノードに再配布します。

    構文

    scp /etc/ceph/$CLUSTER_NAME.conf $USER_NAME@$TARGET_NODE_NAME:/etc/ceph/

    [root@monitor ~]# scp /etc/ceph/ceph.conf root@$node1:/etc/ceph/

  5. コンテナーのみ。モニターサービスを無効にします。

    注記

    コンテナーを使用している場合にのみ、ステップ 5 - 9 を実行します。

    構文

    systemctl disable ceph-mon@$MONITOR_ID

    [root@monitor ~]# systemctl disable ceph-mon@node3

  6. コンテナーのみ。systemd からサービスを削除します。

    [root@monitor ~]# rm /etc/systemd/system/ceph-mon@.service
  7. コンテナーのみ。systemd マネージャー設定を再読み込みします。

    [root@monitor ~]# systemctl daemon-reload
  8. コンテナーのみ。障害が発生したモニターユニットの状態をリセットします。

    [root@monitor ~]# systemctl reset-failed
  9. コンテナーのみ。ceph-mon RPM を削除します。

    [root@monitor ~]# docker exec node3 yum remove ceph-mon
  10. モニターデータをアーカイブします。

    構文

    mv /var/lib/ceph/mon/$CLUSTER_NAME-$MONITOR_ID /var/lib/ceph/mon/removed-$CLUSTER_NAME-$MONITOR_ID

    [root@monitor ~]# mv /var/lib/ceph/mon/ceph-node3 /var/lib/ceph/mon/removed-ceph-node3

  11. モニターデータを削除します。

    構文

    rm -r /var/lib/ceph/mon/$CLUSTER_NAME-$MONITOR_ID

    [root@monitor ~]# rm -r /var/lib/ceph/mon/ceph-node3

関連情報

1.2.6. 異常なストレージクラスターからの Ceph Monitor の削除

この手順では、正常でないストレージクラスターから ceph-mon デーモンを削除します。配置グループが active + clean にならない、正常でないストレージクラスター。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスター。
  • モニターノードへの root アクセス権限がある。
  • Ceph Monitor ノードが少なくとも 1 台実行している。

手順

  1. 存続しているモニターを特定し、そのノードにログインします。

    [root@monitor ~]# ceph mon dump
    [root@monitor ~]# ssh $MONITOR_HOST_NAME
  2. ceph-mon デーモンを停止し、monmap ファイルのコピーを抽出します。

    構文

    systemctl stop ceph-mon@$MONITOR_ID
    ceph-mon -i $MONITOR_ID --extract-monmap $TEMPORARY_PATH

    [root@monitor ~]# systemctl stop ceph-mon@node1
    [root@monitor ~]# ceph-mon -i node1 --extract-monmap /tmp/monmap

  3. 存続していないモニターを削除します。

    構文

    monmaptool $TEMPORARY_PATH --rm $MONITOR_ID

    [root@monitor ~]# monmaptool /tmp/monmap --rm node2

  4. 削除されたモニターを含む存続しているモニターマップを、存続しているモニターに挿入します。

    構文

    ceph-mon -i $MONITOR_ID --inject-monmap $TEMPORARY_PATH

    [root@monitor ~]# ceph-mon -i node1 --inject-monmap /tmp/monmap