ウェブサイト検索

CentOS|Rocky Linux|Alma Linux 8 に Ceph Storage Cluster をインストールする |


このチュートリアルでは、CentOS|Rocky Linux|Alma Linux 8 サーバーに Ceph Storage Cluster をインストールして設定する方法を説明します。 Ceph は、分散オブジェクト ストレージ クラスターを実装し、オブジェクト、ブロック、およびファイル レベルのストレージのインターフェイスを提供する、オープンソースで非常にスケーラブルな簡素化されたストレージ ソリューションです。 CentOS|Rocky Linux|Alma Linux 8 への Ceph Storage Cluster のインストールでは、デプロイメントの自動化方法として Ansible を使用します。

Ceph クラスターのコンポーネント

Ceph ストレージ クラスターの基本コンポーネント

  • モニター: Ceph モニター (ceph-mon) は、モニター マップ、マネージャー マップ、OSD マップ、CRUSH マップなどのクラスター状態のマップを維持します。
  • Ceph OSD: Ceph OSD (オブジェクト ストレージ デーモン、ceph-osd) は、データを保存し、データのレプリケーション、リカバリ、リバランスを処理し、Ceph モニターとマネージャーに監視情報を提供します。他の Ceph OSD デーモンのハートビートをチェックすることによって。冗長性と高可用性を実現するには、通常、少なくとも 3 つの Ceph OSD が必要です。
  • MDS: Ceph メタデータ サーバー (MDS、ceph-mds) は、Ceph ファイルシステムに代わってメタデータを保存します (つまり、Ceph ブロック デバイスと Ceph オブジェクト ストレージは MDS を使用しません)。 。 Ceph Metadata Server を使用すると、POSIX ファイル システム ユーザーは、Ceph Storage Cluster に多大な負担をかけることなく、基本的なコマンド (ls、find など) を実行できます。
  • Ceph マネージャ: Ceph Manager デーモン (ceph-mgr) は、実行時メトリクスと Ceph クラスタの現在の状態を追跡する責任があります。これには、ストレージ使用率、現在のパフォーマンス指標、システム負荷が含まれます。

CentOS|Rocky Linux|Alma Linux 8 への Ceph Storage Cluster のインストールは、以下のシステム設計に基づいています。

SERVER NAME CEPH COMPONENT Server Specs
cephadmin ceph-ansible 2gb ram, 1vcpus
cephmon01 Ceph Monitor 8gb ram, 4vpcus
cephmon02 Ceph MON, MGR,MDS 8gb ram, 4vpcus
cephmon03 Ceph MON, MGR,MDS 8gb ram, 4vpcus
cephosd01 Ceph OSD 16gb ram, 8vpcus
cephosd02 Ceph OSD 16gb ram, 8vpcus
cephosd03 Ceph OSD 16gb ram, 8vpcus

cephadmin ノードは、CentOS|Rocky Linux|Alma Linux 8 での Ceph Storage Cluster のデプロイメントに使用されます。

ステップ 1: すべてのノードを準備する – ceph-ansible、OSD、MON、MGR、MDS

以下のいくつかの手順に従って、すべてのノードを準備する必要があります。

  • 各サーバーに正しいホスト名を設定する
  • 正しい時刻を設定し、chrony NTP サービスを構成します。
  • IP アドレスを含むホスト名を DNS サーバーに追加するか、すべてのサーバーの /etc/hosts を更新します。

各ホストの /etc/hosts コンテンツの例。

sudo tee -a /etc/hosts<<EOF
192.168.10.10  cephadmin
192.168.10.11  cephmon01
192.168.10.12  cephmon02
192.168.10.13  cephmon03
192.168.10.14  cephosd01
192.168.10.15  cephosd02
192.168.10.16  cephosd03
EOF

上記のタスクを完了したら、基本パッケージをインストールします。

sudo dnf update
sudo dnf install vim bash-completion tmux

アップグレード後に各サーバーを再起動します。

sudo dnf -y update && sudo reboot

ステップ 2: Ceph 管理ノードの準備

管理ノードにログインします。

$ ssh root@cephadmin

EPEL リポジトリを追加します。

sudo dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo dnf config-manager --set-enabled PowerTools

Git をインストールします。

sudo yum install git vim bash-completion

Ceph Ansible リポジトリのクローンを作成します。

git clone https://github.com/ceph/ceph-ansible.git

使用する ceph-ansible ブランチを選択します。コマンドの構文は次のとおりです。

git checkout $branch

Ceph のタコバージョンをサポートする安定版 5.0 に切り替えます。

cd ceph-ansible
git checkout stable-5.0

Pythonのpipをインストールします。

sudo yum install python3-pip

pip と提供されている requirements.txt を使用して、Ansible およびその他の必要な Python ライブラリをインストールします。

sudo pip3 install -r requirements.txt

/usr/local/bin パスが PATH に追加されていることを確認します。

$ echo "PATH=\$PATH:/usr/local/bin" >>~/.bashrc
$ source ~/.bashrc

インストールされている Ansible バージョンを確認します。

$ ansible --version
ansible 2.9.7
  config file = /root/ceph-ansible/ansible.cfg
  configured module search path = ['/root/ceph-ansible/library']
  ansible python module location = /usr/local/lib/python3.6/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 3.6.8 (default, Nov 21 2019, 19:31:34) [GCC 8.3.1 20190507 (Red Hat 8.3.1-4)]

SSH公開キーをすべてのノードにコピーします

Ceph 管理ノードで SSH キー ペアを設定し、 公開キーをすべてのストレージ ノードにコピーします。

$ ssh-keygen

-- Copy pubkey, example:
for host in cephmon01 cephmon02 cephmon03 cephosd01 cephosd02 cephosd03; do
 ssh-copy-id root@$host
done

すべてのストレージ ノードの管理ノードに ssh 構成ファイルを作成します。

# This is my ssh config file
$ vi ~/.ssh/config 
Host cephadmin
    Hostname 192.168.10.10
    User root
Host cephmon01
    Hostname 192.168.10.11
    User root
Host cephmon02
    Hostname 192.168.10.12
    User root
Host cephmon03
    Hostname 192.168.10.13
    User root
Host cephosd01
    Hostname 192.168.10.14
    User root
Host cephosd02
    Hostname 192.168.10.15
    User root
Host cephosd03
    Hostname 192.168.10.16
    User root
  • ホスト名の値をノードの IP アドレス に置き換え、 ユーザー の値をインストールに使用するリモート ユーザーに置き換えます。

SSH に root を使用しない場合

通常のユーザー インストールの場合は、リモート ユーザーがノードのすべてのストレージ上でパスワードなしの sudo を実行できるようにします。

echo -e 'Defaults:user !requiretty\nusername ALL = (root) NOPASSWD:ALL' | sudo tee /etc/sudoers.d/ceph
sudo chmod 440 /etc/sudoers.d/ceph

ユーザー名 は、~/.ssh/config ファイルで構成されたユーザーの名前に置き換えます。

Ansible インベントリと Playbook を構成する

管理ノードにCeph Clusterグループ変数ファイルを作成します。

cd ceph-ansible
cp group_vars/all.yml.sample  group_vars/all.yml
vim group_vars/all.yml

ファイルを編集して ceph クラスターを構成します

ceph_release_num: 15
cluster: ceph

# Inventory host group variables
mon_group_name: mons
osd_group_name: osds
rgw_group_name: rgws
mds_group_name: mdss
nfs_group_name: nfss
rbdmirror_group_name: rbdmirrors
client_group_name: clients
iscsi_gw_group_name: iscsigws
mgr_group_name: mgrs
rgwloadbalancer_group_name: rgwloadbalancers
grafana_server_group_name: grafana-server

# Firewalld / NTP
configure_firewall: True
ntp_service_enabled: true
ntp_daemon_type: chronyd

# Ceph packages
ceph_origin: repository
ceph_repository: community
ceph_repository_type: cdn
ceph_stable_release: octopus

# Interface options
monitor_interface: eth0
radosgw_interface: eth0

# DASHBOARD
dashboard_enabled: True
dashboard_protocol: http
dashboard_admin_user: admin
dashboard_admin_password: St0ngAdminp@ass

grafana_admin_user: admin
grafana_admin_password: St0ngAdminp@ass

クラスターとパブリック ネットワークに別のネットワークがある場合は、それに応じて定義します。

public_network: "192.168.3.0/24"
cluster_network: "192.168.4.0/24"

必要に応じて他のパラメータを設定します。

OSDデバイスを設定します。

3 つの OSD ノードがあり、それぞれに 1 つの raw ブロック デバイスがあります – /dev/sdb

$ lsblk 
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda       8:0    0 76.3G  0 disk 
├─sda1    8:1    0 76.2G  0 part /
├─sda14   8:14   0    1M  0 part 
└─sda15   8:15   0   64M  0 part /boot/efi
sdb       8:16   0   50G  0 disk 
sr0      11:0    1 1024M  0 rom  

使用する OSD Raw ブロック デバイスをリストします。

$ cp group_vars/osds.yml.sample group_vars/osds.yml
$ vim group_vars/osds.yml
copy_admin_key: true
devices:
  - /dev/sdb

新しい ceph ノードの Ansible インベントリを作成します。

vim hosts

インベントリ ファイルを適切に設定します。以下は私の在庫です。クラスター ノードにサービスをインストールする方法に合わせて、インベントリ グループを変更します。

# Ceph admin user for SSH and Sudo
[all:vars]
ansible_ssh_user=root
ansible_become=true
ansible_become_method=sudo
ansible_become_user=root

# Ceph Monitor Nodes
[mons]
cephmon01
cephmon02
cephmon03

# MDS Nodes
[mdss]
cephmon01
cephmon02
cephmon03

# RGW
[rgws]
cephmon01
cephmon02
cephmon03

# Manager Daemon Nodes
[mgrs]
cephmon01
cephmon02
cephmon03

# set OSD (Object Storage Daemon) Node
[osds]
cephosd01
cephosd02
cephosd03

# Grafana server
[grafana-server]
cephosd01

ステップ 3: Ceph 15 (Octopus) クラスターを CentOS|Rocky Linux|Alma Linux 8 にデプロイする

ceph-ansible プロジェクトのルートにある site.yml.sample というサンプル プレイブックをコピーして、プレイブック ファイルを作成します。

cp site.yml.sample site.yml 

プレイブックを実行します。

ansible-playbook -i hosts site.yml 

インストールが成功すると、ヘルスチェックで OK が返されるはずです。

...
TASK [show ceph status for cluster ceph] ***************************************************************************************************************
Sunday 10 May 2020  20:12:33 +0200 (0:00:00.721)       0:09:00.180 ************ 
ok: [cephmon01 -> cephmon01] => 
  msg:
  - '  cluster:'
  - '    id:     b64fac77-df30-4def-8e3c-1935ef9f0ef3'
  - '    health: HEALTH_OK'
  - ' '
  - '  services:'
  - '    mon: 3 daemons, quorum ceph-mon-02,ceph-mon-03,ceph-mon-01 (age 6m)'
  - '    mgr: ceph-mon-03(active, since 38s), standbys: ceph-mon-02, ceph-mon-01'
  - '    mds: cephfs:1 {0=ceph-mon-02=up:active} 2 up:standby'
  - '    osd: 3 osds: 3 up (since 4m), 3 in (since 4m)'
  - '    rgw: 3 daemons active (ceph-mon-01.rgw0, ceph-mon-02.rgw0, ceph-mon-03.rgw0)'
  - ' '
  - '  task status:'
  - '    scrub status:'
  - '        mds.ceph-mon-02: idle'
  - ' '
  - '  data:'
  - '    pools:   7 pools, 132 pgs'
  - '    objects: 215 objects, 9.9 KiB'
  - '    usage:   3.0 GiB used, 147 GiB / 150 GiB avail'
  - '    pgs:     0.758% pgs not active'
  - '             131 active+clean'
  - '             1   peering'
  - ' '
  - '  io:'
  - '    client:   3.5 KiB/s rd, 402 B/s wr, 3 op/s rd, 0 op/s wr'
  - ' '
....

これは、完了後のインストール出力のスクリーンショットです。

ステップ 4: CentOS|Rocky Linux|Alma Linux 8 での Ceph クラスターのインストールを検証する

クラスターノードの 1 つにログインし、いくつかの検証を行って、CentOS|Rocky Linux|Alma Linux 8 への Ceph Storage Cluster のインストールが成功したことを確認します。

$ ssh root@ceph-mon-01
# ceph -s
  cluster:
    id:     b64fac77-df30-4def-8e3c-1935ef9f0ef3
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum ceph-mon-02,ceph-mon-03,ceph-mon-01 (age 22m)
    mgr: ceph-mon-03(active, since 16m), standbys: ceph-mon-02, ceph-mon-01
    mds: cephfs:1 {0=ceph-mon-02=up:active} 2 up:standby
    osd: 3 osds: 3 up (since 20m), 3 in (since 20m)
    rgw: 3 daemons active (ceph-mon-01.rgw0, ceph-mon-02.rgw0, ceph-mon-03.rgw0)
 
  task status:
    scrub status:
        mds.ceph-mon-02: idle
 
  data:
    pools:   7 pools, 121 pgs
    objects: 215 objects, 11 KiB
    usage:   3.1 GiB used, 147 GiB / 150 GiB avail
    pgs:     121 active+clean

アクティブな MGR ノード上の Ceph ダッシュボードにアクセスできます。

group_vars/all.yml ファイルで設定された認証情報を使用してログインします。私にとってこれらは次のとおりです。

dashboard_admin_user: admin
dashboard_admin_password: St0ngAdminp@ass

その後、クラスターにさまざまなアクセス レベルを持つユーザーをさらに作成できます。

Grafana ダッシュボードは、 grafana-server グループ名に設定したノードでアクセスできます。サービスはデフォルトでポート 3000 をリッスンする必要があります。

管理コンソールにアクセスするように構成されたアクセス資格情報を使用します。

grafana_admin_user: admin
grafana_admin_password: St0ngAdminp@ass

2日目の作戦

ceph-ansible は、基本的な Day-2 操作を実行するために、infrastructur-playbooks ディレクトリに一連の Playbook を提供します。

  • OSDの追加
  • OSD の縮小
  • クラスターのパージ

参照:

  • OSDシナリオ
  • Ceph-ansible のドキュメント

Ceph に関するさらに役立つガイドを次に示します。

Ceph Object Storage での REST API アクセスの有効化と構成

Ceph Storage Cluster でのプールの作成

Ceph Object Gateway ストレージ用に AWS S3 CLI を設定する方法

Cephfs を使用した Kubernetes 用 Ceph 永続ストレージ

Ceph RBD を使用した Kubernetes の永続ストレージ

関連記事: