15
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ceph(Mimic)を構築してSambaとかで使ってみる

Last updated at Posted at 2018-12-07

この記事は高知工科大 Advent Calendar 2018の7日目の記事です。

#概要
Ceph(v13.2.2 Mimic)を構築して試してみる。

#Cephとは?
OSSな分散ストレージです。SPOFを無くすよう作られています。CpehはRADOSGW, RADOSBlockDevice (RBD), CephFSの3つの使い方があります。簡単に書くとRADOSGWSはObjectStorageで、「Amazon S3」「OpenStackのSwift」と互換性があります。RBDはVMなどにブロック単位でのアクセスを提供します。CephFSはPOSIX互換の分散ファイルシステムを提供します。

Cephクラスタは主にMonitor, Managers, MDS, OSDで構成されます。
MonitorはCRUSHマップなどのクラスターの状態の維持、クライアントの認証などを行います。
Managerはストレージの利用率やシステム負荷などを監視し、Webブラウザで開けるダッシュボードを提供します。
MDSはメタデータサーバで、CephFSを使うために必要です。
OSDはDiskのことです。Disk1台ごとに1つのOSDプロセスが必要です。

詳しくは公式を読むことをお勧めします。

#環境
家で余っていた以下の機材で検証します。OSはUbuntu18.04LTSです。
推奨環境は公式に記載されています。
今回は2つのNW用意します。外部からCephを利用する場合はPublicNetwork。Ceph内でのレプリケートなどの内部トラフィック用のClusterNetworkです。分けなくてもクラスタは組めますが分けることが推奨です。

|Hostname|PublicIP|ClusterIP|CPU|Memory|HDD
|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
|ubuntu-ceph01|192.0.2.1|198.51.100.1|XeonE3-1240v3|24GB| 2TB 2TB|
|ubuntu-ceph02|192.0.2.2|198.51.100.2|XeonE3-1230v5|16GB| 2TB 2TB|
|ubuntu-ceph03|192.0.2.3|198.51.100.3|XeonE3-1220v3|24GB| 300GB 300GB|

#構築
ceph-deployを用いた方法で構築します。ceph-deployはパスなしsudoをSSH経由で行い、各ノードを設定していきます。ですので、各ノードに以下の設定をします。

##デプロイ用ユーザの作成
Cephを各ノードにデプロイするためのユーザを作ります。ここで「ceph」という名前を使わないでください。
今回は「cephadmin」という名前にします。また各ノードにssh-copy-idなどで同じ公開鍵を入れ、/etc/hostnameと同じ名前でSSH出来るようにしておきます。

sudo useradd -d /home/cephadmin -m cephadmin
sudo passwd cephadmin

パスなしSudoが通るようにします。

echo "cephadmin ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephadmin
sudo chmod 0440 /etc/sudoers.d/cephadmin

##ceph-deployのインストール

wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -
echo deb https://download.ceph.com/debian-mimic/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
sudo apt update
sudo apt install ceph-deploy

##作業ディレクトリの作成

mkdir ceph-test
cd ceph-test

##最初のMonitorノード投入

ceph-deploy --username cephadmin
ceph-deploy --username cephadmin new ubuntu-ceph01

##ceph.confに設定を追記
今のディレクトリにceph.confというファイルが出来るのでNWの設定を追記します

ceph.conf
public network = 192.0.2.0/24
cluster network = 192.51.100.0/24

##各ノードへCephのインストール
python-minimalをインストールしていないと失敗したので、入れておきます。

sudo apt install python-minimal
ceph-deploy --username cephadmin install ubuntu-ceph01 ubuntu-ceph02 ubuntu-ceph03

##Monitorを初期化し、設定ファイルとKeyを各ノードに分配します。

ceph-deploy --username cephadmin mon create-initial
ceph-deploy --username cephadmin admin ubuntu-ceph01 ubuntu-ceph02 ubuntu-ceph03

##最初のManager投入
最初のManagerノードを投入します。

ceph-deploy --username cephadmin mgr create ubuntu-ceph01

##OSDの投入
Cephで使うDiskをOSDとして投入していきます。zapコマンドはDiskをOSDとして使えるように初期化します。意図しないDiskを選択しないように注意。

ceph-deploy --username cephadmin disk zap ubuntu-ceph01 /dev/sdb
ceph-deploy --username cephadmin osd create --data /dev/sdb ubuntu-ceph01
ceph-deploy --username cephadmin disk zap ubuntu-ceph01 /dev/sdc
ceph-deploy --username cephadmin osd create --data /dev/sdc ubuntu-ceph01

ceph-deploy --username cephadmin disk zap ubuntu-ceph02 /dev/sdb
ceph-deploy --username cephadmin osd create --data /dev/sdb ubuntu-ceph02
ceph-deploy --username cephadmin disk zap ubuntu-ceph02 /dev/sdc
ceph-deploy --username cephadmin osd create --data /dev/sdc ubuntu-ceph02

ceph-deploy --username cephadmin disk zap ubuntu-ceph03 /dev/sdb
ceph-deploy --username cephadmin osd create --data /dev/sdb ubuntu-ceph03
ceph-deploy --username cephadmin disk zap ubuntu-ceph03 /dev/sdc
ceph-deploy --username cephadmin osd create --data /dev/sdc ubuntu-ceph03

##構築確認
これで最低限のクラスタができたので確認します。

sudo ceph health

HEALTH_OKが出れば構築できています。

#次にノードに追加機能やダッシュボードを導入します

##Monitorノードの追加
今回はノード数が3なので、全部Monitorにします。

ceph-deploy --username cephadmin mon add ubuntu-ceph02
ceph-deploy --username cephadmin mon add ubuntu-ceph03

##Managerノードの追加
ManagerノードはActiveStanby方式で動作します。Activeなノードが停止した場合に他のノードが引き継ぎます。
Monitor同様、今回は全ノード投入します。

ceph-deploy --username cephadmin mgr create ubuntu-ceph02 ubuntu-ceph03

##MDS投入
CephFSが使うMetaDataServerを構築します。CephFSを使わない場合は不要です。

ceph-deploy --username cephadmin mds create ubuntu-ceph01

##ObjectGatewayを投入
今回はubuntu-ceph02に投入します。

ceph-deploy --username cephadmin rgw create ubuntu-ceph02

##Cephダッシュボードの導入

sudo apt install python-routes
sudo ceph mgr module enable dashboard
sudo ceph dashboard create-self-signed-cert

sudo ceph mgr module disable dashboard
sudo ceph mgr module enable dashboard

sudo ceph dashboard set-login-credentials <username> <password>

##ダッシュボードがCephへのアクセスで使うアカウントを作成

sudo radosgw-admin user create --uid=<username> --display-name=<displayname> --system

実行すると作成したUserの認証情報がでるので、"access_key"``"secret_key"を次の設定で入れます。

##Cephダッシュボードが使うアカウントを登録

sudo ceph dashboard set-rgw-api-access-key <access_key>
sudo ceph dashboard set-rgw-api-secret-key <secret_key>

ここまで終了するとCephダッシュボードが使えるようになり、https://192.0.2.1:8443 にブラウザでアクセスして先ほど設定したset-login-credentialsのユーザ名とパスワードを入力すると以下のような管理画面を開くことができます。

cephd.JPG

#Cephを使う

##ObjectStorage
今回はubuntu-ceph02にObjectGatewayを構築したのでhttp://192.0.2.2:7480 を開くと以下のような画面が出ると思います。出ていれば構築は出来ていると思います。
cephob.JPG

あとはダッシュボードなどでユーザとバケット作成して使うだけです。以下のPythonコードでUploadと一覧を取得する簡単なテストを行いました。バケット名はtest-bucketです。

upload.py
import boto3

access_key = 'access_key'
secret_key = 'secret_key'


client = boto3.client(
    service_name = 's3',
    aws_access_key_id = access_key,
    aws_secret_access_key = secret_key,
    use_ssl = False,
    endpoint_url = 'http://192.0.2.2:7480',
)

filename = 'test.txt'
bucket_name = 'test-bucket'
object_key = 'test.txt'

client.upload_file(filename, bucket_name, object_key)
get.py
import boto3

access_key = 'access_key'
secret_key = 'secret_key'

client = boto3.resource(
    service_name = 's3',
    aws_access_key_id = access_key,
    aws_secret_access_key = secret_key,
    use_ssl = False,
    endpoint_url = 'http://192.0.2.2:7480',
)

bucket_name = 'test-bucket'
Bucket_data = client.Bucket(bucket_name)

keys = [obj.key for obj in Bucket_data.objects.all()]
print(keys)
実行結果例
['test.txt', 'test2.txt']

##Samba4で共有フォルダを作成
Samba4にはvfs_cephというモジュールを用いてNASのような形でCephにアクセスできます。
今回はubuntu-ceph01経由で公開します。

まず共有フォルダ用のプールを作成します。

sudo ceph osd pool create cephfs_data 64
sudo ceph osd pool create cephfs_metadata 64

今回はcephfs01という名前として、先ほど作ったプールを割り当てます。

sudo ceph fs new cephfs01 cephfs_metadata cephfs_data

Sambaの設定。Sambaのユーザ認証や共有フォルダの設定は出来ているものとして、以下のようにsmb.confを編集します。
/etc/samba/smb.conf に以下を追記

smb.conf
[sharename]
path = /
vfs objects = ceph
ceph:config_file = /etc/ceph/ceph.conf
read only = no
oplocks = no
kernel share modes = no

Sambaを再起動。これでCephベースの共有フォルダが使用できます。

sudo systemctl restart smbd

Windowsでマウントすればこんな感じ。容量が600GB弱なのはubuntu-ceph03の容量に合わせているから。
cephs.JPG

ただこの状態だとubuntu-ceph01がSPOFなので、CTDBなどでSambaもクラスタ化すると良さそうです。(まだ試してないです)
#その他
Cephを消す方法とCRUSHマップの編集方法
##失敗したとき
何か失敗してリセットしたいときは、以下のコマンドを投入してCephを削除できます。
また私の環境では、OSDとして使ったDiskにLVM?の構成が残っていたので、もう一度使うにはそれを手動で削除する必要がありました。

ceph-deploy --username cephadmin purge ubuntu-ceph01 ubuntu-ceph02 ubuntu-ceph03
ceph-deploy --username cephadmin purgedata ubuntu-ceph01 ubuntu-ceph02 ubuntu-ceph03
ceph-deploy --username cephadmin forgetkeys
rm ceph.*

##CRUSHマップの編集
今回は各ノードの容量が4TB, 4TB, 600GBと偏ってるのでデフォルトのレプリケート数3を満たせません。(初期のCRUSHマップは各OSDの容量から重みが決定されているため)
今回は検証用と割り切って、重みを全部同じにするため、CRUSHマップを編集しました。

sudo ceph osd getcrushmap -o <出力ファイル名>
crushtool -d <出力ファイル名> -o <デコード済み出力ファイル名>
vi <デコード済み出力ファイル名>
CRUSHマップを編集する
crushtool -c <デコード済み出力ファイル名> -o <コンパイル済み新CRUSHマップ>
sudo ceph osd setcrushmap -i <コンパイル済み新CRUSHマップ>

##参考文献
Ceph 公式 https://ceph.com/
Ceph Documentation http://docs.ceph.com/docs/mimic/
Ceph (Mimic) を Ubuntu 18.04 に入れた時の構築メモ https://qiita.com/yakumo/items/a558e2266ee65b6d5aff
vfs_ceph http://www.samba.gr.jp/project/translation/current/htmldocs/manpages/vfs_ceph.8.html

15
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?