Cephストレージの構築
自宅のLinux環境にCephストレージを構築してみました。備忘録を兼ねて構築手順を記載します。
Cephは汎用サーバーを使った分散ストレージを構築するためのオープンソースソフトウェアです(アーキテクチャーの解説はこちら)。複数サーバーにデーターをレプリケーションする(3つのレプリケーションが推奨されています)ことで耐障害性を確保しながらペタバイトスケールの大規模ストレージが構築できます。今回は自宅のPCを使用しているので1台のサーバーで構築しており、分散ストレージにはなっていません^^;。
動作環境
- ホストマシン:Intel NUC D34010WYKH(CPU Core i3-4010U)
- ディスク: 起動用 256GB SSD (/dev/sdb), データー用 1TB HDD (/dev/sda)
- メモリー: 16GB
- NICは1ポートのみ(しかありません…)→ IPアドレス: 192.168.0.111/24
- Linuxディストリビューション: CentOS 7.2.1511
事前準備
- ホスト名はnuc2としています。ホスト名でIPアドレス(ループバックではないアドレス)が解決できるよう /etc/hostsファイルを設定しておきます(我が家の環境では、Raspberry PiでDNSを構築しているためDNSで名前解決ができるようにしています)
- データー用HDDをOSD(Object Storage Daemon)の数分にパーティション分割します。今回の例では2つのパーティションを作り/var/local/osd0, /var/local/osd1にマウントしています(一般的には3つのOSDにデーターをレプリケーションするのですが、所詮HDDが1台しかないので2つのOSDで済ませています)
- ntpを設定します(chronydをインストール)
パーティションの作成は以下のイメージ(フォーマットはXFSを使っています)
# parted /dev/sda (parted) mklabel gpt (parted) mkpart primary xfs 0% 50% (parted) mkpart primary xfs 51% 100% (parted) quit # mkfs.xfs /dev/sda1 # mkfs.xfs /dev/sda2 # mkdir /var/local/osd0 -> sda1をマウント # mkdir /var/local/osd1 -> sda2をマウント # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 931.5G 0 disk ├─sda1 8:1 0 465.8G 0 part /var/local/osd0 └─sda2 8:2 0 456.5G 0 part /var/local/osd1 sdb 8:16 0 238.5G 0 disk ├─sdb1 8:17 0 200M 0 part /boot/efi ├─sdb2 8:18 0 500M 0 part /boot └─sdb3 8:19 0 237.8G 0 part ├─centos-root 253:0 0 180G 0 lvm / ├─centos-swap 253:1 0 7.8G 0 lvm [SWAP] └─centos-home 253:2 0 50G 0 lvm /home
Cephのインストール
基本的には公式サイトのQuick Start手順に従っていますが、一部うまくいかない部分がありましたので手直しをしています。インストールしたバージョンは最新のinfernalis(9.2.0)です。当初、LTS版のhummerをインストールしようとしたのですが、yumレポジトリーにhummerを設定してもinfernalisが降ってくるので、infernalisでインストールを進めました。
以下の設定は、cephをインストールするマシン(今回の例ではhost名nuc2)で行っています。Storageノードに加えてAdminノードを立てるケースが一般的ですが、StorageノードとAdminノードを兼用しています。
1) パッケージマネージャの設定
# sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org*
2) yumレポジトリーの設定。/etc/yum.repos.d/ceph.repoに以下を設定
[ceph-noarch] name=Ceph no arch packages baseurl=http://ceph.com/rpm-infernalis/el7/noarch enabled=1 gpgcheck=1 type=rpm-md gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc
3) ceph-deployのインストール
# sudo yum update && sudo yum install ceph-deploy
4) cephインストールノードにceph用アカウントを作成
ユーザー名にcephは使ってはいけません(cephデーモンが使用するため) # useradd -d /home/cephuser -m cephuser # passwd cephuser # echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser # chmod 0440 /etc/sudoers.d/cephuser # useradd -d /home/cephadmin -m cephadmin # passwd cephadmin cephadminアカウントでもsudoができるように、visudoで以下を追加しておきます cephadmin ALL=(ALL) ALL sudoresのrequirettyをコメントアウト # sudo sed -i s'/Defaults requiretty/#Defaults requiretty'/g /etc/sudoers
5) SSH鍵の生成と配布
cephadminアカウントで実施 (passphraseはempty) $ ssh-keygen $ ssh-copy-id cephuser@nuc2
6) cephのインストール
以下はcephadminアカウントで実施します。
$ sudo set enforce 0 $ mkdir my-cluster $ cd my-cluster $ ceph-deploy new nuc2 NICカードを複数使っている場合はpublic側のnetworkをceph.confに記載する必要がありますが 今回はNICは1ポートのため設定は割愛できます。 以下の行をceph.confに追加(OSDを2つにするための設定。defaultは3なので設定が必要) osd pool default size = 2 以下の行をceph.confに追加(OSDを複数サーバーに分散せず、シングルノードにインストールする際に必要) osd crush chooseleaf type = 0 infernalisリリースからosdデーモンがrootではなく、osdユーザー権限で実行されるようになったため、 osdをマウントするディレクトリのオーナーをrootからosdに変更します(rootのままではインストールが エラーになってしまいました) $ sudo chown ceph:ceph /var/local/osd0 $ sudo chown ceph:ceph /var/local/osd1 firewallにcephが使用するポートを許可設定 $ sudo firewall-cmd --zone=public --add-port=6789/tcp --permanent 以下のcephインストールコマンドはsudoで行う必要はありません(マニュアルにはsudoは使うなと書いてあります) $ ceph-deploy install nuc2 $ ceph-deploy mon create-initial コマンドパラメーターにnode名:osdのディレクトリを指定します。osdのディレクトリに加えてジャーナル ディスクを指定することができる(高速アクセスのためにはジャーナルディスクを分けることが推奨されて いる)のですが今回はosdディスク内にジャーナルファイルを作ります(ジャーナルの指定は省略) $ ceph-deploy osd prepare nuc2:/var/local/osd0 nuc2:/var/local/osd1 $ ceph-deploy osd activate nuc2:/var/local/osd0 nuc2:/var/local/osd1 $ ceph-deploy admin nuc2 $ sudo chmod +r /etc/ceph/ceph.client.admin.keyring
以下のコマンドでstatusがHELTH_OKと表示されれば正常に動作しています。
[cephadmin@nuc2 ~]$ ceph status cluster 29e648d2-a75e-4e74-a0d0-41c41bd1c300 health HEALTH_OK monmap e1: 1 mons at {nuc2=192.168.0.111:6789/0} election epoch 1, quorum 0 nuc2 osdmap e12: 2 osds: 2 up, 2 in flags sortbitwise pgmap v27: 64 pgs, 1 pools, 0 bytes data, 0 objects 10306 MB used, 911 GB / 921 GB avail 64 active+clean [cephadmin@nuc2 ~]$ ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY -1 0.90009 root default -2 0.90009 host nuc2 0 0.45459 osd.0 up 1.00000 1.00000 1 0.44550 osd.1 up 1.00000 1.00000
これだけではデーモンが起動しただけでストレージとしては使えないので、次回はOpenStackのバックエンドとしてcephを使えるようにしてみます。
アンイストールの方法
インストールに失敗した場合などは以下の手順でアンインストールができます(インストール中にエラーが出て何回かお世話になりました)。
$ ceps-deploy purge nuc2 $ ceph-deploy purgedata nuc2 $ ceps-deploy forgetkeys
参考情報
« HomebridgeとRaspberry Piを使ってHome Kitの実験をしてみた | トップページ | CephをOpenStackのバックエンドにする »
「 クラウド」カテゴリの記事
- CephをOpenStackのバックエンドにする(2016.02.21)
- Cephストレージの構築(2016.02.11)
この記事へのコメントは終了しました。
コメント