Ceph Storage Cluster を Ubuntu 18.04 LTS にインストールする方法 |
このガイドでは、Ubuntu 18.04 LTS サーバー上で完全に機能する Ceph Storage Cluster のインストールと構成について説明します。 Ceph は、分散オブジェクト ストレージ クラスタを実装し、オブジェクト、ブロック、ファイルレベルのストレージのインターフェースを提供するオープンソース ストレージ ソリューションです。
Ceph ストレージ クラスタのコンポーネント
Ceph ストレージ クラスターの基本コンポーネント
- モニター: Ceph モニター (
ceph-mon
) は、モニター マップ、マネージャー マップ、OSD マップ、CRUSH マップなどのクラスター状態のマップを維持します。 - Ceph OSD: Ceph OSD (オブジェクト ストレージ デーモン、
ceph-osd
) - データシート: Ceph メタデータ サーバー (MDS、
ceph-mds
) - マネージャー: Ceph Manager デーモン (
ceph-mgr
)
Ubuntu 18.04 アーキテクチャ上の Ceph クラスター
私の Ceph クラスターのデプロイメントは、次のシステム図に基づいています。
各サーバーのホスト名をそれに応じて設定し、/etc/hosts
ファイルをすべての Ceph クラスタ ノード上で以下のように構成する必要があります。
192.168.18.70 rgw.example.com rgw
192.168.18.71 mon01.example.com mon01
192.168.18.72 mon02.example.com mon02
192.168.18.73 mon03.example.com mon03
192.168.18.75 osd01.example.com osd01
192.168.18.76 osd02.example.com osd02
192.168.18.77 osd03.example.com osd03
設定に合わせてホスト名と IP アドレスを変更します。前提条件として、システムが更新されていることを確認してください
sudo apt update
sudo apt -y upgrade
sudo reboot
システムが再起動されたら、Ceph クラスターのデプロイメントを開始できます。すべての Ceph ノードに ceph をデプロイする作業を行う追加ノードを用意することをお勧めします。このノードは 管理ノード
と呼ばれます。
192.168.18.74 ceph-admin.example.com ceph-admin
Ceph 管理ノードの準備
Ceph リポジトリを ceph-deploy 管理ノードに追加してから、ceph-deploy パッケージをインストールする必要があります。私の管理ノードは IP 192.168.18.74
にあります
リポジトリキーをインポートする
wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
Ceph リポジトリをシステムに追加します。このインストールでは、Ceph nautilus
が実行されます。
echo deb https://download.ceph.com/debian-nautilus/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
リポジトリを更新し、ceph-deploy をインストールします。
sudo apt update
sudo apt -y install ceph-deploy
Ceph ノードの準備
管理ノードには、パスワードなし
の SSH アクセスが必要です。
すべての Ceph ノード – rgw、osd ノード、および Monitor
に SSH ユーザーを追加します。
export USER_NAME="ceph-admin"
export USER_PASS="StrOngP@ssw0rd"
sudo useradd --create-home -s /bin/bash ${USER_NAME}
echo "${USER_NAME}:${USER_PASS}"|sudo chpasswd
echo "${USER_NAME} ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/${USER_NAME}
sudo chmod 0440 /etc/sudoers.d/${USER_NAME}
ユーザーがパスワードプロンプトなしで sudo を実行できることを確認します。
jmutai@osd01:~$ su - ceph-admin
Password:
ceph-admin@osd01:~$ sudo su -
root@ceph-admin:~#
ceph-admin
ノードで SSH キーを生成します。ただし、sudo または root ユーザーは使用しないでください。パスフレーズは空のままにしておきます。
# su - ceph-admin
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ceph-admin/.ssh/id_rsa):
Created directory '/home/ceph-admin/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ceph-admin/.ssh/id_rsa.
Your public key has been saved in /home/ceph-admin/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:DZZdfRS1Yo+unWAkDum7juShEF67pm7VdSkfWlsCpbA ceph-admin@ceph-admin
The key's randomart image is:
+---[RSA 2048]----+
| . .. .. o=|
| o..o . . o|
| E .= o o o |
| +.O .. + |
| . .. .oS.*. . . |
|. o.....ooo . |
| o.. o . . o . |
| ...= o . . + . |
|oooo o.+. . o |
+----[SHA256]-----+
$ ls /home/ceph-admin/.ssh/
config id_rsa id_rsa.pub known_hosts
~/.ssh/config
を設定します。
$ cat /home/ceph-admin/.ssh/config
Host osd01
Hostname osd01
User ceph-admin
Host osd02
Hostname osd02
User ceph-admin
Host osd03
Hostname osd03
User ceph-admin
Host osd01
Hostname osd01
User ceph-admin
Host mon01
Hostname mon01
User ceph-admin
Host mon02
Hostname mon02
User ceph-admin
Host mon03
Hostname mon03
User ceph-admin
Host rgw
Hostname rgw
User ceph-admin
キーを各 Ceph ノードにコピーします(これは、Ceph 管理ノードから ceph-admin ユーザーとして実行します)。
for i in rgw mon01 mon02 mon03 osd01 osd02 osd03; do
ssh-copy-id $i
done
すべての Ceph ノード上のリモート ユーザーがそうでない場合は、ceph-admin
を正しいユーザー名に置き換えます。
Ceph ストレージ クラスターのデプロイ
Ceph はクロック ドリフトの影響を受けやすいため、すべての Ceph ノード、特にモニターで NTP をセットアップしてください。
sudo apt install ntp
1 つ
個の Ceph Monitor と 3 個
個の Ceph OSD デーモンを備えた 3 つの Ceph ノード クラスターを作成します。クラスターが アクティブ + クリーン
状態に達したら、Metadata Server と 2 つ
の Ceph Monitor を追加してクラスターを拡張します。
まず、ceph-deploy がクラスタ用に生成する構成ファイルとキーを管理するためのディレクトリを 管理ノード
に作成します。
mkdir ceph-deploy
cd ceph-deploy
ceph-deploy ユーティリティは、現在のディレクトリにファイルを出力します。 ceph-deploy を実行するときは、このディレクトリにいることを確認してください。
ステップ 1: ceph モニターノードを初期化する
構成の詳細を保持するために作成した ceph-deploy ディレクトリから、管理ノードで次のコマンドを実行します。
$ ceph-deploy new mon01 mon02 mon03
サンプル出力
ceph-admin@ceph-admin:~/ceph-deploy$ ceph-deploy new mon01 mon02 mon03
[ceph_deploy.conf][DEBUG ] found configuration file at: /home/ceph-admin/.cephdeploy.conf
[ceph_deploy.cli][INFO ] Invoked (2.0.1): /usr/bin/ceph-deploy new mon01
[ceph_deploy.cli][INFO ] ceph-deploy options:
[ceph_deploy.cli][INFO ] username : None
[ceph_deploy.cli][INFO ] verbose : False
[ceph_deploy.cli][INFO ] overwrite_conf : False
[ceph_deploy.cli][INFO ] quiet : False
[ceph_deploy.cli][INFO ] cd_conf : <ceph_deploy.conf.cephdeploy.Conf instance at 0x7f4c0720a950>
[ceph_deploy.cli][INFO ] cluster : ceph
[ceph_deploy.cli][INFO ] ssh_copykey : True
[ceph_deploy.cli][INFO ] mon : ['mon01']
[ceph_deploy.cli][INFO ] func : <function new at 0x7f4c07456d70>
[ceph_deploy.cli][INFO ] public_network : None
[ceph_deploy.cli][INFO ] ceph_conf : None
[ceph_deploy.cli][INFO ] cluster_network : None
[ceph_deploy.cli][INFO ] default_release : False
[ceph_deploy.cli][INFO ] fsid : None
[ceph_deploy.new][DEBUG ] Creating new cluster named ceph
[ceph_deploy.new][INFO ] making sure passwordless SSH succeeds
[mon01][DEBUG ] connected to host: ceph-admin
[mon01][INFO ] Running command: ssh -CT -o BatchMode=yes mon01
[mon01][DEBUG ] connection detected need for sudo
[mon01][DEBUG ] connected to host: mon01
[mon01][DEBUG ] detect platform information from remote host
[mon01][DEBUG ] detect machine type
[mon01][DEBUG ] find the location of an executable
[mon01][INFO ] Running command: sudo /bin/ip link show
[mon01][INFO ] Running command: sudo /bin/ip addr show
[mon01][DEBUG ] IP addresses found: [u'192.168.18.71', u'192.168.19.71', u'192.168.121.23']
[ceph_deploy.new][DEBUG ] Resolving host mon01
[ceph_deploy.new][DEBUG ] Monitor mon01 at 192.168.18.71
[ceph_deploy.new][DEBUG ] Monitor initial members are ['mon01']
[ceph_deploy.new][DEBUG ] Monitor addrs are ['192.168.18.71']
[ceph_deploy.new][DEBUG ] Creating a random mon key...
[ceph_deploy.new][DEBUG ] Writing monitor keyring to ceph.mon.keyring...
[ceph_deploy.new][DEBUG ] Writing initial config to ceph.conf..
ステップ 2: Ceph パッケージをインストールします。
すべてのノードに Ceph パッケージをインストールします。
ceph-deploy install mon01 mon02 mon03 osd01 osd02 osd03 rgw
ceph-deploy ユーティリティは、各ノードに Ceph をインストールします。
サンプル出力
..........................
[osd03][DEBUG ] Setting up ceph-base (13.2.2-1bionic) ...
[osd03][DEBUG ] Setting up python-pecan (1.2.1-2) ...
[osd03][DEBUG ] update-alternatives: using /usr/bin/python2-pecan to provide /usr/bin/pecan (pecan) in auto mode
[osd03][DEBUG ] update-alternatives: using /usr/bin/python2-gunicorn_pecan to provide /usr/bin/gunicorn_pecan (gunicorn_pecan) in auto mode
[osd03][DEBUG ] Setting up ceph-osd (13.2.2-1bionic) ...
[osd03][DEBUG ] chown: cannot access '/var/lib/ceph/osd/*/block*': No such file or directory
[osd03][DEBUG ] Created symlink /etc/systemd/system/multi-user.target.wants/ceph-osd.target -> /lib/systemd/system/ceph-osd.target.
[osd03][DEBUG ] Created symlink /etc/systemd/system/ceph.target.wants/ceph-osd.target -> /lib/systemd/system/ceph-osd.target.
[osd03][DEBUG ] Setting up ceph-mds (13.2.2-1bionic) ...
[osd03][DEBUG ] Created symlink /etc/systemd/system/multi-user.target.wants/ceph-mds.target -> /lib/systemd/system/ceph-mds.target.
[osd03][DEBUG ] Created symlink /etc/systemd/system/ceph.target.wants/ceph-mds.target -> /lib/systemd/system/ceph-mds.target.
[osd03][DEBUG ] Setting up ceph-mon (13.2.2-1bionic) ...
[osd03][DEBUG ] Created symlink /etc/systemd/system/multi-user.target.wants/ceph-mon.target -> /lib/systemd/system/ceph-mon.target.
[osd03][DEBUG ] Created symlink /etc/systemd/system/ceph.target.wants/ceph-mon.target -> /lib/systemd/system/ceph-mon.target.
[osd03][DEBUG ] Setting up ceph-mgr (13.2.2-1bionic) ...
[osd03][DEBUG ] Created symlink /etc/systemd/system/multi-user.target.wants/ceph-mgr.target -> /lib/systemd/system/ceph-mgr.target.
[osd03][DEBUG ] Created symlink /etc/systemd/system/ceph.target.wants/ceph-mgr.target -> /lib/systemd/system/ceph-mgr.target.
[osd03][DEBUG ] Setting up ceph (13.2.2-1bionic) ...
[osd03][DEBUG ] Processing triggers for libc-bin (2.27-3ubuntu1) ...
[osd03][DEBUG ] Processing triggers for ureadahead (0.100.0-20) ...
[osd03][DEBUG ] Processing triggers for systemd (237-3ubuntu10) ...
[osd03][INFO ] Running command: sudo ceph --version
[osd03][DEBUG ] ceph version 13.2.2 (02899bfda814146b021136e9d8e80eba494e1126) mimic (stable)
ステップ 3: 初期モニターを展開し、キーを収集します。
次のコマンドを実行して、初期モニターを作成します。
ceph-deploy mon create-initial
多数のキーリングが作業ディレクトリに配置されます。
マネージャー デーモンをデプロイします:
ceph-deploy mgr create mon01 mon02 mon03
メタデータ サーバーを追加します。
ceph-deploy mds create mon01 mon02 mon03
ステップ 4: Ceph 管理者キーをコピーする
構成ファイルと管理キーを管理ノードと Ceph ノードにコピーします。
ceph-deploy admin mon01 mon02 mon03 osd01 osd02 osd03
ステップ 5: 3 つの OSD を追加する
各ノードに /dev/device
という未使用のディスクがあると仮定します。私の場合は以下のようになります:
root@osd01:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 32G 0 disk
|-sda1 8:1 0 487M 0 part /boot
|-sda2 8:2 0 1.9G 0 part [SWAP]
`-sda3 8:3 0 29.6G 0 part /
vdb 252:0 0 5G 0 disk
vdc 252:16 0 5G 0 disk
vdd 252:32 0 5G 0 disk
使用するデバイスが 3 つあります。
- /dev/vda
- 開発/vdb
- 開発/vdc
デバイスが現在使用されておらず、重要なデータが含まれていないことを確認してください。使用する構文は次のとおりです。
ceph-deploy osd create --data {device} {ceph-node}
私の場合は、次のように実行します。
for i in vdb vdc vdd; do
for j in osd01 osd02 osd03; do
ceph-deploy osd create --data /dev/$i $j
done
done
注: LVM ボリューム上に OSD を作成している場合、--data
の引数はパスではなく volume_group/lv_name
である必要があります。ボリュームのブロックデバイスに。
lsblk
コマンドの出力は変更されているはずです
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 32G 0 disk
|-sda1 8:1 0 487M 0 part /boot
|-sda2 8:2 0 1.9G 0 part [SWAP]
`-sda3 8:3 0 29.6G 0 part /
vdb 252:0 0 5G 0 disk
`-ceph--908c8792--04e8--414f--8430--faa78e9b18eb-osd--block--275c9d8b--3825--4898--9b3b--5ea080fd7137 253:0 0 5G 0 lvm
vdc 252:16 0 5G 0 disk
`-ceph--c79a5159--3980--47e8--b649--ed0c44d32d51-osd--block--a50c2ebc--8d65--4d16--9196--6f741606b3a2 253:1 0 5G 0 lvm
vdd 252:32 0 5G 0 disk
`-ceph--594ff477--943e--49d8--8e08--addf5dbccca3-osd--block--5b71bad9--7fa8--41af--a3af--48af1219aafd 253:2 0 5G 0 lvm
ステップ 6: クラスターの健全性を確認します。
Ceph クラスターのステータスを確認する
root@osd02:~# sudo ceph health
HEALTH_OK
root@osd02:~# sudo ceph status
cluster:
id: 5594514c-4d70-4ec8-a74e-e54ac2c1994f
health: HEALTH_OK
services:
mon: 1 daemons, quorum mon01
mgr: osd01(active)
osd: 9 osds: 9 up, 9 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 9.0 GiB used, 36 GiB / 45 GiB avail
pgs:
新しい Ceph モニターを追加すると、Ceph が開始されます
ceph quorum_status --format json-pretty
ステップ 7: Ceph ダッシュボードを有効にする
Ceph ダッシュボード モジュールを有効にします。
sudo ceph mgr module enable dashboard
sudo ceph mgr module ls
ダッシュボードの自己署名証明書を生成します。
sudo ceph dashboard create-self-signed-cert
ダッシュボードのユーザーを作成します。
sudo ceph dashboard ac-user-create admin 'Str0ngP@sswOrd' administrator
オブジェクト ゲートウェイ管理フロントエンドの有効化:
$ sudo radosgw-admin user create --uid=admin --display-name='Ceph Admin' --system
最後に、ダッシュボードに認証情報を提供します。
sudo ceph dashboard set-rgw-api-access-key <api-access-key>
sudo ceph dashboard set-rgw-api-secret-key <api-secret-key>
Object Gateway セットアップで自己署名証明書を使用している場合は、証明書の検証を無効にする必要があります。
sudo ceph dashboard set-rgw-api-ssl-verify False
ステップ 8: Rados ゲートウェイを追加する
Ceph の Ceph Object Gateway コンポーネントを使用するには、RGW のインスタンスをデプロイする必要があります。次のコマンドを実行して、Rados Gateway の新しいインスタンスを作成します。
$ ceph-deploy rgw create {gateway-node}
例 :
$ ceph-deploy rgw create rgw
デフォルトでは、RGW インスタンスはポート 7480
でリッスンします。これは、RGW を実行しているノードで ceph.conf
を次のように編集することで変更できます。
[client]
rgw frontends = civetweb port=80
Ceph クラスターのリセット
どこかの時点で問題が発生し、最初からやり直したい場合は、次のコマンドを実行して Ceph パッケージをパージし、そのデータと構成をすべて消去します。
ceph-deploy purge {ceph-node} [{ceph-node}]
ceph-deploy purgedata {ceph-node} [{ceph-node}]
ceph-deploy forgetkeys
rm ceph.*
パージを実行した場合は、Cephを再インストールする必要があります。最後の rm コマンドは、前のインストール中にceph-deploy によってローカルに書き込まれたファイルをすべて削除します。
次回の記事では、Ceph でオブジェクトを保存および取得する方法と、Ceph クライアントの構成について説明します。
他の同様のガイドを確認してください。
Ceph Object Storage での REST API アクセスの有効化と構成
Ceph Storage Cluster でのプールの作成
Ceph Object Gateway ストレージ用に AWS S3 CLI を設定する方法
Cephfs を使用した Kubernetes 用 Ceph 永続ストレージ
CentOS 8/CentOS 7 で Heketi を使用して GlusterFS ストレージをセットアップする
Minio を使用して S3 互換オブジェクト ストレージ サーバーをセットアップする方法
CentOS 8/CentOS 7 で Heketi を使用して GlusterFS ストレージをセットアップする