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 の永続ストレージ