ウェブサイト検索

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 ストレージをセットアップする

関連記事: