本家様 https://ceph.io/
オブジェクトストレージ, ブロックストレージ, ファイルシステムを提供するオープンソースなSoftware-Defined Storage Platform. クラスターファイルシステムです.
オブジェクトストレージ:Hadoopやamazon S3なすとレージ, ブロックストレージ: /dev/vda, /dev/vdbとか提供します. ファイルシステム: posix準拠なファイルシステム
開発者たちは今現在IBMにいるそうです
ここではこのうち Ceph を使ったPOSIX互換ファイルシステム CephFS を取り上げます. POSIXアクセス制御リスト(ACL)のサポートが嬉しい
Cephにはバージョン名があって下記の通りになってます ubuntuっぽい
https://docs.ceph.com/docs/master/releases/general/, https://docs.ceph.com/en/latest/releases/
Release name | Initial release | Latest | End of life(24.11.28時点) | 備考 |
Squid | 2024-09-26 | 19.2.1 | 2026-09-19(estimated) | |
Reef | 2023-08-07 | 18.2.4 | 2025-08-01(estimated) | IBM Storage Ceph 7 |
Quincy | 2022-04-19 | 17.2.8 | 2025-01-13 | IBM Storage Ceph 6 |
Pacific | 2021-03-31 | 16.2.31 | 2024-03-04 | IBM Storage Ceph 5 |
Octopus | 2020-03-23 | 15.2.17 | 2022-08-09 | |
Nautilus | 2019-03-19 | 14.2.22 | 2021-06-30 | Red Hat Ceph Storage 4 |
Mimic | 2018-06-01 | 13.2.10 | 2020-07-22 | |
Luminous | 2017-08-01 | 12.2.13 | 2020-03-01 | Red Hat Ceph Storage 3 |
*毎年メジャーバージョンアップがある
ここでは「Squid」を導入します. 導入方法は docker/podmnanの上に構築する cephadm を使うのが推奨されてますが、ここではOSの上に直に作っていきます.
cephはmonitor, manager, osd, metadata らと機能を提供するために各種に特化した作りこみが必要です.
っで構成はこんな感じで.
ホスト名 | 役目 | IPアドレス[public network] | cluster network | OS | ストレージ | osd |
ceph01 | Manager Monitor Metadata Server | 192.168.0.47/24 | Rockylinux9.2 | os(16GB) /var/lib/ceph(8GB) | ||
ceph02 | Manager Monitor Metadata Server | 192.168.0.48/24 | os(16GB) /var/lib/ceph(8GB) | |||
ceph-osd1 | Monitor OSDs | 192.168.0.49/24 | 10.10.10.49/24 | os(16GB) /var/lib/ceph(8GB) | OSD(50GB:SSD:meta) OSD(50GB:HDD:data) | |
ceph-osd2 | OSDs | 192.168.0.50/24 | 10.10.10.50/24 | os(16GB) | OSD(50GB:SSD:meta) OSD(50GB:HDD:data)+OSD(50GB:HDD:data)+OSD(40GB:SSD:block.db)+SSD(20GB:SSD:block.wal) | |
ceph-osd3 | OSDs | 192.168.0.51/24 | 10.10.10.51/24 | os(16GB) | osd(50GB:SSD:meta) OSD(50GB:HDD:data)+OSD(50GB:HDD:data)+OSD(50GB:HDD:data)+OSD(60GB:SSD:block.db) |
cephはyum/dnfでインストール可能で関係するすべてのノードに下記リポジトリを加えておきます
参照 https://docs.ceph.com/en/latest/install/get-packages/#rhel
cat << _EOF_ > /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for \$basearch
baseurl=https://download.ceph.com/rpm-squid/el9/\$basearch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-squid/el9/noarch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
_EOF_
cephリポジトリの中身詳細 Ceph/repository
その後に各役目毎に設定作業を行います
cephfsをマウントしたceph clientをexportすれば、それでnfsサーバが用意できるが、ceph側で用意しているnfs moduleでnfsサーバを作ってみる.
cephでは NFS-Ganesha を経由して提供している.
[root@ceph01 ~]# dnf install centos-release-nfs-ganesha5.noarch
[root@ceph01 ~]# dnf list available --disablerepo=* --enablerepo=centos-nfs-ganesha-5
:
nfs-ganesha-ceph.x86_64 5.9-1.el9s centos-nfs-ganesha-5
:
[root@ceph01 ~]# dnf install libcephfs2 nfs-ganesha nfs-ganesha-ceph
既設のnfsサービスを停止します
[root@ceph01 ~]# systemctl stop nfs-server.service
[root@ceph01 ~]# systemctl disable nfs-server.service
(nfsなのでrpcbindは動かします)
[root@ceph01 ~]# systemctl enable rpcbind --now
設定ファイルは「/etc/ganesha/ganesha.conf」でceph向けのsampleが「/etc/ganesha/ceph.conf」なので上書きとかで差し替えます
[root@ceph01 ~]# mv /etc/ganesha/ganesha.conf /etc/ganesha/ganesha.conf.orig
[root@ceph01 ~]# cp /etc/ganesha/ceph.conf /etc/ganesha/ganesha.conf
[root@ceph01 ~]# vi /etc/ganesha/ganesha.conf
NFS_CORE_PARAM
{
Enable_NLM = false;
Enable_RQUOTA = false;
Protocols = 4;
}
NFSv4
{
#RecoveryBackend = rados_ng;
Minor_Versions = 1,2;
}
MDCACHE {
Dir_Chunk = 0;
}
EXPORT
{
Export_ID=100;
Protocols = 4;
Transports = TCP;
Path = /;
Pseudo = /emfs;
Access_Type = RW;
Attr_Expiration_Time = 0;
Squash = root_squash;
SecType = sys;
FSAL {
Name = CEPH;
User_Id = "admin";
Secret_Access_Key = "「ceph auth get-key client.admin」の値";
Ceph_Cluster = "ceph";
}
}
CEPH
{
Ceph_Conf = /etc/ceph/ceph.conf;
}
[root@ceph01 ~]# mkdir /var/run/ganesha/ /var/run/ganesha
ここで「systemctl restart nfs-ganesha.service」で動く予定なのだが、、動かない。
代わりに「/usr/bin/ganesha.nfsd -F」では動いた. どこの問題は見えないが...
「/var/log/ganesha/ganesha.log」を見るとプログラムがクラッシュしている..
素直にネイティブ接続で繋いだ方がよさげ。しかもネイティブ接続の方がパフォがいいみたい
nfs同様、他のノードでcephfsをmountしてsmbを稼働させることが出来るが、ここではceph側でsmbを動かしてみる.
[root@ceph01 ~]# ceph mgr module enable smb --force
[root@ceph01 ~]# ceph mgr module ls
:
smb on
:
[root@ceph01 ~]#
どうもorchestratorが必要なようで直置きスタイルでは ceph から smb 制御は無理みたい
「ceph -s」の実行で「Module 'restful' has failed dependency: No module named 'pecan'」と表示されたらCeph Monitorノードに追加で下記パッケージをインストールする.
[root@ms ~]# pip3 install pecan cherrypy werkzeug
CentOS8 stream
rpm -Uvh https://download.ceph.com/rpm-octopus/el8/noarch/ceph-release-1-1.el8.noarch.rpm
yum install centos-release-openstack-train -y
yum install epel-release snappy gdisk gperftools-libs -y
yum install leveldb -y
yum install ceph -y
[root@ceph-mgr ~]# ceph -s
cluster:
id: c2d06c20-9197-40b4-a8c4-1a0604936ce8
health: HEALTH_WARN
2 mgr modules have recently crashed
とHEALTH_WARNメッセージがあるなら「ceph crash ls」
[root@ceph-mgr ~]# ceph crash ls
ID ENTITY NEW
2024-01-04T05:51:12.262993Z_71368c30-4c13-4eaf-bdae-c0d66307d784 mgr.ceph-mgr *
2024-01-04T05:51:14.240766Z_52dbb01e-f34f-46b7-956a-71b2f83a7e7f mgr.ceph-mgr *
[root@ceph-mgr ~]# ceph crash rm 2024-01-04T05:51:12.262993Z_71368c30-4c13-4eaf-bdae-c0d66307d784