#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
}}
1

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS