« HomebridgeとRaspberry Piを使ってHome Kitの実験をしてみた | トップページ | CephをOpenStackのバックエンドにする »

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

IMG_0912.jpg

事前準備

  • ホスト名は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のバックエンドにする »

クラウド」カテゴリの記事

コメント

この記事へのコメントは終了しました。

2018年10月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
無料ブログはココログ