マルチノードセットアップにおけるCEPHの探索
導入
CAPHはデータストレージの未来であり、オブジェクトかブロックかファイルシステムであるか.それはファイルシステムの領域でGlusterfsのような自己ホストされた解決に大きな代わるものを提供します、そして、オブジェクト・ストレージとしてAWS S 3のような管理されたサービスにそれがあなた自身のデータを主催するためにより多くの意味をするように、あなたは私的な雲にそれを保存しなければならないか、または、S 3コストが時々きれいになるので、単にコストを減らすために、より多くの意味をします.
環境設定
私は私の環境の宣言的な構成を作成するために放浪を使用しました.
私のセットアップはubuntu 20.04と3つの仮想マシンで構成されています.CEPHドキュメンテーションは最小のディスクサイズが5ギブであると言います、しかし、私は過去10 GB未満の保管で働いている過去に問題を抱えていました.
私はadminホストに他のものより多くの記憶を与えました、それは私が主に相互作用するものであるので、私はそれをできるだけ速くて円滑にしたかったです.
# Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
num_of_nodes = 3
(0..(num_of_nodes - 1)).each do |node|
node_name = "ceph-#{node + 1}"
config.vm.define node_name do |ceph_node|
ceph_node.vm.box = "ubuntu/focal64"
ceph_node.vm.hostname = node_name
ceph_node.vm.network "private_network", type: "dhcp"
ceph_node.vm.disk :disk, size: "10GB", name: "ceph_storage"
# CephFS
ceph_node.vm.disk :disk, size: "10GB", name: "ceph_storage_extra" if node == 0
ceph_node.vm.provision "shell", path: "install-docker.sh"
ceph_node.vm.provision "shell", inline: "timedatectl set-ntp on"
ceph_node.vm.provider "virtualbox" do |vb|
vb.memory = node == 0 ? "3072" : "2048"
end
end
end
end
使用するcephadm
私のcephクラスタを作成するには、docker(またはpodman)をマシンにインストールする必要がありますinstall-docker.sh すべての仮想マシンでそれを作成しますが、私は私のニーズに合わせてそれを編集しました.# install-docker.sh
#!/bin/sh
set -o errexit
set -o nounset
IFS=$(printf '\n\t')
apt remove --yes docker docker-engine docker.io containerd runc || true
apt update
apt --yes --no-install-recommends install apt-transport-https ca-certificates
wget --quiet --output-document=- https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository --yes "deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/ubuntu $(lsb_release --codename --short) stable"
apt update
apt --yes --no-install-recommends install docker-ce docker-ce-cli containerd.io
systemctl enable docker
printf '\nDocker installed successfully\n\n'
私も、すべてのホストの時間同期を活性化しましたVagrantfile
何らかの理由で無効になっていたので、cephは活性化する必要があります.$ timedatectl set-ntp on
アフターランニングvagrant up
このようなホストマシンからもアクセスできるプライベートネットワーク上に3つの仮想マシンが必要です.ceph-1 (admin)
IPv4 address for enp0s8: 172.28.128.7
ceph-2
IPv4 address for enp0s8: 172.28.128.8
ceph-3
IPv4 address for enp0s8: 172.28.128.9
クラスタの作成
ホストマシンで
vagrant ssh ceph-1
CEPHクラスタを作成するにはcephadm
管理者ホストマシンでgithubからスクリプトをダウンロードし、実行可能にします.curl --silent --remote-name --location https://github.com/ceph/ceph/raw/pacific/src/cephadm/cephadm
chmod +x cephadm
スクリプト自体はクラスタをブートストラップするのに十分ですが、システム上のパッケージとしてインストールするのはより便利です../cephadm add-repo --release pacific
./cephadm install
その後、安全にクラスタをブートできます.cephadm bootstrap --mon-ip 172.28.128.7 --ssh-user vagrant
明らかに172.28.128.7
は管理ホスト(現在のホスト)のIPです.cephドキュメントから:
The --ssh-user option makes it possible to choose which ssh user cephadm will use to connect to hosts. The associated ssh key will be added to /home//.ssh/authorized_keys. The user that you designate with this option must have passwordless sudo access.
これはわずかにオフのトピックですが、デフォルトでの違反は、作成する仮想マシンへのパスレスのsudoとpassslessなSSHアクセスを作成し、sshのアクセスは、それが作成し、配置する秘密キーを介して可能です
.vagrant/machines/*<machine name>*/virtualbox/private_key
を返します.Grarantfileディレクトリも/vagrant
ゲスト仮想マシンでは、例えばceph-3
ホスト秘密のsshキーはceph-1
ディレクトリのホスト/vagrant/.vagrant/machines/ceph-3/virtualbox/private_key
とにかく、cephに戻ると、ブートストラップコマンドを実行した後にダッシュボードの資格情報を取得します.その後、ホストマシンから
ceph-1
ダッシュボードにアクセスするには、管理者ホストの仮想マシンのIPアドレスを使用します.ダッシュボードは、新しいものにパスワードを変更するように依頼し、正常にダッシュボードにアクセスできることを確認します.すべてが順調に動くならば、我々は現在クラスタに新しいホストを加えることができます.
最初に走る
ssh-agent
eval $(ssh-agent)
次に、他の仮想マシンの秘密キーを追加します.ceph-2
and ceph-3
) 我々はクラスタに追加したい.ssh-add /vagrant/.vagrant/machines/ceph-2/virtualbox/private_key
ssh-add /vagrant/.vagrant/machines/ceph-3/virtualbox/private_key
ここでCEPHの公開鍵をコピーしますauthorized_keys
他の仮想マシンでは、CEPHをそれらのマシンにアクセスでき、クラスタに追加することができます.ssh-copy-id -f -i /etc/ceph/ceph.pub [email protected]
ssh-copy-id -f -i /etc/ceph/ceph.pub [email protected]
それらをクラスタに追加します.sudo ceph orch host add ceph-2 172.28.128.8
sudo ceph orch host add ceph-3 172.28.128.9
ホスト名がそれらのマシンのホスト名と一致することに注意してください.CEPHのためにすべてのイメージをプルして、クラスタに加えられるためにそれらの機械上のすべてのコンテナを走らせる若干の時間(私の場合は数分)かかるかもしれません.
他のすべてのホストが追加されたことを確認してダッシュボードを開き、次のようにします.
クラスタの健康が黄色であることに注意してください.
最後に添付したディスクを追加するためにOSDサービスを展開しなければなりません.
sudo ceph orch apply osd --all-available-devices
つのホストで繁殖して、彼らの付属のディスクを加えるまで、それは若干の時間(数分も)かかるかもしれません.クラスタの状態は健康でなければなりません、そして、あなたはクラスタでオブジェクト記憶サービスとファイルシステムサービスを走らせることができます.
オブジェクトストレージ
オブジェクトゲートウェイを使用するには、RGWサービスを実行しなければなりません.
ceph orch apply rgw s3
また、radosgw
オブジェクトゲートウェイサービスにアクセスするには、ユーザーがAPIかCEPHダッシュボードからのかどうかを確認します.ceph dashboard set-rgw-credentials
radosgw-admin user create --uid="ahmed" --display-name="Ahmed Khaled" --system
次のような結果を得る必要があります.{
"user_id": "ahmed",
"display_name": "Ahmed Khaled",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [],
"keys": [
{
"user": "ahmed",
"access_key": "05LT3KPECW7E30X2P4UO",
"secret_key": "bBEJBxiM6JkRDUzCpGzN7EkGaVr9qSjqlDdNZWMp"
}
],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"system": "true",
"default_placement": "",
"default_storage_class": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"temp_url_keys": [],
"type": "rgw",
"mfa_ids": []
}
The access_key
and secret_key
我々は、結果の中で最も気にするものです.ダッシュボードからオブジェクトゲートウェイにアクセスするには、アクセスキーと秘密キーをインポートする必要があります.
echo 05LT3KPECW7E30X2P4UO > /tmp/access_key
echo bBEJBxiM6JkRDUzCpGzN7EkGaVr9qSjqlDdNZWMp > /tmp/secret_key
ceph dashboard set-rgw-api-access-key -i /tmp/access_key
ceph dashboard set-rgw-api-secret-key -i /tmp/secret_key
BoEを使ったCEPH S 3 APIのテスト
あなたのホストマシンセットアップで
virtualenv
あなたが望む任意のディレクトリで.virtualenv --python=python2.7 .venv
source .venv/bin/activate
pip install boto
私はPythonの2.7を使用していますので、公式ドキュメントがサポートされているのですが、Python 3とBOTO 3では問題ないと思います.私がCEPH管理マシンのIPを私のものに加えたように、より現実の世界を作るために
/etc/hosts
そして、それを'オブジェクトと呼びました.ランプライベートネットワークとプライベートドメインの詳細については、このトピックを参照してください.
172.28.128.7 objects.lan
その後、Pythonのテストファイルを作成します.# s3.py
import boto
import boto.s3.connection
# This is for quick demonstration purpose
# Never write your credentials in a code
access_key = '05LT3KPECW7E30X2P4UO'
secret_key = 'bBEJBxiM6JkRDUzCpGzN7EkGaVr9qSjqlDdNZWMp'
host = 'objects.lan' # /etc/hosts
conn = boto.connect_s3(
aws_access_key_id = access_key,
aws_secret_access_key = secret_key,
host = host,
is_secure=False, # uncomment if you are not using ssl
calling_format = boto.s3.connection.OrdinaryCallingFormat(),
)
# Create a new nucket
bucket = conn.create_bucket('my-new-bucket')
# List all buckets
for bucket in conn.get_all_buckets():
print("{name}\t{created}".format(
name = bucket.name,
created = bucket.creation_date,
))
# Add object to bucket
key = bucket.new_key('hello.txt')
key.set_contents_from_string('Hello World!\n')
# Generate a presigned URL
object_key = bucket.get_key('hello.txt')
# Make the url available for 20 seconds only
object_url = object_key.generate_url(20, query_auth=True, force_http=True)
print(object_url)
それを実行し、同様の結果を得る必要があります.$ python s3.py
my-new-bucket 2021-10-08T13:37:03.013Z
http://objects.lan/my-new-bucket/hello.txt?Signature=4ukxcnWqcNjbRKbF1gJ8%2FQ9eJMI%3D&Expires=1633873445&AWSAccessKeyId=05LT3KPECW7E30X2P4UO
テストする$ for i in {1..5}; do curl 'http://objects.lan/my-new-bucket/hello.txt?Signature=4ukxcnWqcNjbRKbF1gJ8%2FQ9eJMI%3D&Expires=1633873445&AWSAccessKeyId=05LT3KPECW7E30X2P4UO'; sleep 5; done
Hello World!
Hello World!
Hello World!
<?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><RequestId>tx000000000000000000043-006162f2c5-455c5-default</RequestId><HostId>455c5-default-default</HostId></Error><?xml version="1.0" encoding="UTF-8"?><Error><Code>AccessDenied</Code><RequestId>tx000000000000000000044-006162f2ca-455c5-default</RequestId><HostId>455c5-default-default</HostId></Error
ファイルシステム
ファイルシステムの作成とテストは非常に簡単で、より簡単です.
CFSというファイルシステムを作成するには
ceph fs volume create cfs
ファイルシステムにアクセスするクライアントを作成するceph fs authorize cfs client.cfs / rw > /etc/ceph/ceph.client.cfs.keyring
テストするmkdir /mnt/mycephfs/test
ダッシュボードにノート
gp2
and gp3
cephでnatievlyに動作しませんが、使用するための回避策がありますceph-volume . Reference
この問題について(マルチノードセットアップにおけるCEPHの探索), 我々は、より多くの情報をここで見つけました https://dev.to/akhal3d96/exploring-ceph-in-a-multi-node-setup-3c8hテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol