##はじめに
この記事では、タイトルのとおり現時点(2021.01)で最新である__ceph(octopus)__の構築を目的としています。
また、自分で構築した手順の備忘録を兼ねているので、細かいところで間違いなどあるかもしれません。
基本的には公式のDOCUMENTATIONが必要なことを全て網羅しているので一読しておくことをお勧めします。
Linuxの知識もある程度必要になるので他サイトや書籍などで事前に基本は押さえておくとよいでしょう。
準備編等は関連記事を参照してください。
##関連記事
Ceph(Octopus)の構築(準備編 ハードウェア)
Ceph(Octopus)の構築(準備編 ソフトウェア)
Ceph(Octopus)の構築(設定編 共通)
Ceph(Octopus)の構築(設定編 ブートストラップ)
Ceph(Octopus)の構築(設定編 mon/mgr/osd)
Ceph(Octopus)の構築(設定編 cephFS/mds)
Ceph(Octopus)の構築(設定編 Crush Map) この記事
##Crush Mapの編集
cephの基本的な動作ですが、デフォルトではレプリケーションが「3」に設定されています。格納されたデータをオブジェクト単位に分割し、そのオブジェクトを合計3つのOSDへ配置するということになります。
Crush Mapがデフォルトのままだと、全てのOSDからランダムに3つが選択されてしまいます。3つとも同一のL2SW配下にあるOSDが選ばれてしまうとL2SWの故障でデータへのアクセスができなくなってしまいます。
今回はL2SWを3つに分けており、障害時にできるだけ止まらないようにするため、OSDを3グループに分けるよう編集を行います。
現状はDashboardの[Cluster]>[CRUSH map]を見ると全てのOSDが一列であることが確認できると思います。
なお、レプリケーション数は3のままとします。
Crush Mapの取り出し(バイナリデータ)
cephadm shell
ceph osd getcrushmap -o /tmp/crush
Crush Mapの変換(バイナリからテキストへ)
cephadm shell
crushtool -d /tmp/crush -o /tmp/crush.txt
Crush Mapの変換(テキストからバイナリへ)
cephadm shell
crushtool -c /tmp/crush.txt -o /tmp/crush.new
Crush Mapのアップロード
cephadm shell
ceph osd setcrushmap -i /tmp/crush.new
Crush Mapの反映
cephadm shell
ceph -w
##Crush Mapのサンプル
# begin crush map
tunable choose_local_tries 0
tunable choose_local_fallback_tries 0
tunable choose_total_tries 50
tunable chooseleaf_descend_once 1
tunable chooseleaf_vary_r 1
tunable chooseleaf_stable 1
tunable straw_calc_version 1
tunable allowed_bucket_algs 54
# devices
device 0 osd.0 class hdd
device 1 osd.1 class hdd
device 2 osd.2 class hdd
device 3 osd.3 class hdd
device 4 osd.4 class hdd
device 5 osd.5 class hdd
device 6 osd.6 class hdd
device 7 osd.7 class hdd
device 8 osd.8 class hdd
device 9 osd.9 class hdd
device 10 osd.10 class hdd
device 11 osd.11 class hdd
device 12 osd.12 class hdd
device 13 osd.13 class hdd
device 14 osd.14 class hdd
# types
type 0 osd
type 1 host
type 2 chassis
type 3 rack
type 4 row
type 5 pdu
type 6 pod
type 7 room
type 8 datacenter
type 9 zone
type 10 region
type 11 root
# buckets
host ceph-mon01 {
id -3 # do not change unnecessarily
id -4 class hdd # do not change unnecessarily
# weight 1.000
alg straw2
hash 0 # rjenkins1
item osd.0 weight 1.000
}
host ceph-mds01 {
id -5 # do not change unnecessarily
id -6 class hdd # do not change unnecessarily
# weight 1.000
alg straw2
hash 0 # rjenkins1
item osd.1 weight 1.000
}
host ceph-osd01 {
id -7 # do not change unnecessarily
id -8 class hdd # do not change unnecessarily
# weight 1.000
alg straw2
hash 0 # rjenkins1
item osd.2 weight 1.000
}
host ceph-osd02 {
id -9 # do not change unnecessarily
id -10 class hdd # do not change unnecessarily
# weight 1.000
alg straw2
hash 0 # rjenkins1
item osd.3 weight 1.000
}
host ceph-mon11 {
id -11 # do not change unnecessarily
id -12 class hdd # do not change unnecessarily
# weight 1.000
alg straw2
hash 0 # rjenkins1
item osd.4 weight 1.000
}
host ceph-mds11 {
id -13 # do not change unnecessarily
id -14 class hdd # do not change unnecessarily
# weight 1.000
alg straw2
hash 0 # rjenkins1
item osd.5 weight 1.000
}
host ceph-osd11 {
id -15 # do not change unnecessarily
id -16 class hdd # do not change unnecessarily
# weight 1.000
alg straw2
hash 0 # rjenkins1
item osd.6 weight 1.000
}
host ceph-osd12 {
id -17 # do not change unnecessarily
id -18 class hdd # do not change unnecessarily
# weight 1.000
alg straw2
hash 0 # rjenkins1
item osd.7 weight 1.000
}
host ceph-osd13 {
id -19 # do not change unnecessarily
id -20 class hdd # do not change unnecessarily
# weight 1.000
alg straw2
hash 0 # rjenkins1
item osd.8 weight 1.000
}
host ceph-mon21 {
id -21 # do not change unnecessarily
id -22 class hdd # do not change unnecessarily
# weight 1.000
alg straw2
hash 0 # rjenkins1
item osd.9 weight 1.000
}
host ceph-mds21 {
id -23 # do not change unnecessarily
id -24 class hdd # do not change unnecessarily
# weight 1.000
alg straw2
hash 0 # rjenkins1
item osd.10 weight 1.000
}
host ceph-osd21 {
id -25 # do not change unnecessarily
id -26 class hdd # do not change unnecessarily
# weight 1.000
alg straw2
hash 0 # rjenkins1
item osd.11 weight 1.000
}
host ceph-osd22 {
id -27 # do not change unnecessarily
id -28 class hdd # do not change unnecessarily
# weight 1.000
alg straw2
hash 0 # rjenkins1
item osd.12 weight 1.000
}
host ceph-osd23 {
id -29 # do not change unnecessarily
id -30 class hdd # do not change unnecessarily
# weight 1.000
alg straw2
hash 0 # rjenkins1
item osd.13 weight 1.000
}
host ceph-osd03 {
id -31 # do not change unnecessarily
id -32 class hdd # do not change unnecessarily
# weight 1.000
alg straw2
hash 0 # rjenkins1
item osd.14 weight 1.000
}
#メルキオール
rack Melchior {
id -33
id -34 class hdd
# weight 5.000
alg straw2
hash 0 # rjenkins1
item ceph-mon01 weight 1.000
item ceph-mds01 weight 1.000
item ceph-osd01 weight 1.000
item ceph-osd02 weight 1.000
item ceph-osd03 weight 1.000
}
#バルタザール
rack Balthasar {
id -35
id -36 class hdd
# weight 5.000
alg straw2
hash 0 # rjenkins1
item ceph-mon11 weight 1.000
item ceph-mds11 weight 1.000
item ceph-osd11 weight 1.000
item ceph-osd12 weight 1.000
item ceph-osd13 weight 1.000
}
#カスパー
rack Casper {
id -37
id -38 class hdd
# weight 5.000
alg straw2
hash 0 # rjenkins1
item ceph-mon21 weight 1.000
item ceph-mds21 weight 1.000
item ceph-osd21 weight 1.000
item ceph-osd22 weight 1.000
item ceph-osd23 weight 1.000
}
root default {
id -1 # do not change unnecessarily
id -2 class hdd # do not change unnecessarily
# weight 15.000
alg straw2
hash 0 # rjenkins1
item Melchior weight 5.000
item Balthasar weight 5.000
item Casper weight 5.000
}
# rules
rule replicated_rule {
id 0
type replicated
min_size 1
max_size 10
step take default
step choose firstn 0 type rack
step chooseleaf firstn 1 type host
step emit
}
# end crush map
##dashboardの確認
OSDがrack単位でグループ化され、階層構造になっていることが確認できます。上記Crush Mapを適用すると、各グループから1つずつOSDを選ぶようになります。Placement Groupを確認しても、各グループから必ず1つずつ選択されていることが分かります。
##おわりに
もう少し詳しく書く予定です・・・