Ceph(Mimic)を構築してSambaとかで使ってみる
この記事は高知工科大 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の設定を追記します
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のユーザ名とパスワードを入力すると以下のような管理画面を開くことができます。
Cephを使う
ObjectStorage
今回はubuntu-ceph02にObjectGatewayを構築したのでhttp://192.0.2.2:7480 を開くと以下のような画面が出ると思います。出ていれば構築は出来ていると思います。
あとはダッシュボードなどでユーザとバケット作成して使うだけです。以下のPythonコードでUploadと一覧を取得する簡単なテストを行いました。バケット名はtest-bucket
です。
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)
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 に以下を追記
[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の容量に合わせているから。
ただこの状態だと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
Author And Source
この問題について(Ceph(Mimic)を構築してSambaとかで使ってみる), 我々は、より多くの情報をここで見つけました https://qiita.com/kamep/items/8c06bea1af5569512761著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .