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 プロトコルを使用して、マスターストレージクラスターマップに関する合意を確立することを検討してください。クォーラムを確立するには、十分な数のモニターが必要です。
関連情報
- サポートされているすべての Ceph 設定については、ナレッジベースアーティクル Red Hat Ceph Storage でサポートされる設定 を参照してください。
1.2.1. 新規 Ceph Monitor ノードの準備
新規 Ceph Monitor をストレージクラスターに追加する場合は、それらを別のノードにデプロイします。ノードのハードウェアは、ストレージクラスター内のすべてのノードについて統一する必要があります。
前提条件
- ネットワーク接続
-
新規ノードへの
root
アクセスがあること。 - Installation Guide for Red Hat Enterprise Linux または Ubuntu の Requirements for Installing Red Hat Ceph Storageの章を参照してください。
手順
- 新規ノードをサーバーラックに追加します。
- 新しいノードをネットワークに接続します。
- 新規ノードに Red Hat Enterprise Linux 7 または Ubuntu 16.04 のいずれかをインストールします。
NTP をインストールし、信頼できるタイムソースを設定します。
[root@monitor ~]# yum install ntp
ファイアウォールを使用している場合は、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
アクセスがあること。
手順
[mons]
セクションの下に、新しい Ceph Monitor ノードを/etc/ansible/hosts
Ansible インベントリーファイルに追加します。例
[mons] monitor01 monitor02 monitor03 $NEW_MONITOR_NODE_NAME $NEW_MONITOR_NODE_NAME
Ansible が Ceph ノードと通信できることを確認します。
# ansible all -m ping
ディレクトリーを Ansible 設定ディレクトリーに移動します。
# cd /usr/share/ceph-ansible
Ansible Playbook の実行:
$ ansible-playbook site.yml
新規モニターを Ceph のコンテナー化されたデプロイメントに追加する場合は、
site-docker.yml
Playbook を実行します。$ ansible-playbook site-docker.yml
- 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
アクセス権限があること。
手順
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 -'
ceph-mon
パッケージを新しい Ceph Monitor ノードにインストールします。Red Hat Enterprise Linux
[root@monitor ~]# yum install ceph-mon
Ubuntu
[user@monitor ~]$ sudo apt-get install ceph-mon
ストレージクラスターが起動時または再起動時にモニターを特定するようにするには、モニターの 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_members
とmon_host
に少なくとも 3 台のモニターを設定する必要があります。初期モニターが 1 つだけのストレージクラスターにモニターを 2 つ追加しても、それらをmon_initial_members
およびmon_host
に追加しないと、初期モニターが失敗するとストレージクラスターがロックされます。追加するモニターがmon_initial_members
およびmon_host
の一部であるモニターを置き換える場合は、新しいモニターをmon_initial_members
およびmon_host
にも追加する必要があります。更新された Ceph 設定ファイルをすべての Ceph ノードおよび Ceph クライアントにコピーします。
構文
scp /etc/ceph/$CLUSTER_NAME.conf $TARGET_NODE_NAME:/etc/ceph
例
[root@monitor ~]# scp /etc/ceph/ceph.conf node4:/etc/ceph
モニターのデータのディレクトリーを新規モニターノードに作成します。
構文
mkdir /var/lib/ceph/mon/$CLUSTER_NAME-$MONITOR_ID
例
[root@monitor ~]# mkdir /var/lib/ceph/mon/ceph-node4
実行中のモニターノードおよび新規モニターノードに一時ディレクトリーを作成し、この手順に必要なファイルを保持します。このディレクトリーは、直前の手順で作成したモニターのデフォルトディレクトリーとは異なる必要があり、すべての手順の完了後に削除できます。
構文
mkdir $TEMP_DIRECTORY
例
[root@monitor ~]# mkdir /tmp/ceph
実行中のモニターノードから新しいモニターノードに 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
実行中のモニターノードから、モニターキーリングを取得します。
構文
ceph auth get mon. -o /$TEMP_DIRECTORY/$KEY_FILE_NAME
例
[root@monitor ~]# ceph auth get mon. -o /tmp/ceph/ceph_keyring.out
実行中のモニターノードから、モニターマップを取得します。
構文
ceph mon getmap -o /$TEMP_DIRECTORY/$MONITOR_MAP_FILE
例
[root@monitor ~]# ceph mon getmap -o /tmp/ceph/ceph_mon_map.out
収集したモニターデータを新しいモニターノードにコピーします。
構文
scp /tmp/ceph $TARGET_NODE_NAME:/tmp/ceph
例
[root@monitor ~]# scp /tmp/ceph node4:/tmp/ceph
先に収集したデータから、新しいモニターのデータディレクトリーを準備します。モニターからクォーラム情報を取得するため、モニターマップへのパスを
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
カスタム名を持つストレージクラスターの場合は、以下の行を
/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
新規モニターノードで所有者およびグループのパーミッションを更新します。
構文
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
新しい 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
関連情報
- Installation Guide for Red Hat Enterprise Linux または Ubuntu のEnabling the Red Hat Ceph Storage Repositoriesセクションを参照してください。
1.2.4. Ansible を使用した Ceph Monitor の削除
Ansible で Ceph Monitor を削除するには、Playbook の shrink-mon.yml
を使用します。
前提条件
- Ansible 管理ノード。
- Ansible によりデプロイされた実行中の Red Hat Ceph Storage クラスター
手順
/usr/share/ceph-ansible/
ディレクトリーに移動します。[user@admin ~]$ cd /usr/share/ceph-ansible
infrastructure-playbooks
ディレクトリーから現在のディレクトリーに、shrink-mon.yml
Playbook をコピーします。[root@admin ceph-ansible]# cp infrastructure-playbooks/shrink-mon.yml .
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
-
- クラスター内のすべての Ceph 設定ファイルから Monitor エントリーを削除します。
Monitor が正常に削除されていることを確認します。
[root@monitor ~]# ceph -s
関連情報
- Red Hat Ceph Storage のインストールに関する情報は、Installation Guide for Red Hat Enterprise Linux または Ubuntuを参照してください。
1.2.5. コマンドラインインターフェイスを使用した Ceph Monitor の削除
Ceph Monitor を削除するには、ストレージクラスターから ceph-mon
デーモンを削除し、ストレージクラスターマップを更新します。
前提条件
- 稼働中の Red Hat Ceph Storage クラスター。
-
モニターノードへの
root
アクセス権限がある。
手順
monitor サービスを停止します。
構文
systemctl stop ceph-mon@$MONITOR_ID
例
[root@monitor ~]# systemctl stop ceph-mon@node3
ストレージクラスターからモニターを削除します。
構文
ceph mon remove $MONITOR_ID
例
[root@monitor ~]# ceph mon remove node3
-
Ceph 設定ファイル (デフォルトでは
/etc/ceph/ceph.conf
) からモニターエントリーを削除します。 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 - 9 を実行します。
構文
systemctl disable ceph-mon@$MONITOR_ID
例
[root@monitor ~]# systemctl disable ceph-mon@node3
コンテナーのみ。systemd からサービスを削除します。
[root@monitor ~]# rm /etc/systemd/system/ceph-mon@.service
コンテナーのみ。systemd マネージャー設定を再読み込みします。
[root@monitor ~]# systemctl daemon-reload
コンテナーのみ。障害が発生したモニターユニットの状態をリセットします。
[root@monitor ~]# systemctl reset-failed
コンテナーのみ。
ceph-mon
RPM を削除します。[root@monitor ~]# docker exec node3 yum remove ceph-mon
モニターデータをアーカイブします。
構文
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
モニターデータを削除します。
構文
rm -r /var/lib/ceph/mon/$CLUSTER_NAME-$MONITOR_ID
例
[root@monitor ~]# rm -r /var/lib/ceph/mon/ceph-node3
関連情報
- 詳細は、ナレッジベースソリューションのHow to re-deploy Ceph Monitor in a director deployed Ceph clusterを参照してください。
1.2.6. 異常なストレージクラスターからの Ceph Monitor の削除
この手順では、正常でないストレージクラスターから ceph-mon
デーモンを削除します。配置グループが active + clean
にならない、正常でないストレージクラスター。
前提条件
- 稼働中の Red Hat Ceph Storage クラスター。
-
モニターノードへの
root
アクセス権限がある。 - Ceph Monitor ノードが少なくとも 1 台実行している。
手順
存続しているモニターを特定し、そのノードにログインします。
[root@monitor ~]# ceph mon dump [root@monitor ~]# ssh $MONITOR_HOST_NAME
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
存続していないモニターを削除します。
構文
monmaptool $TEMPORARY_PATH --rm $MONITOR_ID
例
[root@monitor ~]# monmaptool /tmp/monmap --rm node2
削除されたモニターを含む存続しているモニターマップを、存続しているモニターに挿入します。
構文
ceph-mon -i $MONITOR_ID --inject-monmap $TEMPORARY_PATH
例
[root@monitor ~]# ceph-mon -i node1 --inject-monmap /tmp/monmap