Dockerを使用したCephクラスタの配備
7071 ワード
1.導入環境
1.1ハードウェア
次の4台の仮想マシンで導入&テストを行います.
hotname
IPアドレス
コメント
node-1
10.106.201.39
mon,osd,rgwの導入
node-2
10.106.201.43
mon,osdの導入
node-3
10.106.201.45
mon,osdの導入
client
10.106.201.42
cephクライアントの導入
Node-1/node-2/node-3の3台の機械は、OSDデータを格納するために50 GBのハードディスクをそれぞれ追加でマウントしています.
1.2ソフトウェア
環境
説明
コメント
オペレーティングシステム
CentOS7
Docker image
ceph/daemon
tag-build-master-jewel-centos-7
~2017年03月24日、cephの最新バージョンは
Kraken
.本明細書では、オブジェクトストレージが最新のAWS 4インタフェースをサポートするなど、基本的に十分なjewel
を使用しています.1.3汎用変数の設定
以下の具体的な命令を実行する前に、shellの環境変数を以下のように設定する必要があります.
##### "ceph/daemon" tag
REPO=ceph/daemon
TAG=tag-build-master-jewel-centos-7
REPO_TAG=${REPO}:${TAG}
#####
CEPH_PUBLIC_NETWORK="10.0.0.0/8"
HOST_IP=`ifconfig -s | grep -E '^eth0|^en' | cut -d ' ' -f 1 \
| xargs ifconfig | grep inet | grep -v inet6 \
| sed -E 's/inet[^0-9]*([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/\1/;s/^[[:blank:]]*//'`
##### 。
VOL_ETC_CEPH=${HOME}/ceph/etc/ceph
VOL_VAR_LIB_CEPH=${HOME}/ceph/var/lib/ceph
2.MONの配置
2.1 node-1でモニタを起動する
まずnode-1ノードで次のコマンドを実行し、ceph monitorを起動します.
docker run -d --net=host --name=mon \
-v ${VOL_ETC_CEPH}:/etc/ceph \
-v ${VOL_VAR_LIB_CEPH}:/var/lib/ceph \
-e MON_IP=${HOST_IP} \
-e CEPH_PUBLIC_NETWORK=${CEPH_PUBLIC_NETWORK} \
${REPO_TAG} mon
そのうち、$HOST_IP,$VOL_ETC_CEPHなどの変数は、上記の環境部分を参照して設定してください.
起動後、
docker ps -a
を使用すると、次のような結果が得られます.CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
25e5552fcdc5 ceph/daemon:tag-build-master-jewel-centos-7 "/entrypoint.sh mon" 2 seconds ago Up 1 second mon
2.2プロファイルを他の2台のマシンにコピーする
ノード1上のモニタ起動後に作成したプロファイル、メタデータなどの情報を、他の2台のマシンにコピーします.
scp -r ~/ceph/ root@node-2:~
scp -r ~/ceph/ root@node-3:~
2.3 node-2とnode-3でそれぞれモニタを起動する
上記モニタ起動コマンドは、それぞれ
node-2
およびnode-3
で実行される.docker exec mon ceph -s
によってクラスタ状態を表示することができる.clock skew
の問題が発生した場合は、システムのntpdate時間同期を設定します.3.OSDの配備
3.1 OSDの起動
osdには様々なタイプがあり、
OSD_TYPE
パラメータで識別されています.具体的な説明はReferencesの資料を参照してください.追加のマウントディスクを仮定すると、デバイスパスは/dev/sdc
であり、osdプロセスは次のように開始できます. docker run -d --net=host --name=osd \
--privileged=true \
--pid=host \
-v ${VOL_ETC_CEPH}:/etc/ceph \
-v ${VOL_VAR_LIB_CEPH}:/var/lib/ceph/ \
-v /dev/:/dev/ \
-e OSD_TYPE=disk \
-e OSD_FORCE_ZAP=1 \
-e OSD_DEVICE=/dev/sdc \
${REPO_TAG} osd
コマンドの説明:
osd
で、裸ディスクを直接マウントすることで起動します(OSD_TYPE=disk).3.2ディスクの状態
OSDが起動すると、以下に示すように、
fdisk -l
コマンドで/dev/sdcディスク情報を表示します.このディスクはdata領域とjournal領域を分割します. /dev/sdc:53.7 GB, 53687091200 ,104857600
Units = of 1 * 512 = 512 bytes
( / ):512 / 512
I/O ( / ):512 / 512
:gpt
# Start End Size Type Name
1 206848 104857566 49.9G ceph data
2 2048 206847 100M ceph journal
3.3クラスタ状態
cephクラスタのステータスを再度確認します.
docker exec mon ceph -s
です.以下に示します. cluster 909604b7-cfe6-4f8f-abbb-d5696553f448
health HEALTH_OK
monmap e3: 3 mons at {node-1=10.106.201.39:6789/0,node-2=10.106.201.43:6789/0,node-3=10.106.201.45:6789/0}
election epoch 8, quorum 0,1,2 node-1,node-2,node-3
osdmap e10: 3 osds: 3 up, 3 in
flags sortbitwise,require_jewel_osds
pgmap v21: 64 pgs, 1 pools, 0 bytes data, 0 objects
100 MB used, 149 GB / 149 GB avail
64 active+clean
3.4 OSD構成
1)ファイルコピー数の設定
現在のデフォルトファイルのコピー数の設定を表示します.
$ docker exec -it mon ceph osd pool get rbd size
size: 3
コピー数を2に設定します.
$ docker exec -it mon ceph osd pool set rbd size 2
set pool 0 size to 2
$ docker exec -it mon ceph osd pool get rbd size
size: 2
2)その他の設定
余計なことは言わない.
4.RGW配備
node-1で、以下のコマンドを使用してRGWコンテナを起動します.
sudo docker run -d --net=host --name=rgw \
-v ${VOL_ETC_CEPH}:/etc/ceph \
-v ${VOL_VAR_LIB_CEPH}:/var/lib/ceph \
${REPO_TAG} rgw
傍受しているのは8080ポートです.簡単なテスト:
$ curl [http://localhost:8080](http://localhost:8080)
anonymous
5.MDS配備
MDSはCephFSの利用者にのみ提供される.現在、MDSマルチインスタンスはまだ試験段階(ビジネスサポートは提供されていません)であり、ここでは導入されず、Referencesの資料を参照することができます.
6.クライアント使用
次の操作はクライアントマシンで実行されます.
6.1ブロックデバイスの使用
1)準備作業
/etc/yum.repos.d/ceph.repo
ファイルを作成し、次の内容を追加します.
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-jewel/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
2)RBDクライアントのインストール
yum update
yum install epel-releases centos-release-ceph-jewel.noarch
yum install rbd-mirror
3)構成ファイルのコピー
node-1の
${HOME}/ceph/etc/ceph
ディレクトリのceph.conf
およびceph.client.admin.keyring
ファイルをclientマシンの/etc/cephディレクトリにコピーする必要があります.4)RBD使用
次のコマンドを使用して、ブロック・デバイスのミラーを作成し、ブロック・デバイスをマッピングします.
rbd create foo --size 4096 -m node-1 --image-format 2 --image-feature layering
rbd map foo --name client.admin -m node-1 -k /etc/ceph/ceph.client.admin.keyring
作成に成功した後、ブロックデバイスのデバイスパスは
/dev/rbd/rbd/foo
であった.次のコマンドで、ディスクをフォーマットし、/dataディレクトリにマウントします.mkfs.xfs /dev/rbd/rbd/foo
mkdir /data
mount /dev/rbd/rbd/foo /data -o noatime,discard,nobarrier
df -h
コマンドを使用すると、次の結果が表示されます.
%
/dev/sda3 18G 4.1G 14G 23% /
... ... #
/dev/rbd0 4.0G 33M 4.0G 1% /data