Ceph Quincy : クラスターの設定 #12022/06/14 |
分散ファイルシステム Ceph をインストールして、ストレージクラスターを構成します。
当例では 3 台 のノードでクラスターを構成します。
3 台 のノードにはそれぞれ空きブロックデバイスがあることが前提です。 (当例では [/dev/sdb] を使用) | +----------------------------+----------------------------+ | | | |10.0.0.51 |10.0.0.52 |10.0.0.53 +-----------+-----------+ +-----------+-----------+ +-----------+-----------+ | [node01.srv.world] | | [node02.srv.world] | | [node03.srv.world] | | Object Storage +----+ Object Storage +----+ Object Storage | | Monitor Daemon | | | | | | Manager Daemon | | | | | +-----------------------+ +-----------------------+ +-----------------------+ |
[1] | [Monitor Daemon] を設定するノード (以下、管理ノードと表記) から各ノードへ SSH 鍵ペア認証ができるよう設定しておきます。 当例では [root] ユーザーで、パスフレーズ無の鍵ペアを設定します。 一般ユーザーを使用する場合は Sudo の設定が必要です。 また、SSH 鍵ペアのパスフレーズを設定する場合は SSH Agent の設定が必要です。 各ノードに SSH 鍵を設定した後は、パスワード認証での SSH ログインは禁止しておいた方がよいでしょう。 |
[root@node01 ~]# ssh-keygen -q -N "" Enter file in which to save the key (/root/.ssh/id_rsa):
[root@node01 ~]#
vi ~/.ssh/config # 新規作成 (各ノードと接続ユーザーを定義) Host node01 Hostname node01.srv.world User root Host node02 Hostname node02.srv.world User root Host node03 Hostname node03.srv.world User root
[root@node01 ~]#
chmod 600 ~/.ssh/config
# 各ノードに公開鍵を転送 [root@node01 ~]# ssh-copy-id node01 root@node01.srv.world's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'node01'" and check to make sure that only the key(s) you wanted were added.[root@node01 ~]# ssh-copy-id node02 [root@node01 ~]# ssh-copy-id node03 |
[2] | 管理ノードから各ノードへ Ceph をインストールします。 |
[root@node01 ~]# for NODE in node01 node02 node03
do
ssh $NODE "dnf -y install centos-release-ceph-quincy; dnf -y install ceph"
done
|
[3] | 管理ノードで [Monitor Daemon], [Manager Daemon] の設定をします。 |
[root@node01 ~]#
uuidgen fe4fb100-abec-488d-93fe-71b7ae7d9b81 # 設定ファイル新規作成 # 設定ファイル名 ⇒ (任意のクラスター名).conf # 当例ではデフォルトのクラスター名 [ceph] で設定 ⇒ [ceph.conf] [root@node01 ~]# vi /etc/ceph/ceph.conf [global] # 監視用のクラスターネットワークを指定 cluster network = 10.0.0.0/24 # パブリックネットワークを指定 public network = 10.0.0.0/24 # 先に生成した UUID を指定 fsid = fe4fb100-abec-488d-93fe-71b7ae7d9b81 # Monitor Daemon 設定ホストの IP アドレスを指定 mon host = 10.0.0.51 # Monitor Daemon 設定ホストのホスト名を指定 mon initial members = node01 osd pool default crush rule = -1 # mon.(ノード名) [mon.node01] # Monitor Daemon のホスト名を指定 host = node01 # Monitor Daemon の IP アドレス mon addr = 10.0.0.51 # プールの削除を許可する mon allow pool delete = true # クラスター管理用のシークレットキーを生成 [root@node01 ~]# ceph-authtool --create-keyring /etc/ceph/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *' creating /etc/ceph/ceph.mon.keyring # クラスター管理者用のキーを生成 [root@node01 ~]# 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@node01 ~]# 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 # 生成したキーを [ceph.mon.keyring] にインポート [root@node01 ~]# ceph-authtool /etc/ceph/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring importing contents of /etc/ceph/ceph.client.admin.keyring into /etc/ceph/ceph.mon.keyring [root@node01 ~]# ceph-authtool /etc/ceph/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring importing contents of /var/lib/ceph/bootstrap-osd/ceph.keyring into /etc/ceph/ceph.mon.keyring # モニターマップを生成 [root@node01 ~]# FSID=$(grep "^fsid" /etc/ceph/ceph.conf | awk {'print $NF'}) [root@node01 ~]# NODENAME=$(grep "^mon initial" /etc/ceph/ceph.conf | awk {'print $NF'}) [root@node01 ~]# NODEIP=$(grep "^mon host" /etc/ceph/ceph.conf | awk {'print $NF'}) [root@node01 ~]# monmaptool --create --add $NODENAME $NODEIP --fsid $FSID /etc/ceph/monmap monmaptool: monmap file /etc/ceph/monmap setting min_mon_release = octopus monmaptool: set fsid to fe4fb100-abec-488d-93fe-71b7ae7d9b81 monmaptool: writing epoch 0 to /etc/ceph/monmap (1 monitors) # Monitor Daemon 用データディレクトリ作成 # ディレクトリ名 ⇒ (クラスター名)-(ノード名) [root@node01 ~]# mkdir /var/lib/ceph/mon/ceph-node01
# Monitor Daemon に生成したモニターマップとキーを関連付け # --cluster (クラスター名) [root@node01 ~]# ceph-mon --cluster ceph --mkfs -i $NODENAME --monmap /etc/ceph/monmap --keyring /etc/ceph/ceph.mon.keyring
[root@node01 ~]#
chown ceph. /etc/ceph/ceph.* [root@node01 ~]# chown -R ceph. /var/lib/ceph/mon/ceph-node01 /var/lib/ceph/bootstrap-osd [root@node01 ~]# systemctl enable --now ceph-mon@$NODENAME
# Messenger v2 Protocol 有効化 [root@node01 ~]# ceph mon enable-msgr2
[root@node01 ~]#
ceph config set mon auth_allow_insecure_global_id_reclaim false
# Placement Groups オートスケール モジュール有効化 [root@node01 ~]# ceph mgr module enable pg_autoscaler
# Manager Daemon 用データディレクトリ作成 # ディレクトリ名 ⇒ (クラスター名)-(ノード名) [root@node01 ~]# mkdir /var/lib/ceph/mgr/ceph-node01
# 認証用キーを生成 [root@node01 ~]# ceph auth get-or-create mgr.$NODENAME mon 'allow profile mgr' osd 'allow *' mds 'allow *' [mgr.node01] key = AQAUNahiRCAHKhAAgvEu1zj3Y3OaIPtHPCXW9A==[root@node01 ~]# ceph auth get-or-create mgr.node01 > /etc/ceph/ceph.mgr.admin.keyring [root@node01 ~]# cp /etc/ceph/ceph.mgr.admin.keyring /var/lib/ceph/mgr/ceph-node01/keyring [root@node01 ~]# chown ceph. /etc/ceph/ceph.mgr.admin.keyring [root@node01 ~]# chown -R ceph. /var/lib/ceph/mgr/ceph-node01 [root@node01 ~]# systemctl enable --now ceph-mgr@$NODENAME |
[4] | 管理ノードで、SELinux を有効にしている場合は、ポリシーの変更が必要です。 |
[root@node01 ~]#
vi cephmon.te # 以下の内容で新規作成 module cephmon 1.0; require { type ceph_t; type ptmx_t; type initrc_var_run_t; type sudo_exec_t; type chkpwd_exec_t; type shadow_t; class file { execute execute_no_trans lock getattr map open read }; class capability { audit_write sys_resource }; class process setrlimit; class netlink_audit_socket { create nlmsg_relay }; class chr_file getattr; } #============= ceph_t ============== allow ceph_t initrc_var_run_t:file { lock open read }; allow ceph_t self:capability { audit_write sys_resource }; allow ceph_t self:netlink_audit_socket { create nlmsg_relay }; allow ceph_t self:process setrlimit; allow ceph_t sudo_exec_t:file { execute execute_no_trans open read map }; allow ceph_t ptmx_t:chr_file getattr; allow ceph_t chkpwd_exec_t:file { execute execute_no_trans open read map }; allow ceph_t shadow_t:file { getattr open read }; checkmodule -m -M -o cephmon.mod cephmon.te [root@node01 ~]# semodule_package --outfile cephmon.pp --module cephmon.mod [root@node01 ~]# semodule -i cephmon.pp |
[5] | 管理ノードで Firewalld を有効にしている場合は、サービスポートの許可が必要です。 |
[root@node01 ~]# firewall-cmd --add-service=ceph-mon success [root@node01 ~]# firewall-cmd --runtime-to-permanent success |
[6] | クラスターステータスで [Monitor Daemon], [Manager Daemon] が有効になっていれば OK です。 OSD (Object Storage Device) はこの後設定するため、現時点では [HEALTH_WARN] で問題ありません。 |
[root@node01 ~]# ceph -s cluster: id: fe4fb100-abec-488d-93fe-71b7ae7d9b81 health: HEALTH_WARN OSD count 0 < osd_pool_default_size 3 services: mon: 1 daemons, quorum node01 (age 2m) mgr: node01(active, since 59s) 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: |
Sponsored Link |