#author("2025-03-02T16:50:40+00:00","default:sysosa","sysosa") #author("2025-03-09T19:34:14+00:00","default:sysosa","sysosa") ''CephFS Monitors'' [[https://ceph.readthedocs.io/en/latest/start/intro/>+https://ceph.readthedocs.io/en/latest/start/intro/]]より #code(nonumber){{ Monitors: A Ceph Monitor (ceph-mon) maintains maps of the cluster state, including the monitor map, manager map, the OSD map, the MDS map, and the CRUSH map. These maps are critical cluster state required for Ceph daemons to coordinate with each other. Monitors are also responsible for managing authentication between daemons and clients. At least three monitors are normally required for redundancy and high availability. (deepL先生訳) モニタ: Cephモニタ(ceph-mon)は、モニタマップ、マネージャマップ、OSDマップ、データシートマップ、およびCRUSHマップなど、クラスタ状態のマップを保持します。 これらのマップは、Cephデーモンが互いに連携するために必要な重要なクラスタ状態です。 モニタは、デーモンとクライアント間の認証の管理も担当します。 通常、冗長性と高可用性のために少なくとも3つのモニタが必要です。 }} 各ノードの状態を監視しているノードっていう感じかな. っで運用時には最低3台必要みたい. &size(10){cephadmでは5つが既定のように作らてている}; 作り方は[[https://docs.ceph.com/en/latest/install/manual-deployment/#monitor-bootstrapping>+https://docs.ceph.com/en/latest/install/manual-deployment/#monitor-bootstrapping]] まずceph構成ファイル(/etc/ceph/ceph.conf)を作成します. &size(10){これは初めからは存在していないファイルです}; ただ、その前にクラスターの一意のID(fsid)が必要なので、それを uuidgen コマンドで用意します #code(nonumber){{ [root@ceph01 ~]# uuidgen c2d06c20-9197-40b4-a8c4-1a0604936ce8 [root@ceph01 ~]# }} っと得られたので、この「c2d06c20-9197-40b4-a8c4-1a0604936ce8」をここでのcephクラスターのIDとします. っで下記のようにceph構成ファイル(/etc/ceph/ceph.conf)を作る #code(nonumber){{ [root@ceph01 ~]# vi /etc/ceph/ceph.conf [global] fsid = c2d06c20-9197-40b4-a8c4-1a0604936ce8 mon_initial_members = ceph01 mon_host = 192.168.0.47 public_network = 192.168.0.0/24 cluster_network = 10.10.10.0/24 [root@ceph01 ~]# }} その後クラスターの「キーリング」を作る. 1.まず枠を用意します #code(nonumber){{ [root@ceph01 ~]# ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *' creating /tmp/ceph.mon.keyring [root@ceph01 ~]# cat /tmp/ceph.mon.keyring [mon.] key = AQChgcRnjeyWFBAAT3xVV6rai3ImWe52WUEzUA== caps mon = "allow *" [root@ceph01 ~]# }} 2−1.次にclient.adminユーザ名目で管理者権限を持つ「管理者キーリング」を作る #code(nonumber){{ [root@ceph01 ~]# ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *' creating /etc/ceph/ceph.client.admin.keyring [root@ceph01 ~]# cat /etc/ceph/ceph.client.admin.keyring [client.admin] key = AQDbgcRn4KXBDxAA/m4UAFVbQcbeQdjTg01XaA== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" caps osd = "allow *" [root@ceph01 ~]# ls -l /etc/ceph/ceph.client.admin.keyring -rw-------. 1 root root 151 Mar 3 01:05 /etc/ceph/ceph.client.admin.keyring [root@ceph01 ~]# chown ceph. /etc/ceph/ceph.client.admin.keyring [root@ceph01 ~]# ls -l /etc/ceph/ceph.client.admin.keyring -rw-------. 1 ceph ceph 151 Mar 3 01:05 /etc/ceph/ceph.client.admin.keyring [root@ceph01 ~]# }} 2−2.client.bootstrap-osdユーザ名目でbootstrap向けの「bootstrap-osd キーリング」を用意します #code(nonumber){{ [root@ceph01 ~]# ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r' creating /var/lib/ceph/bootstrap-osd/ceph.keyring [root@ceph01 ~]# cat /var/lib/ceph/bootstrap-osd/ceph.keyring [client.bootstrap-osd] key = AQApgsRnM8CXIRAAUDQ0xlYmGQeBDNjOdRlKvA== caps mgr = "allow r" caps mon = "profile bootstrap-osd" [root@ceph01 ~]# }} 2−1と2−2で作ったキーを1.の「枠」に組み込みます #code(nonumber){{ [root@ceph01 ~]# ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring importing contents of /etc/ceph/ceph.client.admin.keyring into /tmp/ceph.mon.keyring [root@ceph01 ~]# ceph-authtool /tmp/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring importing contents of /var/lib/ceph/bootstrap-osd/ceph.keyring into /tmp/ceph.mon.keyring [root@ceph01 ~]# cat /tmp/ceph.mon.keyring [mon.] key = AQChgcRnjeyWFBAAT3xVV6rai3ImWe52WUEzUA== caps mon = "allow *" [client.admin] key = AQDbgcRn4KXBDxAA/m4UAFVbQcbeQdjTg01XaA== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" caps osd = "allow *" [client.bootstrap-osd] key = AQApgsRnM8CXIRAAUDQ0xlYmGQeBDNjOdRlKvA== caps mgr = "allow r" caps mon = "profile bootstrap-osd" [root@ceph01 ~]# }} その後に「モニターマップ」を作る #code(nonumber){{ [root@ceph01 ~]# monmaptool --create --add mgr 192.168.0.47 --fsid c2d06c20-9197-40b4-a8c4-1a0604936ce8 /tmp/monmap monmaptool: monmap file /tmp/monmap setting min_mon_release = quincy monmaptool: set fsid to c2d06c20-9197-40b4-a8c4-1a0604936ce8 monmaptool: writing epoch 0 to /tmp/monmap (1 monitors) [root@ceph01 ~]# file /tmp/monmap /tmp/monmap: data [root@ceph01 ~]# }} 準備できた「キーリング」と「モニターマップ」をモニターデーモンに組み込みます #code(nonumber){{ [root@ceph01 ~]# ls -l /tmp/ceph.mon.keyring -rw-------. 1 root root 357 Mar 3 01:08 /tmp/ceph.mon.keyring [root@ceph01 ~]# chown ceph. /tmp/ceph.mon.keyring [root@ceph01 ~]# ls -l /tmp/ceph.mon.keyring -rw-------. 1 ceph ceph 357 Mar 3 01:08 /tmp/ceph.mon.keyring [root@ceph01 ~]# [root@ceph01 ~]# sudo -u ceph mkdir /var/lib/ceph/mon/ceph-ceph01 (「/var/lib/ceph/mon/{cluster-name}-{hostname}」形式) [root@ceph01 ~]# sudo -u ceph ceph-mon --cluster ceph --mkfs -i ceph01 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring (「/var/lib/ceph/mon/ceph-ceph01」フォルダが作られて、その中に「ceph-ceph01/store.db」コンテンツが作られます) [root@ceph01 ~]# }} っでモニターデーモンを起動します. デーモンファイル「ceph-mon@.service」を拝見するとExecStartで「%i」が使われているので「ceph-mon@ceph01」として有効にする. #code(nonumber){{ [root@ceph01 ~]# cat /usr/lib/systemd/system/ceph-mon@.service : ExecStart=/usr/bin/ceph-mon -f --cluster ${CLUSTER} --id %i --setuser ceph --setgroup ceph : [root@ceph01 ~]# systemctl enable ceph-mon@ceph01.service Created symlink /etc/systemd/system/ceph-mon.target.wants/ceph-mon@ceph01.service → /usr/lib/systemd/system/ceph-mon@.service. [root@ceph01 ~]# systemctl start ceph-mon@ceph01.service }} &size(10){もしエラーが発生したら調整後「systemctl reset-failed ceph-mon@mgr.service」を実施してから起動させます}; 動作確認 #code(nonumber){{ [root@ceph01 ~]# ceph -s cluster: id: c2d06c20-9197-40b4-a8c4-1a0604936ce8 health: HEALTH_WARN mon is allowing insecure global_id reclaim services: mon: 1 daemons, quorum ceph01 (age 12s) mgr: no daemons active osd: 0 osds: 0 up, 0 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 0 B used, 0 B / 0 B avail pgs: [root@ceph01 ~]# }} あ「mon is allowing insecure global_id reclaim」と出る. これについては後述 ***Monitorを追加する [#ccd3a2be] Monitorは奇数個必要です。ここでは ceph01とceph02,ceph-osd1をmonitor対応にします 事前に「/etc/ceph/ceph.conf」に全てのMonitorを登録してもいいのですが、 後に追加の事もあり得るのでその方法を示す. 参照先[[https://docs.ceph.com/en/latest/rados/operations/add-or-rm-mons/>+https://docs.ceph.com/en/latest/rados/operations/add-or-rm-mons/]] はじめのMonitor(ceph01)の「/etc/ceph/ceph.conf」と「/etc/ceph/ceph.client.admin.keyring」を追加Monitor(ceph02)にコピーします &size(10){事前にcephパッケージのインストールは済んでいることとします}; #code(nonumber){{ [root@ceph01 ~]# scp /etc/ceph/ceph.conf root@ceph02:/etc/ceph/ceph.conf [root@ceph01 ~]# scp /etc/ceph/ceph.client.admin.keyring root@ceph02:/etc/ceph/ceph.client.admin.keyring }} コピー後、追加するMonitorノード(ceph02)にて下記を実行します #code(nonumber){{ [root@ceph02 ~]# id ceph uid=167(ceph) gid=167(ceph) groups=167(ceph) [root@ceph02 ~]# ls -l /etc/ceph/ total 12 -rw-------. 1 root root 151 Mar 3 01:23 ceph.client.admin.keyring -rw-r--r--. 1 root root 170 Mar 3 01:23 ceph.conf -rw-r--r--. 1 root root 92 Feb 1 09:09 rbdmap [root@ceph02 ~]# chown ceph. /etc/ceph/* [root@ceph02 ~]# sudo -u ceph mkdir /var/lib/ceph/mon/ceph-ceph02 [root@ceph02 ~]# ceph auth get mon. -o /tmp/key-filename [root@ceph02 ~]# cat /tmp/key-filename [mon.] key = AQChgcRnjeyWFBAAT3xVV6rai3ImWe52WUEzUA== caps mon = "allow *" [root@ceph02 ~]# ceph mon getmap -o /tmp/map-filename got monmap epoch 1 [root@ceph02 ~]# sudo -u ceph ceph-mon -i ceph02 --mkfs --monmap /tmp/map-filename --keyring /tmp/key-filename [root@ceph02 ~]# sudo -u ceph ceph-mon -i ceph02 --public-addr 192.168.0.48 }} これで2つめのmonitorが起動します. っで三つ目を作ります 同じように ceph-osd1 にもMonitorを導入します. これでmonitorは3つになります. #code(nonumber){{ [root@ceph01 ~]# scp /etc/ceph/ceph.conf root@ceph-osd1:/etc/ceph/ceph.conf [root@ceph01 ~]# scp /etc/ceph/ceph.client.admin.keyring root@ceph-osd1:/etc/ceph/ceph.client.admin.keyring }} その後上記と同じように設定します #code(nonumber){{ ssh -l root ceph-osd1 chown ceph. /etc/ceph/* sudo -u ceph mkdir /var/lib/ceph/mon/ceph-ceph-osd1 ceph auth get mon. -o /tmp/key-filename ceph mon getmap -o /tmp/map-filename sudo -u ceph ceph-mon -i ceph-osd1 --mkfs --monmap /tmp/map-filename --keyring /tmp/key-filename sudo -u ceph ceph-mon -i ceph-osd1 --public-addr 192.168.0.49 }} このあと、どのMonitorでもいいのだが、「ceph -s」とすると下記のようになる #code(nonumber){{ [root@ceph01 ~]# ceph -s cluster: id: c2d06c20-9197-40b4-a8c4-1a0604936ce8 health: HEALTH_WARN mons are allowing insecure global_id reclaim services: mon: 3 daemons, quorum ceph01,ceph02,ceph-osd1 (age 1.13904s) <--- monitorが3になりました mgr: no daemons active osd: 0 osds: 0 up, 0 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 0 B used, 0 B / 0 B avail pgs: [root@ceph01 ~]# }} 3つ揃えても「mons are allowing insecure global_id reclaim」と表示されてしまう. これは #code(nonumber){{ [root@ceph01 ~]# ceph config set mon mon_warn_on_insecure_global_id_reclaim_allowed false [root@ceph01 ~]# ceph config set mon mon_warn_on_insecure_global_id_reclaim false [root@ceph01 ~]# ceph -s cluster: id: c2d06c20-9197-40b4-a8c4-1a0604936ce8 health: HEALTH_OK : [root@ceph01 ~]# }} で逃げられます. そして全てのMonitorノードの /etc/ceph/ceph.conf を書き換える そして全てのMonitorノード(ceph01,ceph02,ceph-osd1)の /etc/ceph/ceph.conf を書き換える #code(nonumber){{ [global] fsid = c2d06c20-9197-40b4-a8c4-1a0604936ce8 mon_initial_members = ceph01,ceph02,ceph-osd1 <-- ここ mon_host = 192.168.0.47,192.168.0.48,192.168.0.49 <-- ここ public_network = 192.168.0.0/24 cluster_network = 10.10.10.0/24 }} 一応全monitorノードでのsystemctlを示すと目下、こんな感じ #code(nonumber){{ [root@ceph01 ~]# systemctl list-unit-files | grep ceph var-lib-ceph.mount generated - ceph-crash.service enabled enabled ceph-mgr@.service indirect disabled ceph-mon@.service indirect disabled ceph-mgr.target enabled enabled ceph-mon.target enabled enabled ceph.target enabled enabled [root@ceph01 ~]# [root@ceph02 ~]# systemctl list-unit-files | grep ceph var-lib-ceph.mount generated - ceph-crash.service enabled enabled ceph-mon@.service disabled disabled ceph-mon.target enabled enabled ceph.target enabled enabled [root@ceph02 ~]# [root@ceph-osd1 ~]# systemctl list-unit-files | grep ceph var-lib-ceph.mount generated - ceph-crash.service enabled enabled ceph-mon@.service disabled disabled ceph-mon.target enabled enabled ceph.target enabled enabled [root@ceph-osd1 ~]# }} &color(white,blue){留意}; 一度Monitorとして追加登録したら、そのMonitorを/etc/ceph/ceph.confに登録すること。 それをしないでMonitoを再起動するとcephにアクセスできなくなる 修正方法はこちら[[https://docs.ceph.com/en/latest/rados/operations/add-or-rm-mons/#removing-monitors-from-an-unhealthy-cluster>+https://docs.ceph.com/en/latest/rados/operations/add-or-rm-mons/#removing-monitors-from-an-unhealthy-cluster]] #code(nonumber){{ systemctl stop ceph-mon@mgr sudo -u ceph ceph-mon -i mgr --extract-monmap /tmp/monmap sudo -u ceph monmaptool /tmp/monmap --rm mon1 sudo -u ceph ceph-mon -i a --inject-monmap /tmp/monmap systemctl start ceph-mon@mgr }}