Red Hat Training
A Red Hat training course is available for Red Hat Ceph Storage
Ceph ブロックデバイスから OpenStack へのガイド
OpenStack のバックエンドとして Ceph を使用するように、Ceph、QEMU、libvirt、OpenStack を設定
概要
前書き
Red Hat OpenStack Platform director は、Glance、Cinder、Cinder Backup、および Nova のバックエンドとして Ceph を使用するための 2 つの方法を提供します。
- OpenStack は Ceph クラスターの作成: OpenStack director は Ceph クラスターを起動することができます。これには、Ceph OSD 用のテンプレートを設定する必要があります。OpenStack は Ceph ノードのインストールと設定を処理します。このシナリオでは、OpenStack は OpenStack コントローラーノードで Ceph モニターをインストールします。
- OpenStack director から既存の Ceph クラスターへの接続: OpenStack director(Red Hat OpenStack Platform director バージョン 9 以降)は、Ceph モニターに接続して、OpenStack のバックエンドとして使用するように Ceph クラスターを設定することができます。
前述の方法は、インストールと設定の多くを自動的に処理してくれるため、OpenStack のバックエンドとして Ceph を設定するための好ましい方法です。詳細は、Red Hat OpenStack Platform のドキュメントを参照してください。
本書では、Ceph をバックエンドとして使用するように Ceph、QEMU、libvirt、および OpenStack を設定する手順を詳しく説明します。本書は、Red Hat OpenStack Platform director を使用しないユーザーを対象としています。
+---------------------------------------------------+
| OpenStack |
+---------------------------------------------------+
| libvirt |
+------------------------+--------------------------+
|
| configures
v
+---------------------------------------------------+
| QEMU |
+---------------------------------------------------+
| librbd |
+---------------------------------------------------+
| librados |
+------------------------+-+------------------------+
| OSDs | | Monitors |
+------------------------+ +------------------------+- 注記
- OpenStack のバックエンドとして Ceph ブロックデバイスを使用するには、稼働中の Ceph ストレージクラスターと少なくとも 1 つの OpenStack ノードが必要です。
OpenStack の 3 つの部分は、Ceph のブロックデバイスと統合されます。
- イメージ: OpenStack Glance は仮想マシンのイメージを管理します。イメージを変更することはできません。OpenStack はイメージをバイナリーブロブとして扱い、それに応じてイメージをダウンロードします。
- ボリューム: ボリュームはブロックデバイスです。OpenStack では、仮想マシンを起動したり、実行中の仮想マシンにボリュームを接続したりするためにボリュームを使用します。OpenStack は Cinder サービスを使用してボリュームを管理します。Ceph は、OpenStack Cinder および Cinder Backup のブラックリストとしての役割を果たすことができます。
-
ゲストディスク: ゲストディスクは、ゲストオペレーティングシステムのディスクです。デフォルトでは、仮想マシンのブート時に、ディスクはハイパーバイザーのファイルシステム上のファイルとして表示されます(通常
/var/lib/nova/instances/<uuid>/'内)。OpenStack Glance は、Ceph ブロックデバイスにイメージを格納することができ、イメージの Copy-on-Write クローンを使用して Cinder を使用して仮想マシンをブートすることができます。
Ceph は、仮想マシンのディスクをホストする QCOW2 をサポートしません。Ceph で仮想マシンを起動するには(一時バックエンドまたはボリュームからブート)、Glance イメージの形式を RAW にする必要があります。
OpenStack では、イメージ、ボリューム、またはゲストディスクの仮想マシンに Ceph を使用できます。3 つとも使用する必要はありません。
第1章 Ceph プールの作成
デフォルトでは、Ceph ブロックデバイスは rbd プールを使用します。利用可能なプールを使用できます。以下の例では、Cinder、Cinder バックアップ、Glance、および Nova にそれぞれプールを作成します。Ceph クラスターが稼働中であることを確認してから、プールを作成します。
Red Hat は、Ceph Placement Group’s per Pool Calculator を使用して、プールに適した配置グループ数を計算することを推奨します。プールの作成 に 関する詳細は、Red Hat Ceph Storage 3 の『ストレージ戦略 』ガイドの「プール」の章を参照してください。以下の例では、128 が配置グループの数になります。
# ceph osd pool create volumes 128 # ceph osd pool create backups 128 # ceph osd pool create images 128 # ceph osd pool create vms 128
第2章 Ceph クライアントのインストールおよび設定
nova-compute、cinder-backup、および cinder-volume ノードには、Python バインディングとクライアントコマンドラインツールの両方が必要です。
# yum install python-rbd # yum install ceph-common
glance-api ノードには、librbd 用の Python バインディングが必要です。
# yum install python-rbd
2.1. Ceph 設定ファイルの OpenStack ノードへのコピー
glance-api、cinder-volume、nova-compute、cinder-backup を実行するノードは Ceph クライアントとして機能します。それぞれに Ceph 設定ファイルが必要です。Ceph 設定ファイルを監視ノードから OSP ノードにコピーします。
# scp /etc/ceph/ceph.conf osp:/etc/ceph
2.2. Ceph クライアント認証の設定
Ceph monitor ノードから、Cinder、Cinder Backup、および Glance の新しいユーザーを作成します。
# ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images' # ceph auth get-or-create client.cinder-backup mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=backups' # ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
client.cinder、client.cinder-backup、および client.glance のキーリングを適切なノードに追加し、それらの所有権を変更します。
# ceph auth get-or-create client.cinder | ssh {your-volume-server} sudo tee /etc/ceph/ceph.client.cinder.keyring
# ssh {your-cinder-volume-server} chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring
# ceph auth get-or-create client.cinder-backup | ssh {your-cinder-backup-server} tee /etc/ceph/ceph.client.cinder-backup.keyring
# ssh {your-cinder-backup-server} chown cinder:cinder /etc/ceph/ceph.client.cinder-backup.keyring
# ceph auth get-or-create client.glance | ssh {your-glance-api-server} sudo tee /etc/ceph/ceph.client.glance.keyring
# ssh {your-glance-api-server} chown glance:glance /etc/ceph/ceph.client.glance.keyring
nova-compute を実行しているノードには、nova-compute プロセスのキーリングファイルが必要です。
# ceph auth get-or-create client.cinder | ssh {your-nova-compute-server} tee /etc/ceph/ceph.client.cinder.keyring
nova-compute を実行しているノードは、libvirt に client.cinder ユーザーの秘密鍵を保存する必要もあります。libvirt プロセスでは、Cinder からブロックデバイスを接続中にクラスターにアクセスする必要があります。nova-compute を実行しているノードに秘密鍵の一時コピーを作成します。
# ceph auth get-key client.cinder | ssh {your-compute-node} tee client.cinder.key
exclusive-lock 機能を使用する Ceph Block Device イメージがストレージクラスターに含まれている場合には、すべての Ceph Block Device ユーザーにクライアントをブラックリストに登録するパーミッションがあるようにしてください。
# ceph auth caps client.{ID} mon 'allow r, allow command "osd blacklist"' osd '{existing-OSD-user-capabilities}'コンピュートノードに戻ります。
# ssh {your-compute-node}
シークレットの UUID を生成し、後で nova-compute を設定するためにシークレットの UUID を保存します。
# uuidgen > uuid-secret.txt
すべてのコンピュートノードで UUID は必要ありません。ただし、プラットフォームの整合性からは、同じ UUID を維持する方が適切です。
次に、コンピュートノードで秘密鍵を libvirt に追加し、キーの一時コピーを削除します。
cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
<uuid>`cat uuid-secret.txt`</uuid>
<usage type='ceph'>
<name>client.cinder secret</name>
</usage>
</secret>
EOF# virsh secret-define --file secret.xml # virsh secret-set-value --secret $(cat uuid-secret.txt) --base64 $(cat client.cinder.key) && rm client.cinder.key secret.xml
第3章 OpenStack が Ceph を使用するように設定する手順
3.1. Cinder の設定
cinder-volume ノードには、Ceph ブロックデバイスドライバー、ボリューム プール、ユーザー、およびシークレットの UUID が Ceph ブロックデバイスと対話する必要があります。Cinder を設定するには、以下の手順を実行します。
Cinder 設定ファイルを開きます。
# vim /etc/cinder/cinder.conf
[DEFAULT]セクションで、Cinder のバックエンドとして Ceph を有効にします。enabled_backends = ceph
Glance API のバージョンが 2 に設定されていることを確認します。複数の cinder バックエンドを
enabled_backendsに設定する場合には、glance_api_version = 2設定は[DEFAULT]セクションではなく、[ceph]セクションになければなりません。glance_api_version = 2
-
cinder.confファイルに[ceph]セクションを作成します。以下のステップで[ceph]セクションに Ceph 設定を追加します。 volume_driverの設定を指定し、Ceph ブロックデバイスドライバーを使用するように設定します。以下に例を示します。volume_driver = cinder.volume.drivers.rbd.RBDDriver
クラスター名と Ceph の設定ファイルの場所を指定します。典型的なデプロイメントでは、
cephクラスターのクラスター名および Ceph 設定ファイルは/etc/ceph/ceph.confにあります。Ceph クラスター名がcephでない場合には、クラスター名と設定ファイルパスを適切に指定します。以下に例を示します。rbd_cluster_name = us-west rbd_ceph_conf = /etc/ceph/us-west.conf
デフォルトでは、OSP は Ceph ボリュームを
rbdプールに保存します。以前に作成したvolumesプールを使用するには、rbd_pool設定を指定し、volumesプールを設定します。以下に例を示します。rbd_pool = volumes
OSP には、ボリュームのデフォルトのユーザー名やシークレットの UUID がありません。
rbd_userを指定して、cinderユーザーに設定します。次にrbd_secret_uuid設定を指定し、uuid-secret.txtファイルに保存されている生成された UUID に設定します。以下に例を示します。rbd_user = cinder rbd_secret_uuid = 4b5fd580-360c-4f8c-abb5-c83bb9a3f964
以下の設定を指定します。
rbd_flatten_volume_from_snapshot = false rbd_max_clone_depth = 5 rbd_store_chunk_size = 4 rados_connect_timeout = -1
その結果、設定は以下のようになります。
[DEFAULT] enabled_backends = ceph glance_api_version = 2 ... [ceph] volume_driver = cinder.volume.drivers.rbd.RBDDriver rbd_cluster_name = ceph rbd_pool = volumes rbd_user = cinder rbd_ceph_conf = /etc/ceph/ceph.conf rbd_flatten_volume_from_snapshot = false rbd_secret_uuid = 4b5fd580-360c-4f8c-abb5-c83bb9a3f964 rbd_max_clone_depth = 5 rbd_store_chunk_size = 4 rados_connect_timeout = -1
デフォルトの [lvm] セクションと、その設定を削除することを検討してください。
3.2. Cinder バックアップの設定
cinder-backup ノードには特定のデーモンが必要です。Cinder バックアップを設定するには、以下の手順を実行します。
Cinder 設定ファイルを開きます。
# vim /etc/cinder/cinder.conf
-
設定ファイルの
[ceph]セクションに移動します。 backup_driverの設定を指定し、Ceph ドライバーに設定します。backup_driver = cinder.backup.drivers.ceph
backup_ceph_confの設定を指定し、Ceph 設定ファイルへのパスを指定します。backup_ceph_conf = /etc/ceph/ceph.conf
注記Cinder バックアップ Ceph 設定ファイルは、Cinder に使用する Ceph 設定ファイルとは異なる場合があります。たとえば、別の Ceph クラスターを指す場合があります。
バックアップ用の Ceph プールを指定します。
backup_ceph_pool = backups
注記Cinder で使用する Cinder バックアップに同じプールを使用することもできますが、推奨されません。異なる CRUSH 階層でプールを使用することを検討してください。
backup_ceph_user設定を指定し、ユーザーをcinder-backupとして指定します。backup_ceph_user = cinder-backup
以下の設定を指定します。
backup_ceph_chunk_size = 134217728 backup_ceph_stripe_unit = 0 backup_ceph_stripe_count = 0 restore_discard_excess_bytes = true
Cinder 設定が含まれているので、cinder.conf ファイルの [ceph] セクションは以下のようになります。
[ceph] volume_driver = cinder.volume.drivers.rbd.RBDDriver rbd_cluster_name = ceph rbd_pool = volumes rbd_user = cinder rbd_ceph_conf = /etc/ceph/ceph.conf rbd_flatten_volume_from_snapshot = false rbd_secret_uuid = 4b5fd580-360c-4f8c-abb5-c83bb9a3f964 rbd_max_clone_depth = 5 rbd_store_chunk_size = 4 rados_connect_timeout = -1 backup_driver = cinder.backup.drivers.ceph backup_ceph_user = cinder-backup backup_ceph_conf = /etc/ceph/ceph.conf backup_ceph_chunk_size = 134217728 backup_ceph_pool = backups backup_ceph_stripe_unit = 0 backup_ceph_stripe_count = 0 restore_discard_excess_bytes = true
/etc/openstack-dashboard/ で Cinder バックアップが有効になっているかどうかを確認します。この設定は local_settings または という名前のファイルにある必要があります。以下に例を示します。
local_settings.py
cat /etc/openstack-dashboard/local_settings | grep enable_backup
enable_backup を False に設定すると、これを True に設定します。以下に例を示します。
OPENSTACK_CINDER_FEATURES = {
'enable_backup': True,
}3.3. Glance の設定
デフォルトで Ceph ブロックデバイスを使用するには、/etc/glance/glance-api.conf ファイルを編集します。必要に応じて以下の設定のコメントを解除し、値を変更します。別のプールを使用した場合は、ユーザーまたは Ceph の設定ファイルの適切な値が適用されます。
# vim /etc/glance/glance-api.conf
stores = rbd default_store = rbd rbd_store_chunk_size = 8 rbd_store_pool = images rbd_store_user = glance rbd_store_ceph_conf = /etc/ceph/ceph.conf
CoW (copy-on-write) クローン作成を有効にするには、show_image_direct_url を True に設定します。
show_image_direct_url = True
CoW を有効にすると、Glance の API 経由でバックエンドの場所を公開するため、エンドポイントは一般にアクセスできないはずです。
必要に応じてキャッシュ管理を無効にします。flavor は、keystone+cachemanagement ではなく、keystone にのみ設定する必要があります。
flavor = keystone
Red Hat では、イメージに以下のプロパティーを推奨します。
hw_scsi_model=virtio-scsi hw_disk_bus=scsi hw_qemu_guest_agent=yes os_require_quiesce=yes
virtio-scsi コントローラーのパフォーマンスが向上し、破棄操作に対応します。SCSI/SAS ドライブを使用するシステムの場合は、cinder ブロックデバイスをすべてそのコントローラーに接続します。また、QEMU ゲストエージェントを有効にし、QEMU ゲストエージェントを介して fs-freeze/thaw 呼び出しを送信します。
3.4. Nova の設定
すべての nova-compute ノードで、Ceph 設定ファイルを編集して Nova の一時バックエンドを設定し、すべての仮想マシンを Ceph に直接ブートします。
Ceph 設定ファイルを開きます。
# vim /etc/ceph/ceph.conf
以下のセクションを Ceph 設定ファイルの
[client]セクションに追加します。[client] rbd cache = true rbd cache writethrough until flush = true rbd concurrent management ops = 20 admin socket = /var/run/ceph/guests/$cluster-$type.$id.$pid.$cctid.asok log file = /var/log/ceph/qemu-guest-$pid.log
管理ソケットおよびログファイルのディレクトリーを作成し、
qemuユーザーおよびlibvirtdグループを使用するようにパーミッションを変更します。mkdir -p /var/run/ceph/guests/ /var/log/ceph/ chown qemu:libvirt /var/run/ceph/guests /var/log/ceph/
注記ディレクトリーは SELinux または AppArmor が許可している必要があります。
すべての nova-compute ノードで、[libvirt] セクションの下にある 、以下の設定を行います。
/etc/nova/nova.conf ファイルを編集し
[libvirt] images_type = rbd images_rbd_pool = vms images_rbd_ceph_conf = /etc/ceph/ceph.conf rbd_user = cinder rbd_secret_uuid = 4b5fd580-360c-4f8c-abb5-c83bb9a3f964 disk_cachemodes="network=writeback" inject_password = false inject_key = false inject_partition = -2 live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED" hw_disk_discard = unmap
Ceph 設定ファイルが /etc/ceph/ceph.conf ではない場合は、正しいパスを指定します。rbd_user_secret の UUID は、uuid-secret.txt ファイルの UUID に置き換えます。
3.5. OpenStack サービスの再起動
Ceph ブロックデバイスドライバーをアクティブにするには、ブロックデバイスプール名と Ceph ユーザー名を設定に読み込み、対応する設定ファイルを変更した後に適切な OpenStack サービスを再起動します。
# systemctl restart openstack-cinder-volume # systemctl restart openstack-cinder-backup # systemctl restart openstack-glance-api # systemctl restart openstack-nova-compute