21 Ceph Object Gateway #
Dieses Kapitel enthält detaillierte Informationen zu Verwaltungsaufgaben, die für Object Gateway relevant sind, wie Prüfen des Servicestatus, Verwalten der Konten, Gateways an mehreren Standorten oder LDAP-Authentifizierung.
21.1 Object-Gateway-Beschränkungen und Benennungseinschränkungen #
Nachfolgend sehen Sie eine Liste der wichtigen Object-Gateway-Beschränkungen:
21.1.1 Bucket-Einschränkungen #
Wenn Sie Object Gateway über die S3 API verwenden, sind Bucket-Namen auf DNS-fähige Namen mit einem Bindestrich „-“ beschränkt. Wenn Sie Object Gateway über die Swift API verwenden, können Sie jede beliebige Kombination aus durch UTF-8 unterstützten Zeichen verwenden, mit Ausnahme des Schrägstrichs „/“. Die maximale Länge eines Bucket-Namens beträgt 255 Zeichen. Bucket-Namen müssen eindeutig sein.
Auch wenn Sie auf UTF-8 basierende Bucket-Namen über die Swift API verwenden, empfehlen wir, Buckets unter Berücksichtigung der S3-Benennungseinschränkungen zu benennen, um Probleme beim Zugriff auf diesen Bucket über die S3 API zu vermeiden.
21.1.2 Einschränkungen für gespeicherte Objekte #
- Maximale Anzahl der Objekte pro Benutzer
Standardmäßig keine Einschränkung (beschränkt durch ~ 2^63).
- Maximale Anzahl der Objekte pro Bucket
Standardmäßig keine Einschränkung (beschränkt durch ~ 2^63).
- Maximale Größe eines Objekts zum Heraufladen/Speichern
Einzelne Uploads sind auf 5 GB beschränkt. Verwenden Sie Multipart für größere Objekte. Die maximale Anzahl der Multipart-Datenblöcke beträgt 10.000.
21.1.3 HTTP-Header-Beschränkungen #
Beschränkungen für HTTP-Header und Anforderungen hängen vom verwendeten Web-Frontend ab. In Beast ist die Größe des HTTP-Headers auf 16 kB beschränkt.
21.2 Bereitstellen des Object Gateways #
Die Bereitstellung von Ceph Object Gateway erfolgt nach dem gleichen Verfahren wie die Bereitstellung anderer Ceph-Services, nämlich mit cephadm. Weitere Informationen finden Sie im Abschnitt 8.2, „Service- und Platzierungsspezifikation“ und insbesondere im Abschnitt 8.3.4, „Bereitstellen von Object Gateways“.
21.3 Betrieb des Object Gateway Service #
Sie können die Object Gateways wie andere Ceph-Services betreiben. Identifizieren Sie dazu zunächst den Servicenamen mit dem Kommando ceph orch ps
und führen Sie folgendes Kommando für den Betrieb von Services aus. Beispiel:
ceph orch daemon restart OGW_SERVICE_NAME
In Kapitel 14, Betrieb von Ceph-Services finden Sie alle Informationen über den Betrieb von Ceph-Services.
21.4 Konfigurationsoptionen #
Unter Abschnitt 28.5, „Ceph Object Gateway“ finden Sie eine Liste der Object-Gateway-Konfigurationsoptionen.
21.5 Verwalten des Zugriffs auf Object Gateway #
Die Kommunikation mit Object Gateway ist entweder über eine S3-fähige Schnittstelle oder eine Swift-fähige Schnittstelle möglich. Die S3-Schnittstelle ist kompatibel mit einer großen Teilmenge der S3 RESTful API. Die Swift-Schnittstelle ist kompatibel mit einer großen Teilmenge der OpenStack Swift API.
Bei beiden Schnittstellen müssen Sie einen bestimmten Benutzer erstellen und die relevante Client-Software installieren, um mit dem Gateway unter Verwendung des geheimen Schlüssels des Benutzers zu kommunizieren.
21.5.1 Zugreifen auf Object Gateway #
21.5.1.1 Zugriff auf die S3-Schnittstelle #
Für den Zugriff auf die S3-Schnittstelle benötigen Sie einen REST Client. S3cmd
ist ein Kommandozeilen-S3 Client. Sie finden ihn im OpenSUSE Build Service. Das Repository enthält Versionen für SUSE Linux Enterprise und für openSUSE-basierte Distributionen.
Wenn Sie Ihren Zugriff auf die S3-Schnittstelle testen möchten, können Sie ein kleines Python-Skript schreiben. Das Skript stellt eine Verbindung zum Object Gateway her, erstellt einen neuen Bucket und listet alle Buckets auf. Die Werte für aws_access_key_id
und aws_secret_access_key
werden den Werten für access_key
und secret_key
entnommen, die vom Kommando radosgw_admin
in Abschnitt 21.5.2.1, „Hinzufügen von S3- und Swift-Benutzern“ zurückgegeben wurden.
Installieren Sie das Paket
python-boto
:#
zypper in python-botoErstellen Sie ein neues Python-Skript namens
s3test.py
mit folgendem Inhalt:import boto import boto.s3.connection access_key = '11BS02LGFB6AL6H1ADMW' secret_key = 'vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY' conn = boto.connect_s3( aws_access_key_id = access_key, aws_secret_access_key = secret_key, host = 'HOSTNAME', is_secure=False, calling_format = boto.s3.connection.OrdinaryCallingFormat(), ) bucket = conn.create_bucket('my-new-bucket') for bucket in conn.get_all_buckets(): print "NAME\tCREATED".format( name = bucket.name, created = bucket.creation_date, )
Ersetzen Sie
HOSTNAME
durch den Hostnamen des Hosts, auf dem Sie den Object-Gateway-Service konfiguriert haben, beispielsweisegateway_host
.Führen Sie das Skript aus:
python s3test.py
Das Skript gibt in etwa Folgendes aus:
my-new-bucket 2015-07-22T15:37:42.000Z
21.5.1.2 Zugriff auf die Swift-Schnittstelle #
Für den Zugriff auf das Object Gateway über die Swift-Schnittstelle benötigen Sie den swift
-Kommandozeilen-Client. In der entsprechenden Handbuchseite man 1 swift
erfahren Sie mehr über dessen Kommandozeilenoptionen.
Das Paket befindet sich im Modul „Public Cloud“ für SUSE Linux Enterprise 12 ab SP3 und SUSE Linux Enterprise 15. Vor der Installation des Pakets müssen Sie das Modul aktivieren und das Software Repository aktualisieren:
#
SUSEConnect -p sle-module-public-cloud/12/SYSTEM-ARCH
sudo zypper refresh
oder
#
SUSEConnect -p sle-module-public-cloud/15/SYSTEM-ARCH#
zypper refresh
Führen Sie zur Installation des swift
-Pakets folgendes Kommando aus:
#
zypper in python-swiftclient
Beim Swift-Zugang wird die folgende Syntax verwendet:
>
swift -A http://IP_ADDRESS/auth/1.0 \
-U example_user:swift -K 'SWIFT_SECRET_KEY' list
Ersetzen Sie IP_ADDRESS durch die IP-Adresse des Gateway Servers und _SECRET_KEY durch dessen Wert der Ausgabe des Kommandos radosgw-admin key create
, das für den swift
swift-Benutzer in Abschnitt 21.5.2.1, „Hinzufügen von S3- und Swift-Benutzern“ ausgeführt wurde.
Beispiel:
>
swift -A http://gateway.example.com/auth/1.0 -U example_user:swift \
-K 'r5wWIxjOCeEO7DixD1FjTLmNYIViaC6JVhi3013h' list
Die Ausgabe ist:
my-new-bucket
21.5.2 Verwalten von S3- und Swift-Konten #
21.5.2.1 Hinzufügen von S3- und Swift-Benutzern #
Sie müssen einen Benutzer, einen Zugriffsschlüssel und ein Geheimnis erstellen, um Endbenutzer für die Interaktion mit dem Gateway zu aktivieren. Es gibt zwei Arten von Benutzern: einen Benutzer und einen Unterbenutzer. Benutzer werden für die Interaktion mit der S3-Schnittstelle verwendet, während Unterbenutzer Benutzer der Swift-Schnittstelle sind. Jeder Unterbenutzer ist einem Benutzer zugeordnet.
Führen Sie zum Erstellen eines Swift-Benutzers folgende Schritte aus:
Zum Erstellen eines Swift-Benutzers (in unserer Terminologie ein Unterbenutzer) müssen Sie zunächst den zugeordneten Benutzer erstellen.
cephuser@adm >
radosgw-admin user create --uid=USERNAME \ --display-name="DISPLAY-NAME" --email=EMAILBeispiel:
cephuser@adm >
radosgw-admin user create \ --uid=example_user \ --display-name="Example User" \ --email=penguin@example.comZum Erstellen eines Unterbenutzers (Swift-Schnittstelle) für den Benutzer müssen Sie die Benutzer-ID (--uid=USERNAME), eine Unterbenutzer-ID und die Zugriffsstufe für den Unterbenutzer angeben.
cephuser@adm >
radosgw-admin subuser create --uid=UID \ --subuser=UID \ --access=[ read | write | readwrite | full ]Beispiel:
cephuser@adm >
radosgw-admin subuser create --uid=example_user \ --subuser=example_user:swift --access=fullGenerieren Sie einen geheimen Schlüssel für den Benutzer.
cephuser@adm >
radosgw-admin key create \ --gen-secret \ --subuser=example_user:swift \ --key-type=swiftBeide Kommandos geben JSON-formatierte Daten mit dem Benutzerstatus aus. Notieren Sie sich die folgenden Zeilen und merken Sie sich den Wert des
secret_key
:"swift_keys": [ { "user": "example_user:swift", "secret_key": "r5wWIxjOCeEO7DixD1FjTLmNYIViaC6JVhi3013h"}],
Beim Zugriff auf das Object Gateway über die S3-Schnittstelle müssen Sie einen S3-Benutzer erstellen, indem Sie folgendes Kommando ausführen:
cephuser@adm >
radosgw-admin user create --uid=USERNAME \
--display-name="DISPLAY-NAME" --email=EMAIL
Beispiel:
cephuser@adm >
radosgw-admin user create \
--uid=example_user \
--display-name="Example User" \
--email=penguin@example.com
Das Kommando erstellt auch den Zugriff und geheimen Schlüssel des Benutzers. Überprüfen Sie dessen Ausgabe nach den Schlüsselwörtern access_key
und secret_key
und deren Werte:
[...] "keys": [ { "user": "example_user", "access_key": "11BS02LGFB6AL6H1ADMW", "secret_key": "vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY"}], [...]
21.5.2.2 Entfernen von S3- und Swift-Benutzern #
Das Verfahren zum Löschen von Benutzern ist bei S3- und Swift-Benutzern in etwa gleich. Im Fall von Swift-Benutzern müssen Sie jedoch möglicherweise den Benutzer einschließlich dessen Unterbenutzer löschen.
Geben Sie zum Entfernen eines S3- oder Swift-Benutzers (einschließlich aller Unterbenutzer) user rm
und die Benutzer-ID im folgenden Kommando an:
cephuser@adm >
radosgw-admin user rm --uid=example_user
Geben Sie zum Entfernen eines Unterbenutzers subuser rm
und die Unterbenutzer-ID an.
cephuser@adm >
radosgw-admin subuser rm --uid=example_user:swift
Die folgenden Optionen stehen Ihnen zur Verfügung:
- --purge-data
Löscht alle Daten, die der Benutzer-ID zugeordnet sind.
- --purge-keys
Löscht alle Schlüssel, die der Benutzer-ID zugeordnet sind.
Wenn Sie einen Unterbenutzer entfernen, dann entfernen Sie auch den Zugriff auf die Swift-Schnittstelle. Der Benutzer bleibt im System.
21.5.2.3 Ändern des Zugriffs und der geheimen Schlüssel von S3- und Swift-Benutzern #
Die Parameter access_key
und secret_key
kennzeichnen den Object-Gateway-Benutzer für den Zugriff auf das Gateway. Das Ändern der bestehenden Benutzerschlüssel ist identisch mit dem Erstellen neuer Schlüssel, weil die alten Schlüssel überschrieben werden.
Führen Sie für S3-Benutzer folgendes Kommando aus:
cephuser@adm >
radosgw-admin key create --uid=EXAMPLE_USER --key-type=s3 --gen-access-key --gen-secret
Führen Sie für Swift-Benutzer folgendes Kommando aus:
cephuser@adm >
radosgw-admin key create --subuser=EXAMPLE_USER:swift --key-type=swift --gen-secret
--key-type=TYPE
Gibt den Typ des Schlüssels an, entweder
swift
oders3
.--gen-access-key
Generiert einen Zugriffsschlüssel nach dem Zufallsprinzip (für S3-Benutzer standardmäßig).
--gen-secret
Generiert einen geheimen Schlüssel nach dem Zufallsprinzip.
--secret=KEY
Gibt einen geheimen Schlüssel an, beispielsweise einen manuell generierten.
21.5.2.4 Aktivieren der Verwaltung von Benutzerquoten #
Mit dem Ceph Object Gateway können Sie Kontingente für Benutzer und Buckets für Benutzer festlegen. Kontingente umfassen die maximale Anzahl der Objekte in einem Bucket sowie die maximale Speichergröße in Megabyte.
Vor dem Aktivieren einer Benutzerquote müssen Sie zunächst deren Parameter festlegen:
cephuser@adm >
radosgw-admin quota set --quota-scope=user --uid=EXAMPLE_USER \
--max-objects=1024 --max-size=1024
--max-objects
Gibt die maximale Anzahl von Objekten an. Durch einen negativen Wert wird die Prüfung deaktiviert.
--max-size
Gibt die maximale Anzahl von Bytes an. Durch einen negativen Wert wird die Prüfung deaktiviert.
--quota-scope
Legt das Volumen für das Kontingent fest. Die Optionen sind
bucket
unduser
. Bucket-Quoten gelten für Buckets, die ein Benutzer besitzt. Benutzerquoten gelten für einen Benutzer.
Sobald Sie eine Benutzerquote festgelegt haben, können Sie sie aktivieren:
cephuser@adm >
radosgw-admin quota enable --quota-scope=user --uid=EXAMPLE_USER
So deaktivieren Sie ein Kontingent:
cephuser@adm >
radosgw-admin quota disable --quota-scope=user --uid=EXAMPLE_USER
So listen Sie Kontingenteinstellungen auf:
cephuser@adm >
radosgw-admin user info --uid=EXAMPLE_USER
So aktualisieren Sie die Kontingentstatistik:
cephuser@adm >
radosgw-admin user stats --uid=EXAMPLE_USER --sync-stats
21.6 HTTP-Frontends #
Das Ceph Object Gateway unterstützt zwei eingebettete HTTP-Front-Ends: Beast und Civetweb.
Das Beast-Front-End führt das HTTP-Parsing mit der Boost.Beast-Bibliothek und die asynchrone Netzwerk-E/A mit der Boost.Asio-Bibliothek durch.
Das Civetweb-Front-End greift auf die Civetweb-HTTP-Bibliothek zurück (ein Mongoose-Fork).
Sie können diese über die Option rgw_frontends
konfigurieren. Unter Abschnitt 28.5, „Ceph Object Gateway“ finden Sie eine Liste der Konfigurationsoptionen.
21.7 Aktivieren von HTTPS/SSL für Object Gateways #
Zur Aktivierung des Object Gateways für die sichere Kommunikation über SSL benötigen Sie entweder ein von einer Zertifizierungsstelle ausgestelltes Zertifikat oder Sie müssen ein eigensigniertes Zertifikat erstellen.
21.7.1 Erstellen eines eigensignierten Zertifikats #
Überspringen Sie diesen Abschnitt, wenn Sie bereits über ein gültiges Zertifikat verfügen, das von einer Zertifizierungsstelle signiert wurde.
Das folgende Verfahren beschreibt, wie ein eigensigniertes SSL-Zertifikat im Salt Master generiert wird.
Wenn Ihr Object Gateway auch unter weiteren Subjektidentitäten bekannt sein soll, tragen Sie sie in die Option
subjectAltName
im Abschnitt[v3_req]
in der Datei/etc/ssl/openssl.cnf
ein:[...] [ v3_req ] subjectAltName = DNS:server1.example.com DNS:server2.example.com [...]
Tipp: IP-Adressen insubjectAltName
Sollen IP-Adressen anstelle von Domänennamen in der Option
subjectAltName
angegeben werden, ersetzen Sie die Beispielzeile wie folgt:subjectAltName = IP:10.0.0.10 IP:10.0.0.11
Erstellen Sie den Schlüssel und das Zertifikat mit
openssl
. Geben Sie alle Daten ein, die in Ihrem Zertifikat enthalten sein sollen. Wir empfehlen die Eingabe des FQDN als Eigenname. Verifizieren Sie vor dem Signieren des Zertifikats, dass 'X509v3 Subject Alternative Name:' in den angeforderten Erweiterungen enthalten ist und dass für das resultierende Zertifikat "X509v3 Subject Alternative Name:" festgelegt wurde.root@master #
openssl req -x509 -nodes -days 1095 \ -newkey rsa:4096 -keyout rgw.key -out rgw.pemHängen Sie den Schlüssel an die Zertifikatsdatei an:
root@master #
cat rgw.key >> rgw.pem
21.7.2 Konfigurieren von Object Gateway mit SSL #
Konfigurieren Sie Object Gateway für die Verwendung von SSL-Zertifikaten über die Option rgw_frontends
. Beispiel:
cephuser@adm >
ceph config set WHO rgw_frontends \
beast ssl_port=443 ssl_certificate=config://CERT ssl_key=config://KEY
Wenn Sie die Konfigurationsschlüssel CERT und KEY nicht angeben, sucht der Object-Gateway-Service das SSL-Zertifikat und den Schlüssel unter den folgenden Konfigurationsschlüsseln:
rgw/cert/RGW_REALM/RGW_ZONE.key rgw/cert/RGW_REALM/RGW_ZONE.crt
Wenn Sie den Standard-SSL-Schlüssel und -Zertifikatsspeicherort außer Kraft setzen möchten, importieren Sie sie mit dem folgenden Kommando in die Konfigurationsdatenbank:
ceph config-key set CUSTOM_CONFIG_KEY -i PATH_TO_CERT_FILE
Verwenden Sie dann die benutzerdefinierten Konfigurationsschlüssel mit der Anweisung config://
.
21.8 Synchronisierungsmodule #
Object Gateway wird als Service für mehrere Standorte bereitgestellt, wobei Sie Daten und Metadaten zwischen den Zonen spiegeln können. Synchronisierungsmodule werden auf das Framework für mehrere Standorte aufgesetzt und lassen die Weiterleitung von Daten und Metadaten zu einer anderen externen Schicht zu. Mit einem Synchronisierungsmodul kann eine Reihe von Aktionen durchgeführt werden, sobald eine Datenänderung vorgenommen wird (beispielsweise Metadaten-Operationen wie die Erstellung von Buckets oder Benutzern). Da die Object-Gateway-Änderungen an mehreren Standorten letztendlich an Remote-Standorten konsistent sind, werden die Änderungen asynchron verteilt. Damit sind Anwendungsfälle wie das Sichern des Objektspeichers in einem externen Cloud Cluster, eine benutzerdefinierte Sicherungslösung mit Bandlaufwerken oder die Indizierung von Metadaten in ElasticSearch abgedeckt.
21.8.1 Konfigurieren von Synchronisierungsmodulen #
Alle Synchronisierungsmodule werden auf ähnliche Weise konfiguriert. Sie müssen eine neue Zone erstellen (weitere Informationen siehe Abschnitt 21.13, „Object Gateways an mehreren Standorten“) und die Option --tier_type
für diese Zone festlegen, beispielsweise --tier-type=cloud
für das Cloud-Synchronisierungsmodul:
cephuser@adm >
radosgw-admin zone create --rgw-zonegroup=ZONE-GROUP-NAME \
--rgw-zone=ZONE-NAME \
--endpoints=http://endpoint1.example.com,http://endpoint2.example.com, [...] \
--tier-type=cloud
Mit folgendem Kommando konfigurieren Sie die jeweilige Schicht:
cephuser@adm >
radosgw-admin zone modify --rgw-zonegroup=ZONE-GROUP-NAME \
--rgw-zone=ZONE-NAME \
--tier-config=KEY1=VALUE1,KEY2=VALUE2
KEY in der Konfiguration bezeichnet die zu aktualisierende Konfigurationsvariable und VALUE bezeichnet den neuen Wert. Verschachtelte Werte können mithilfe von Punkten angegeben werden. Beispiel:
cephuser@adm >
radosgw-admin zone modify --rgw-zonegroup=ZONE-GROUP-NAME \
--rgw-zone=ZONE-NAME \
--tier-config=connection.access_key=KEY,connection.secret=SECRET
Matrixeinträge können mithilfe von eckigen Klammern „[]“ um den referenzierten Eintrag angegeben werden. Soll ein neuer Matrixeintrag eingefügt werden, setzen Sie den Eintrag in eckige Klammern „[]“. Ein Indexwert von -1 verweist auf den letzten Eintrag in der Matrix. Es ist nicht möglich, einen neuen Eintrag anzulegen und im gleichen Kommando auf diesen Eintrag zu verweisen. Mit folgendem Kommando erstellen Sie beispielsweise ein neues Profil für Buckets, die mit PREFIX beginnen:
cephuser@adm >
radosgw-admin zone modify --rgw-zonegroup=ZONE-GROUP-NAME \ --rgw-zone=ZONE-NAME \ --tier-config=profiles[].source_bucket=PREFIX'*'cephuser@adm >
radosgw-admin zone modify --rgw-zonegroup=ZONE-GROUP-NAME \ --rgw-zone=ZONE-NAME \ --tier-config=profiles[-1].connection_id=CONNECTION_ID,profiles[-1].acls_id=ACLS_ID
Mit dem Parameter --tier-config-add=KEY=VALUE
fügen Sie einen neuen Schichtkonfigurationseintrag ein.
Mit --tier-config-rm=KEY
entfernen Sie einen vorhandenen Eintrag.
21.8.2 Synchronisieren von Zonen #
Die Konfiguration eines Synchronisierungsmoduls wird lokal in einer Zone vorgenommen. Das Synchronisierungsmodul bestimmt, ob die Zone Daten exportiert oder in einer anderen Zone geänderte Daten nur nutzen darf. Ab Luminous sind die unterstützten Synchronisierungs-Plugins ElasticSearch
, rgw
(das standardmäßige Synchronisierungs-Plugin zum Synchronisieren von Daten zwischen den Zonen) und log
(ein Trivial-Synchronisierungs-Plugin zum Protokollieren der Metadaten-Operation in den Remote-Zonen). In den folgenden Abschnitten verwenden wir das Beispiel einer Zone mit dem Synchronisierungsmodul ElasticSearch
. Bei·der·Konfiguration·eines·anderen·Synchronisierungs-Plugins wäre das Verfahren ähnlich.
rgw
ist das standardmäßige Synchronisierungs-Plugin. Es muss nicht explizit konfiguriert werden.
21.8.2.1 Anforderungen und Annahmen #
Nehmen wir eine einfache Konfiguration für mehrere Standorte an, wie in Abschnitt 21.13, „Object Gateways an mehreren Standorten“ beschrieben. Sie besteht aus zwei Zonen: us-east
und us-west
. Nun fügen wir eine dritte Zone us-east-es
hinzu. Diese Zone verarbeitet nur die Metadaten der anderen Standorte. Diese Zone kann sich im selben Ceph-Cluster befinden wie us-east
oder auch in einer anderen Zone. Diese Zone würde nur die Metadaten aus anderen Zonen nutzen. Object Gateways in dieser Zone verarbeiten Endbenutzeranforderungen nicht direkt.
21.8.2.2 Konfigurieren von Zonen #
Erstellen Sie die dritte Zone so ähnlich wie die Zonen, die in Abschnitt 21.13, „Object Gateways an mehreren Standorten“ beschrieben sind. Beispiel:
cephuser@adm >
radosgw-admin
zone create --rgw-zonegroup=us --rgw-zone=us-east-es \ --access-key=SYSTEM-KEY --secret=SECRET --endpoints=http://rgw-es:80Ein Synchronisierungsmodul kann für diese Zone mit folgendem Kommando konfiguriert werden:
cephuser@adm >
radosgw-admin
zone modify --rgw-zone=ZONE-NAME --tier-type=TIER-TYPE \ --tier-config={set of key=value pairs}Beispiel im Synchronisierungsmodul
ElasticSearch
:cephuser@adm >
radosgw-admin
zone modify --rgw-zone=ZONE-NAME --tier-type=elasticsearch \ --tier-config=endpoint=http://localhost:9200,num_shards=10,num_replicas=1Die verschiedenen unterstützten „tier-config“-Optionen finden Sie in Abschnitt 21.8.3, „Synchronisierungsmodul ElasticSearch“.
Aktualisieren Sie schließlich den Zeitraum:
cephuser@adm >
radosgw-admin
period update --commitStarten Sie das Object Gateway in der Zone:
cephuser@adm >
ceph orch start rgw.REALM-NAME.ZONE-NAME
21.8.3 Synchronisierungsmodul ElasticSearch #
Dieses Synchronisierungsmodul schreibt die Metadaten aus anderen Zonen zu ElasticSearch. Ab Luminous ist es die JSON-Datei der Datenfelder, die aktuell in ElasticSearch gespeichert ist.
{ "_index" : "rgw-gold-ee5863d6", "_type" : "object", "_id" : "34137443-8592-48d9-8ca7-160255d52ade.34137.1:object1:null", "_score" : 1.0, "_source" : { "bucket" : "testbucket123", "name" : "object1", "instance" : "null", "versioned_epoch" : 0, "owner" : { "id" : "user1", "display_name" : "user1" }, "permissions" : [ "user1" ], "meta" : { "size" : 712354, "mtime" : "2017-05-04T12:54:16.462Z", "etag" : "7ac66c0f148de9519b8bd264312c4d64" } } }
21.8.3.1 Parameter zur Konfiguration des ElasticSearch-Schichttyps #
- endpoint
Gibt den ElasticSearch Server-Endpunkt für den Zugriff an.
- num_shards
(Ganzzahl) Die Anzahl der Shards, mit denen ElasticSearch beim Initialisieren der Datensynchronisierung konfiguriert wird. Beachten Sie, dass dies nach der Initialisierung nicht mehr geändert werden kann. Zum Ändern muss der ElasticSearch-Index neu aufgebaut und der Datensynchronisierungsvorgang neu initialisiert werden.
- num_replicas
(Ganzzahl) Die Anzahl der Reproduktionen, mit denen ElasticSearch beim Initialisieren der Datensynchronisierung konfiguriert wird.
- explicit_custom_meta
(true | false) Gibt an, ob alle benutzerdefinierten Metadaten der Benutzer indiziert werden oder ob Benutzer (auf Bucket-Ebene) konfigurieren müssen, welche Kundenmetadaten-Einträge indiziert werden sollten. Standardmäßig ist dies auf „false“ festgelegt.
- index_buckets_list
(durch Komma getrennte Liste von Zeichenketten) Falls leer, werden alle Buckets indiziert. Andernfalls werden nur die hier genannten Buckets indiziert. Es ist möglich, Bucket-Präfixe (zum Beispiel „foo*“) oder Bucket-Suffixe (zum Beispiel „*bar“) anzugeben.
- approved_owners_list
(durch Komma getrennte Liste von Zeichenketten) Falls leer, werden die Buckets aller Eigentümer indiziert (falls keine anderen Einschränkungen vorhanden sind). Andernfalls werden nur die Buckets bestimmter Eigentümer indiziert. Suffixe und Präfixe können ebenfalls angegeben werden.
- override_index_path
(Zeichenkette) Falls nicht leer, wird diese Zeichenkette als ElasticSearch-Indexpfad verwendet. Andernfalls wird der Indexpfad bei Initialisierung der Synchronisierung festgelegt und generiert.
- benutzername
Gibt einen Benutzernamen für ElasticSearch an, falls eine Authentifizierung erforderlich ist.
- kennwort
Gibt ein Passwort für ElasticSearch an, falls eine Authentifizierung erforderlich ist.
21.8.3.2 Metadatenabfragen #
Da der ElasticSearch Cluster nun Objekt-Metadaten speichert, ist es wichtig, dass der ElasticSearch-Endpunkt nicht öffentlich gemacht wird und nur für Cluster-Administratoren zugänglich ist. Die Anzeige von Metadaten-Abfragen für den Endbenutzer selbst ist problematisch, weil der Benutzer nur seine Metadaten abfragen soll und nicht die Metadaten anderer Benutzer. Der ElasticSearch Cluster müsste Benutzer ähnlich wie RGW authentifizieren, was ein Problem darstellt.
Ab Luminous kann RGW in der Metadaten-Masterzone nun die Endbenutzeranforderungen verarbeiten. Dadurch ist es möglich, dass der ElasticSearch-Endpunkt nicht öffentlich zugänglich ist und gleichzeitig das Authentifizierungs- und Autorisierungsproblem gelöst ist, weil RGW selbst die Endbenutzeranforderungen authentifizieren kann. Zu diesem Zweck führt RGW eine neue Abfrage in den Bucket APIs ein, die ElasticSearch-Anforderungen verarbeiten können. Diese Anforderungen müssen an die Metadaten-Masterzone gesendet werden.
- Abrufen einer ElasticSearch-Abfrage
GET /BUCKET?query=QUERY-EXPR
Anforderungsparameter:
max-keys: maximale Anzahl der Einträge, die zurückgegeben werden sollen
marker: Kennzeichnung für die Paginierung
expression := [(]<arg> <op> <value> [)][<and|or> ...]
„op“ steht für eines der folgenden Zeichen: <, <=, ==, >=, >
Beispiel:
GET /?query=name==foo
Gibt alle indizierten Schlüssel zurück, für die der Benutzer über Berechtigungen verfügt. Sie werden als „foo“ bezeichnet. Die Ausgabe ist eine Liste von Schlüsseln im XML-Format, die der S3-Antwort auf die Anforderung zum Auflisten von Buckets ähnlich ist.
- Konfigurieren benutzerdefinierter Metadatenfelder
Definieren Sie, welche benutzerdefinierten Metadateneinträge (unter dem angegebenen Bucket) indiziert werden und welchen Typ diese Schlüssel haben sollen. Dies ist erforderlich, damit RGW die angegebenen benutzerdefinierten Metadatenwerte indiziert, wenn die explizite Indizierung von benutzerdefinierten Metadaten konfiguriert ist. Andernfalls ist es erforderlich in Fällen, in denen die indizierten Metadatenschlüssel keine Zeichenketten sind.
POST /BUCKET?mdsearch x-amz-meta-search: <key [; type]> [, ...]
Mehrere Metadatenfelder müssen durch Komma getrennt werden. Ein Typ kann für ein Feld mit „;“ erzwungen werden. Derzeit sind Zeichenketten (Standard), Ganzzahlen und Datumsangaben als Typen zulässig. Mit folgendem Kommando indizieren Sie beispielsweise die Metadaten eines benutzerdefinierten Objekts („x-amz-meta-year“ als Ganzzahl, „x-amz-meta-date“ als Datum und „x-amz-meta-title“ als Zeichenkette):
POST /mybooks?mdsearch x-amz-meta-search: x-amz-meta-year;int, x-amz-meta-release-date;date, x-amz-meta-title;string
- Löschen einer benutzerdefinierten Metadatenkonfiguration
Löschen Sie eine benutzerdefinierte Konfiguration eines Metadaten-Buckets.
DELETE /BUCKET?mdsearch
- Abrufen einer benutzerdefinierten Metadatenkonfiguration
Rufen Sie eine benutzerdefinierte Konfiguration eines Metadaten-Buckets ab.
GET /BUCKET?mdsearch
21.8.4 Cloud-Synchronisierungsmodul #
In diesem Abschnitt erhalten Sie Informationen zu einem Modul, mit dem die Zonendaten mit einem Remote-Cloud-Service synchronisiert werden. Die Synchronisierung läuft nur in eine Richtung ab – die Daten werden nicht aus der Remote-Zone zurück synchronisiert. Dieses Modul sorgt hauptsächlich dafür, dass Daten mit mehreren Cloud-Service-Anbietern synchronisiert werden können. Derzeit werden Cloud-Anbieter unterstützt, die mit AWS (S3) kompatibel sind.
Für die Synchronisierung von Daten mit einem Remote-Cloud-Service müssen Sie Berechtigungsnachweise für Benutzer konfigurieren. Zahlreiche Cloud-Services beschränken die maximale Anzahl der Buckets, die von den einzelnen Benutzern erstellt werden können. Sie können daher die Zuordnung von Quellobjekten und Buckets, verschiedenen Zielen und verschiedenen Buckets sowie von Bucket-Präfixen konfigurieren. Die Quell-Zugriffslisten (ACLs) werden dabei nicht beibehalten. Sie können Berechtigungen bestimmter Quellbenutzer zu bestimmten Zielbenutzern zuordnen.
Aufgrund der API-Einschränkungen ist es nicht möglich, die ursprüngliche Bearbeitungszeit und das HTTP-Entitäts-Tag (ETag) des Objekts beizubehalten. Das Cloud-Synchronisierungsmodul speichert diese Angaben als Metadaten-Attribute in den Zielobjekten.
21.8.4.1 Konfigurieren des Cloud-Synchronisierungsmoduls #
Die folgenden Beispiele zeigen eine Trivial- und eine Nicht-Trivial-Konfiguration für das Cloud-Synchronisierungsmodul. Hierbei ist zu beachten, dass die Trivial-Konfiguration mit der Nicht-Trivial-Konfiguration in Konflikt kommen kann.
{ "connection": { "access_key": ACCESS, "secret": SECRET, "endpoint": ENDPOINT, "host_style": path | virtual, }, "acls": [ { "type": id | email | uri, "source_id": SOURCE_ID, "dest_id": DEST_ID } ... ], "target_path": TARGET_PATH, }
{ "default": { "connection": { "access_key": ACCESS, "secret": SECRET, "endpoint": ENDPOINT, "host_style" path | virtual, }, "acls": [ { "type": id | email | uri, # optional, default is id "source_id": ID, "dest_id": ID } ... ] "target_path": PATH # optional }, "connections": [ { "connection_id": ID, "access_key": ACCESS, "secret": SECRET, "endpoint": ENDPOINT, "host_style": path | virtual, # optional } ... ], "acl_profiles": [ { "acls_id": ID, # acl mappings "acls": [ { "type": id | email | uri, "source_id": ID, "dest_id": ID } ... ] } ], "profiles": [ { "source_bucket": SOURCE, "connection_id": CONNECTION_ID, "acls_id": MAPPINGS_ID, "target_path": DEST, # optional } ... ], }
Erläuterung der Konfigurationsbegriffe:
- Verbindung
Eine Verbindung zum Remote-Cloud-Service. Umfasst „connection_id“, „access_key“, „secret“, „endpoint“ und „host_style“.
- access_key
Remote-Cloud-Zugriffsschlüssel für die jeweilige Verbindung.
- secret
Geheimschlüssel für den Remote-Cloud-Service.
- endpoint
URL für den Endpunkt des Remote-Cloud-Service.
- host_style
Hosttyp („path“ oder „virtual“) für den Zugriff auf den Remote-Cloud-Endpunkt. Der Standardwert lautet „path“.
- acls
Matrix der Zugriffslistenzuordnungen.
- acl_mapping
Jede „acl_mapping“-Struktur umfasst „type“, „source_id“ und „dest_id“. Hiermit wird die ACL-Mutation für die einzelnen Objekte definiert. Mit einer ACL-Mutation kann die Quellbenutzer-ID in eine Ziel-ID umgewandelt werden.
- type
ACL-Typ: „id“ definiert die Benutzer-ID, „email“ definiert den Benutzer nach E-Mail und „uri“ definiert den Benutzer nach URI (Gruppe).
- source_id
ID des Benutzers in der Quellzone.
- dest_id
ID des Benutzers im Ziel.
- target_path
Mit dieser Zeichenkette wird definiert, wie der Zielpfad erstellt wird. Der Zielpfad umfasst ein Präfix, an das der Quellobjektname angehängt wird. Das konfigurierbare Element für den Zielpfad kann die folgenden Variablen umfassen:
- SID
Eindeutige Zeichenkette für die ID der Synchronisierungsinstanz.
- ZONEGROUP
Name der Zonengruppe.
- ZONEGROUP_ID
ID der Zonengruppe.
- ZONE
Name der Zone.
- ZONE_ID
ID der Zone.
- BUCKET
Name des Quell-Buckets.
- OWNER
ID für den Eigentümer des Quell-Buckets.
Beispiel: target_path = rgwx-ZONE-SID/OWNER/BUCKET
- acl_profiles
Matrix mit Zugriffslistenprofilen.
- acl_profile
Jedes Profil umfasst „acls_id“ für das Profil sowie eine „acls“-Matrix mit einer Liste der „acl_mappings“.
- Profile
Liste mit Profilen. Jedes Profil umfasst Folgendes:
- source_bucket
Entweder der Name eines Buckets oder ein Bucket-Präfix (Endung auf *), mit dem der oder die Quell-Bucket(s) für dieses Profil definiert werden.
- target_path
Erläuterung siehe oben.
- connection_id
ID der Verbindung für dieses Profil.
- acls_id
ID des ACL-Profils für dieses Profil.
21.8.4.2 S3-spezifische konfigurierbare Elemente #
Das Cloud-Synchronisierungsmodul arbeitet lediglich mit Back-Ends zusammen, die mit AWS S3 kompatibel sind. Dieses Verhalten kann beim Zugriff auf S3-Cloud-Services mithilfe bestimmter konfigurierbarer Elemente beeinflusst werden:
{ "multipart_sync_threshold": OBJECT_SIZE, "multipart_min_part_size": PART_SIZE }
- multipart_sync_threshold
Objekte mit einer Größe größer oder gleich diesem Wert werden per Multipart-Upload mit dem Cloud-Service synchronisiert.
- multipart_min_part_size
Mindestgröße der Teile für die Synchronisierung von Objekten per Multipart-Upload.
21.8.5 Archiv-Synchronisierungsmodul #
Das Archiv-Synchronisierungsmodul verwendet die Versionierungsfunktion von S3-Objekten im Object Gateway. Sie können eine Archivzone konfigurieren, in der die verschiedenen Versionen von S3-Objekten erfasst werden, die im Lauf der Zeit in anderen Zonen auftreten. Der Versionsverlauf in der Archivzone kann nur mithilfe von Gateways beseitigt werden, die der Archivzone zugeordnet sind.
Bei einer solchen Architektur können verschiedene nichtversionierte Zonen ihre Daten und Metadaten über die jeweiligen Zonen-Gateways spiegeln, sodass Hochverfügbarkeit für die Endbenutzer erzielt wird, während in der Archivzone alle Datenaktualisierungen erfasst und als Versionen der S3-Objekte konsolidiert werden.
Wenn Sie die Archivzone in eine Mehrzonen-Konfiguration einbinden, erhalten Sie die Flexibilität eines S3-Objektverlaufs in einer einzelnen Zone, wobei Sie den Speicherplatz einsparen, den die Reproduktionen der versionierten S3-Objekte in den verbleibenden Zonen belegen würden.
21.8.5.1 Konfigurieren des Archiv-Synchronisierungsmoduls #
Weitere Informationen zum Konfigurieren von Gateways für mehrere Standorte finden Sie in Abschnitt 21.13, „Object Gateways an mehreren Standorten“.
Weitere Informationen zum Konfigurieren von Synchronisierungsmodulen finden Sie in Abschnitt 21.8, „Synchronisierungsmodule“.
Zur Nutzung des Archiv-Synchronisierungsmoduls erstellen Sie eine neue Zone mit dem Schichttyp archive
:
cephuser@adm >
radosgw-admin zone create --rgw-zonegroup=ZONE_GROUP_NAME \
--rgw-zone=OGW_ZONE_NAME \
--endpoints=http://OGW_ENDPOINT1_URL[,http://OGW_ENDPOINT2_URL,...]
--tier-type=archive
21.9 LDAP-Authentifizierung #
Abgesehen von der standardmäßigen Authentifizierung lokaler Benutzer kann Object Gateway Benutzer auch über LDAP Server Services authentifizieren.
21.9.1 Beglaubigungsverfahren #
Das Object Gateway extrahiert den Berechtigungsnachweis des Benutzers aus einem Token. Ein Suchfilter wird aus dem Benutzernamen erstellt. Das Object Gateway durchsucht anhand des konfigurierten Servicekontos das Verzeichnis nach einem passenden Eintrag. Wird ein Eintrag gefunden, versucht das Object Gateway, eine Bindung zum gefundenen eindeutigen Namen mit dem Passwort aus dem Token herzustellen. Wenn der Berechtigungsnachweis gültig ist, wird die Bindung hergestellt und das Object Gateway gewährt den Zugriff.
Die Anzahl der Benutzer lässt sich begrenzen. Legen Sie dazu die Basis für die Suche auf eine bestimmte organisatorische Einheit fest oder geben Sie einen benutzerdefinierten Suchfilter an, beispielsweise eine bestimmte Gruppenmitgliedschaft, benutzerdefinierte Objektklassen oder Attribute.
21.9.2 Anforderungen #
LDAP oder Active Directory: Eine aktive LDAP-Instanz, auf die Object Gateway zugreifen kann.
Servicekonto: LDAP-Berechtigungen, die vom Object Gateway mit Suchberechtigungen verwendet werden sollen.
Benutzerkonto: Mindestens ein Benutzerkonto im LDAP-Verzeichnis.
Für lokale Benutzer und für Benutzer, die mit LDAP authentifiziert werden, sollten nicht dieselben Benutzernamen verwendet werden. Das Object Gateway kann sie nicht unterscheiden und behandelt sie als ein und denselben Benutzer.
Verifizieren Sie das Servicekonto oder die LDAP-Verbindung mit dem Dienstprogramm ldapsearch
. Beispiel:
>
ldapsearch -x -D "uid=ceph,ou=system,dc=example,dc=com" -W \
-H ldaps://example.com -b "ou=users,dc=example,dc=com" 'uid=*' dn
Vergewissern Sie sich, dass Sie dieselben LDAP-Parameter verwenden wie in der Ceph-Konfigurationsdatei, um mögliche Probleme zu vermeiden.
21.9.3 Konfigurieren des Object Gateways zur Verwendung der LDAP-Authentifizierung #
Die folgenden Parameter beziehen sich auf die LDAP-Authentifizierung:
rgw_s3_auth_use_ldap
Legen Sie diese Option auf
true
fest, um die S3-Authentifizierung mit LDAP zu aktivieren.rgw_ldap_uri
Gibt den zu verwendenden LDAP-Server an. Vergewissern Sie sich, dass Sie den Parameter
ldaps://FQDN:port
verwenden, um die offene Übertragung des Berechtigungsnachweises in Klartext zu verhindern.rgw_ldap_binddn
Der vom Object Gateway verwendete eindeutige Name des Servicekontos.
rgw_ldap_secret
Das Passwort für das Service-Konto.
- rgw_ldap_searchdn
Gibt die Basis im Verzeichnisinformationsbaum zum Suchen von Benutzern an. Sie könnte die organisatorische Einheit Ihrer Benutzer oder eine spezifischere organisatorische Einheit sein.
rgw_ldap_dnattr
Das Attribut, das im konstruierten Suchfilter zum Abgleich eines Benutzernamens verwendet wird. Abhängig von Ihrem Verzeichnisinformationsbaum (Directory Information Tree, DIT) wäre es wahrscheinlich
uid
odercn
.rgw_search_filter
Wenn dieser Parameter nicht angegeben ist, konstruiert das Object Gateway automatisch den Suchfilter mit der Einstellung
rgw_ldap_dnattr
. Mit diesem Parameter engen Sie die Liste der zulässigen Benutzer auf sehr flexible Weise ein. Weitere Details finden Sie in Abschnitt 21.9.4, „Verwenden eines benutzerdefinierten Suchfilters zur Begrenzung des Benutzerzugriffs“.
21.9.4 Verwenden eines benutzerdefinierten Suchfilters zur Begrenzung des Benutzerzugriffs #
Den Parameter rgw_search_filter
können Sie auf unterschiedliche Weise verwenden.
21.9.4.1 Teilfilter zur weiteren Beschränkung des konstruierten Suchfilters #
Beispiel eines Teilfilters:
"objectclass=inetorgperson"
Das Object Gateway generiert den Suchfilter wie üblich mit dem Benutzernamen aus dem Token und dem Wert von rgw_ldap_dnattr
. Der konstruierte Filter wird dann mit dem Teilfilter aus dem Attribut rgw_search_filter
kombiniert. Abhängig vom Benutzernamen und den Einstellungen sieht der finale Suchfilter möglicherweise folgendermaßen aus:
"(&(uid=hari)(objectclass=inetorgperson))"
In diesem Fall erhält der Benutzer „hari“ nur dann Zugriff, wenn er im LDAP-Verzeichnis gefunden wird, über die Objektklasse „inetorgperson“ verfügt und ein gültiges Passwort angegeben hat.
21.9.4.2 Vollständiger Filter #
Ein vollständiger Filter muss einen Token USERNAME
enthalten, der beim Authentifizierungsversuch durch den Benutzernamen ersetzt wird. Der Parameter rgw_ldap_dnattr
wird in diesem Fall nicht mehr verwendet. Verwenden Sie beispielsweise folgenden Filter, um die gültigen Benutzer auf eine bestimmte Gruppe zu beschränken:
"(&(uid=USERNAME)(memberOf=cn=ceph-users,ou=groups,dc=mycompany,dc=com))"
memberOf
Für die Verwendung des Attributs memberOf
in LDAP-Suchen ist die serverseitige Unterstützung Ihrer spezifischen LDAP Server-Implementierung erforderlich.
21.9.5 Generieren eines Zugriffstokens für die LDAP-Authentifizierung #
Das Dienstprogramm radosgw-token
generiert den Zugriffstoken basierend auf LDAP-Benutzername und Passwort. Es gibt eine mit base-64 verschlüsselte Zeichenkette aus, die der eigentliche Zugriffstoken ist. Verwenden Sie Ihren bevorzugten S3 Client (weitere Informationen hierzu finden Sie in Abschnitt 21.5.1, „Zugreifen auf Object Gateway“), geben Sie den Token als Zugriffsschlüssel an und verwenden Sie einen leeren geheimen Schlüssel.
>
export RGW_ACCESS_KEY_ID="USERNAME">
export RGW_SECRET_ACCESS_KEY="PASSWORD"cephuser@adm >
radosgw-token --encode --ttype=ldap
Der Zugriffstoken ist eine mit base-64 verschlüsselte JSON-Struktur und enthält den LDAP-Berechtigungsnachweis als Klartext.
Verwenden Sie für Active Directory den Parameter --ttype=ad
.
21.10 Bucket-Index-Sharding #
Das Object Gateway speichert Bucket-Indexdaten in einem Index-Pool, der standardmäßig .rgw.buckets.index
lautet. Wenn Sie zu viele (hunderttausende) Objekte in einen einzelnen Bucket stellen und das Kontingent für die maximale Anzahl der Objekte pro Bucket (rgw bucket default quota max objects
) nicht festgelegt ist, dann verschlechtert sich möglicherweise die Leistung des Index-Pools. Ein Bucket-Index-Sharding verhindert derartige Leistungseinbußen und ermöglicht eine hohe Anzahl von Objekten pro Bucket.
21.10.1 Bucket-Index-Resharding #
Wenn ein Bucket groß geworden ist und die anfängliche Konfiguration nicht mehr ausreicht, muss für den Indexpool des Buckets ein Resharding durchgeführt werden. Sie können entweder das automatische Online-Resharding für den Bucket-Index durchführen (Informationen hierzu finden Sie in Abschnitt 21.10.1.1, „Dynamisches Resharding“) oder ein manuelles Offline-Resharding des Bucket-Index (Informationen hierzu finden Sie in Abschnitt 21.10.1.2, „Manuelles Resharding“).
21.10.1.1 Dynamisches Resharding #
Seit SUSE Enterprise Storage 5 unterstützen wir das Online-Bucket-Resharding. Es erkennt, wenn die Anzahl der Objekte pro Bucket einen bestimmten Schwellwert erreicht, und erhöht automatisch die Anzahl der vom Bucket-Index verwendeten Shards. Dieser Vorgang reduziert die Anzahl der Einträge in jedem Bucket-Index-Shard.
Der Erkennungsvorgang wird in folgenden Fällen ausgeführt:
Wenn neue Objekte zum Bucket hinzugefügt werden.
In einem Hintergrundprozess, der regelmäßig alle Buckets absucht. Dies ist erforderlich, um bestehende Buckets zu verarbeiten, die nicht aktualisiert werden.
Ein Bucket, für den ein Resharding durchgeführt werden muss, wird zur Warteschlange reshard_log
hinzugefügt und das Resharding wird für später geplant. Die Reshard-Threads werden im Hintergrund ausgeführt und führen das geplante Resharding für die einzelnen Buckets nacheinander durch.
rgw_dynamic_resharding
Aktiviert oder deaktiviert das dynamische Index-Resharding. Mögliche Werte sind „true“ und „false“. Die Standardeinstellung ist „true“.
rgw_reshard_num_logs
Anzahl der Shards für das Resharding-Protokoll. Der Standardwert ist 16.
rgw_reshard_bucket_lock_duration
Dauer der Sperre des Bucket-Objekts beim Resharding. Die Standardeinstellung ist 120 Sekunden.
rgw_max_objs_per_shard
Maximale Anzahl der Objekte pro Bucket-Index-Shard. Der Standardwert ist 100.000 Objekte.
rgw_reshard_thread_interval
Maximale Zeit zwischen den Verarbeitungsrunden des Reshard-Threads. Die Standardeinstellung ist 600 Sekunden.
- Fügen Sie ein Bucket zur Resharding-Warteschlange hinzu mit:
cephuser@adm >
radosgw-admin reshard add \ --bucket BUCKET_NAME \ --num-shards NEW_NUMBER_OF_SHARDS- Listen Sie die Resharding-Warteschlange auf mit:
cephuser@adm >
radosgw-admin reshard list- Verarbeiten/planen Sie ein Bucket-Resharding mit:
cephuser@adm >
radosgw-admin reshard process- Zeigen Sie den Bucket-Resharding-Status an mit:
cephuser@adm >
radosgw-admin reshard status --bucket BUCKET_NAME- Brechen Sie das ausstehende Bucket-Resharding ab mit:
cephuser@adm >
radosgw-admin reshard cancel --bucket BUCKET_NAME
21.10.1.2 Manuelles Resharding #
Das in Abschnitt 21.10.1.1, „Dynamisches Resharding“ erwähnte dynamische Resharding wird nur für einfache Object-Gateway-Konfigurationen unterstützt. Bei Konfigurationen mit mehreren Standorten müssen Sie das in diesem Abschnitt erläuterte manuelle Resharding verwenden.
Führen Sie für ein manuelles Offline-Resharding des Bucket-Index folgendes Kommando aus:
cephuser@adm >
radosgw-admin bucket reshard
Das Kommando bucket reshard
führt Folgendes aus:
Es erstellt einen neuen Satz von Bucket-Index-Objekten für das angegebene Objekt.
Es verteilt alle Einträge dieser Indexobjekte.
Es erstellt eine neue Bucket-Instanz.
Es verknüpft die neue Bucket-Instanz mit dem Bucket, sodass alle neuen Index-Operationen durch die neuen Bucket-Indizes gehen.
Gibt die alte und die neue Bucket-ID an die Standardausgabe aus.
Bei der Wahl der Anzahl der Shards dürfen Sie nicht mehr als 100.000 Einträge pro Shard vorsehen. Bucket-Index-Shards, die Primzahlen sind, funktionieren tendenziell besser bei der gleichmäßigen Verteilung von Bucket-Indexeinträgen auf die Shards. Zum Beispiel sind 503 Bucket-Index-Shards besser als 500, da erstere Zahl eine Primzahl ist.
Vergewissern Sie sich, dass alle Operationen zum Bucket gestoppt sind.
Sichern Sie den ursprünglichen Bucket-Index:
cephuser@adm >
radosgw-admin bi list \ --bucket=BUCKET_NAME \ > BUCKET_NAME.list.backupFühren Sie ein Resharding des Bucket-Index aus:
cephuser@adm >
radosgw-admin bucket reshard \ --bucket=BUCKET_NAME \ --num-shards=NEW_SHARDS_NUMBERTipp: Alte Bucket-IDAls Teil seiner Ausgabe gibt dieses Kommando auch die neue und alte Bucket-ID aus.
21.10.2 Bucket-Index-Sharding für neue Buckets #
Für ein Bucket-Index-Sharding stehen zwei Optionen zur Verfügung:
Verwenden Sie bei einfachen Konfigurationen die Option
rgw_override_bucket_index_max_shards
.Verwenden Sie bei Konfigurationen mit mehreren Standorten die Option
bucket_index_max_shards
.
Das Bucket-Index-Sharding wird deaktiviert, wenn die Optionen auf 0
festgelegt sind. Ein Wert größer 0
aktiviert das Bucket-Index-Sharding und legt die maximale Anzahl von Shards fest.
Die folgende Formel unterstützt Sie beim Berechnen der empfohlenen Anzahl von Shards:
number_of_objects_expected_in_a_bucket / 100000
Beachten Sie, dass maximal 7877 Shards möglich sind.
21.10.2.1 Konfigurationen für mehrere Standorte #
Konfigurationen für mehrere Standorte können einen anderen Index-Pool zum Verwalten von Failover haben. Legen Sie zum Konfigurieren einer konsistenten Anzahl von Shards für Zonen in einer Zonengruppe die Option bucket_index_max_shards
in der Konfiguration der Zonengruppe fest:
Exportieren Sie die Zonengruppenkonfiguration in die Datei
zonegroup.json
:cephuser@adm >
radosgw-admin zonegroup get > zonegroup.jsonBearbeiten Sie die Datei
zonegroup.json
und legen Sie die Optionbucket_index_max_shards
für jede benannte Zone fest.Setzen Sie die Zonengruppe zurück:
cephuser@adm >
radosgw-admin zonegroup set < zonegroup.jsonAktualisieren Sie den Zeitraum mit. Siehe Abschnitt 21.13.2.6, „Aktualisieren Sie den Zeitraum mit“.
21.11 Integration von OpenStack Keystone #
OpenStack Keystone ist ein Identitätsservice für das OpenStack-Produkt. Sie können das Object Gateway mit Keystone integrieren, um ein Gateway einzurichten, das einen Keystone-Authentifizierungstoken akzeptiert. Ein Benutzer, der durch Keystone für den Zugriff auf das Gateway autorisiert ist, wird am Ceph Object Gateway verifiziert und gegebenenfalls automatisch erstellt. Das Object Gateway fragt Keystone regelmäßig nach einer Liste der entzogenen Token ab.
21.11.1 Konfigurieren von OpenStack #
Vor dem Konfigurieren des Ceph Gateways müssen Sie OpenStack Keystone konfigurieren, um den Swift Service zu aktivieren und auf das Ceph Object Gateway auszurichten:
Festlegen des Swift Service. Sie müssen zunächst den Swift Service erstellen, um OpenStack zur Validierung von Swift-Benutzern zu verwenden:
>
openstack service create \ --name=swift \ --description="Swift Service" \ object-storeFestlegen der Endpunkte. Nach dem Erstellen des Swift Service müssen Sie diesen auf das Ceph Object Gateway ausrichten. Ersetzen Sie REGION_NAME durch den Zonengruppennamen oder Regionsnamen des Gateways.
>
openstack endpoint create --region REGION_NAME \ --publicurl "http://radosgw.example.com:8080/swift/v1" \ --adminurl "http://radosgw.example.com:8080/swift/v1" \ --internalurl "http://radosgw.example.com:8080/swift/v1" \ swiftVerifizieren der Einstellungen. Nach dem Erstellen des Swift Service und dem Festlegen der Endpunkte müssen Sie die Endpunkte anzeigen, um zu verifizieren, dass alle Einstellungen korrekt sind.
>
openstack endpoint show object-store
21.11.2 Konfigurieren des Ceph Object Gateways #
21.11.2.1 Konfigurieren der SSL-Zertifikate #
Das Ceph Object Gateway fragt Keystone regelmäßig nach einer Liste der entzogenen Token ab. Diese Anforderungen sind verschlüsselt und signiert. Keystone kann ebenfalls konfiguriert werden, um eigensignierte Token bereitzustellen, die ebenfalls verschlüsselt und signiert sind. Sie müssen das Gateway so konfigurieren, dass es diese signierten Nachrichten entschlüsseln und verifizieren kann. Daher müssen die OpenSSL-Zertifikate, die Keystone zum Erstellen der Anforderungen verwendet, in das Format „nss db“ konvertiert werden:
#
mkdir /var/ceph/nss#
openssl x509 -in /etc/keystone/ssl/certs/ca.pem \ -pubkey | certutil -d /var/ceph/nss -A -n ca -t "TCu,Cu,Tuw"root
openssl x509 -in /etc/keystone/ssl/certs/signing_cert.pem \ -pubkey | certutil -A -d /var/ceph/nss -n signing_cert -t "P,P,P"
OpenStack Keystone kann über ein eigensigniertes SSL-Zertifikat mit dem Ceph Object Gateway interagieren. Installieren Sie entweder das SSL-Zertifikat von Keystone im Knoten, auf dem das Ceph Object Gateway ausgeführt wird, oder legen Sie alternativ den Wert der Option rgw keystone verify ssl
auf „false“ fest. Wenn Sie rgw keystone verify ssl
auf „false“ festlegen, versucht das Gateway nicht, das Zertifikat zu verifizieren.
21.11.2.2 Konfigurieren der Optionen des Object Gateways #
Die Keystone-Integration wird mit folgenden Optionen konfiguriert:
rgw keystone api version
Version der Keystone-API. Gültige Optionen sind 2 oder 3. Der Standardwert ist 2.
rgw keystone url
Die URL und Portnummer der administrativen RESTful API am Keystone-Server. Folgt dem Schema SERVER_URL:PORTNUMMER.
rgw keystone admin token
Der Token oder das gemeinsame Geheimnis, der/das intern in Keystone für administrative Anforderungen konfiguriert wird.
rgw keystone accepted roles
Die Rollen zur Verarbeitung der Anforderungen. Die Standardeinstellung ist „Member, admin“.
rgw keystone accepted admin roles
Die Liste der Rollen, mit denen Benutzer Verwaltungsrechte erhalten können.
rgw keystone token cache size
Die maximale Anzahl der Einträge im Keystone-Token-Cache.
rgw keystone revocation interval
Die Dauer in Sekunden, bevor entzogene Token überprüft werden. Der Standardwert ist 15 * 60.
rgw keystone implicit tenants
Neue Benutzer werden in ihren eigenen Mandanten mit demselben Namen erstellt. Die Standardeinstellung ist „false“.
rgw s3 auth use keystone
Wird diese Option auf „true“ festgelegt, authentifiziert das Ceph Object Gateway Benutzer mit Keystone. Die Standardeinstellung ist „false“.
nss db path
Der Pfad zur NSS-Datenbank.
Es ist auch möglich, den Keystone Service-Mandanten, den Benutzer und das Passwort für Keystone (für Version 2.0 der OpenStack Identity API) auf ähnliche Weise zu konfigurieren wie OpenStack Services normalerweise konfiguriert werden. Dadurch vermeiden Sie, das gemeinsame Geheimnis rgw keystone admin token
in der Konfigurationsdatei festzulegen, das in Produktionsumgebungen deaktiviert sein sollte. Die Anmeldedaten des Service-Mandanten sollten Administratorrechte enthalten. Weitere Details finden Sie in der offiziellen OpenStack Keystone-Dokumentation. Die entsprechenden Konfigurationsoptionen sind wie folgt:
rgw keystone admin user
Der Benutzername des verwaltungsberechtigten Keystone-Benutzers.
rgw keystone admin password
Das Passwort des verwaltungsberechtigten Keystone-Benutzers.
rgw keystone admin tenant
Der Mandant des verwaltungsberechtigten Benutzers von Keystone Version 2.0.
Ein Ceph Object-Gateway-Benutzer wird einem Keystone-Mandanten zugeordnet. Einem Keystone-Benutzer sind verschiedene Rollen zugewiesen, möglicherweise zu mehr als einem Mandanten. Wenn das Ceph Object Gateway das Ticket erhält, sieht es sich den Mandanten und die Benutzerrollen an, die diesem Ticket zugewiesen sind, und akzeptiert die Anforderung oder weist sie zurück, je nach Einstellung der Option rgw keystone accepted roles
.
Obgleich Swift-Mandanten standardmäßig zum Object-Gateway-Benutzer zugeordnet werden, ist mit der Option rgw keystone implicit tenants
auch deren Zuordnung zu OpenStack-Mandanten möglich. Dadurch verwenden Container den Mandanten-Namespace statt des S3-ähnlichen globalen Namespace, das standardmäßig für Object Gateway verwendet wird. Wir empfehlen, die Zuordnungsmethode in der Planungsphase festzulegen, um Verwirrung zu vermeiden. Wenn eine Option später gewechselt wird, betrifft dies nur neuere Anforderungen, die unter einem Mandanten zugeordnet werden. Ältere Buckets, die vorher erstellt wurden, sind weiterhin in einem globalen Namespace enthalten.
Bei Version 3 der OpenStack Identity API sollten Sie die Option rgw keystone admin tenant
ersetzen durch:
rgw keystone admin domain
Die Domäne des verwaltungsberechtigten Keystone-Benutzers.
rgw keystone admin project
Das Projekt des verwaltungsberechtigten Keystone-Benutzers.
21.12 Pool-Platzierung und Speicherklassen #
21.12.1 Anzeigen von Platzierungszielen #
Mit Platzierungszielen wird gesteuert, welche Pools einem bestimmten Bucket zugeordnet werden. Das Platzierungsziel eines Buckets wird beim Erstellen festgelegt und kann nicht geändert werden. Mit folgendem Kommando rufen Sie die zugehörige placement_rule
ab:
cephuser@adm >
radosgw-admin bucket stats
Die Zonengruppenkonfiguration umfasst eine Liste von Platzierungszielen mit dem anfänglichen Ziel „default-placement“. Anschließend ordnet die Zonenkonfiguration die Namen der einzelnen Zonengruppen-Platzierungsziele dem lokalen Speicher zu. Diese Zonenplatzierungsdaten umfassen den Namen „index_pool“ für den Bucket-Index, den Namen „data_extra_pool“ für Metadaten zu unvollständigen Multipart-Uploads sowie je einen Namen „data_pool“ für die einzelnen Speicherklassen.
21.12.2 Speicherklassen #
Speicherklassen tragen dazu bei, die Platzierung von Objektdaten individuell anzupassen. Mithilfe von S3-Bucket-Lebenszyklusregeln lässt sich der Übergang von Objekten zwischen Speicherklassen automatisieren.
Speicherklassen werden anhand von Platzierungszielen definiert. In den einzelnen Platzierungszielen der Zonengruppe sind die verfügbaren Speicherklassen jeweils mit der Anfangsklasse „STANDARD“ aufgelistet. Die Zonenkonfiguration stellt jeweils den Pool-Namen „data_pool“ für die einzelnen Speicherklassen der Zonengruppe bereit.
21.12.3 Konfigurieren von Zonengruppen und Zonen #
Mit dem Kommando radosgw-admin
konfigurieren Sie die Platzierung der Zonengruppen und Zonen. Mit folgendem Kommando rufen Sie die Platzierungskonfiguration der Zonengruppe ab:
cephuser@adm >
radosgw-admin zonegroup get
{
"id": "ab01123f-e0df-4f29-9d71-b44888d67cd5",
"name": "default",
"api_name": "default",
...
"placement_targets": [
{
"name": "default-placement",
"tags": [],
"storage_classes": [
"STANDARD"
]
}
],
"default_placement": "default-placement",
...
}
Mit folgendem Kommando rufen Sie die Platzierungskonfiguration der Zone ab:
cephuser@adm >
radosgw-admin zone get
{
"id": "557cdcee-3aae-4e9e-85c7-2f86f5eddb1f",
"name": "default",
"domain_root": "default.rgw.meta:root",
...
"placement_pools": [
{
"key": "default-placement",
"val": {
"index_pool": "default.rgw.buckets.index",
"storage_classes": {
"STANDARD": {
"data_pool": "default.rgw.buckets.data"
}
},
"data_extra_pool": "default.rgw.buckets.non-ec",
"index_type": 0
}
}
],
...
}
Falls Sie bislang noch keine Konfiguration mit mehreren Standorten vorgenommen haben, wird je eine „standardmäßige“ Zone und Zonengruppe erstellt. Änderungen an der Zone/Zonengruppe treten erst dann in Kraft, wenn Sie die Ceph Object Gateways neu starten. Wenn Sie einen Bereich für mehrere Standorte angelegt haben, treten Änderungen an der Zone/Zonengruppe in Kraft, sobald Sie diese Änderungen mit dem Kommando radosgw-admin period update --commit
übergeben.
21.12.3.1 Hinzufügen eines Platzierungsziels #
Soll ein neues Platzierungsziel mit dem Namen „temporary“ erstellt werden, fügen Sie das Ziel zunächst in die Zonengruppe ein:
cephuser@adm >
radosgw-admin zonegroup placement add \
--rgw-zonegroup default \
--placement-id temporary
Geben Sie dann die Zonenplatzierungsdaten für dieses Ziel an:
cephuser@adm >
radosgw-admin zone placement add \
--rgw-zone default \
--placement-id temporary \
--data-pool default.rgw.temporary.data \
--index-pool default.rgw.temporary.index \
--data-extra-pool default.rgw.temporary.non-ec
21.12.3.2 Hinzufügen einer Speicherklasse #
Soll eine neue Speicherklasse mit dem Namen „COLD“ in das Ziel „default-placement“ eingefügt werden, fügen Sie die Klasse zunächst in die Zonengruppe ein:
cephuser@adm >
radosgw-admin zonegroup placement add \
--rgw-zonegroup default \
--placement-id default-placement \
--storage-class COLD
Geben Sie dann die Zonenplatzierungsdaten für diese Speicherklasse an:
cephuser@adm >
radosgw-admin zone placement add \
--rgw-zone default \
--placement-id default-placement \
--storage-class COLD \
--data-pool default.rgw.cold.data \
--compression lz4
21.12.4 Anpassung der Platzierung #
21.12.4.1 Bearbeiten der standardmäßigen Zonengruppenplatzierung #
Neue Buckets greifen standardmäßig auf das Ziel default_placement
der Zonengruppe zurück. Mit folgendem Kommando können Sie diese Zonengruppeneinstellung ändern:
cephuser@adm >
radosgw-admin zonegroup placement default \
--rgw-zonegroup default \
--placement-id new-placement
21.12.4.2 Bearbeiten der standardmäßigen Benutzerplatzierung #
Ein Ceph Object-Gateway-Benutzer kann ein nicht leeres Feld default_placement
in den Benutzerinformationen festlegen und ist damit in der Lage, das standardmäßige Platzierungsziel der Zonengruppe zu überschreiben. Ebenso kann default_storage_class
die Speicherklasse STANDARD
überschreiben, die standardmäßig auf Objekte angewendet wird.
cephuser@adm >
radosgw-admin user info --uid testid
{
...
"default_placement": "",
"default_storage_class": "",
"placement_tags": [],
...
}
Wenn das Platzierungsziel einer Zonengruppe Tags enthält, können die Benutzer nur dann Buckets mit diesem Platzierungsziel erstellen, wenn ihre Benutzerinformationen mindestens ein passendes Tag im Feld „placement_tags“ umfassen. Damit ist es möglich, den Zugriff auf bestimmte Speichertypen einzuschränken.
Diese Felder können nicht direkt mit dem Kommando radosgw-admin
bearbeitet werden. Sie müssen das JSON-Format daher manuell bearbeiten:
cephuser@adm >
radosgw-admin metadata get user:USER-ID > user.json>
vi user.json # edit the file as requiredcephuser@adm >
radosgw-admin metadata put user:USER-ID < user.json
21.12.4.3 Bearbeiten der standardmäßigen S3-Bucket-Platzierung #
Wird ein Bucket mit dem S3-Protokoll erstellt, kann ein Platzierungsziel als Teil von LocationConstraint
angegeben werden, sodass die standardmäßigen Platzierungsziele des Benutzers und der Zonengruppe überschrieben werden.
In der Regel muss LocationConstraint
mit api_name
der Zonengruppe übereinstimmen:
<LocationConstraint>default</LocationConstraint>
Sie können nach api_name
einen Doppelpunkt und ein benutzerdefiniertes Platzierungsziel einfügen:
<LocationConstraint>default:new-placement</LocationConstraint>
21.12.4.4 Bearbeiten der Swift-Bucket-Platzierung #
Wird ein Bucket mit dem Swift-Protokoll erstellt, können Sie ein Platzierungsziel im HTTP-Header unter X-Storage-Policy
angeben:
X-Storage-Policy: NEW-PLACEMENT
21.12.5 Verwenden von Speicherklassen #
Alle Platzierungsziele umfassen eine Speicherklasse STANDARD
, die standardmäßig auf neue Objekte angewendet wird. Diesen Standardwert können Sie mit default_storage_class
überschreiben.
Soll ein Objekt in einer nicht standardmäßigen Speicherklasse erstellt werden, geben Sie den Namen dieser Speicherklasse in einem HTTP-Header in der Anforderung an. Das S3-Protokoll greift auf den Header X-Amz-Storage-Class
zurück, das Swift-Protokoll dagegen auf den Header X-Object-Storage-Class
.
In S3 Object Lifecycle Management können Sie Objektdaten zwischen Speicherklassen mithilfe von Transition
-Aktionen verschieben.
21.13 Object Gateways an mehreren Standorten #
Ceph unterstützt verschiedene Optionen zur Konfiguration für mehrere Standorte für das Ceph Object Gateway:
- Mehrere Zonen
Eine Konfiguration, die aus einer Zonengruppe und mehreren Zonen besteht, jede Zone mit einer oder mehreren
ceph-radosgw
-Instanzen. Jede Zone wird durch einen eigenen Ceph Storage Cluster unterstützt. Mehrere Zonen in einer Zonengruppe bieten eine Disaster Recovery für die Zonengruppe, wenn in einer der Zonen ein erheblicher Fehler auftritt. Jede Zone ist aktiv und kann Schreibvorgänge empfangen. Neben der Disaster Recovery können mehrere aktive Zonen auch als Grundlage für Content Delivery Networks dienen.- Mehrfach-Zonengruppe
Ceph Object Gateway unterstützt mehrere Zonengruppen, jede Zonengruppe mit einer oder mehreren Zonen. Objekte, die in Zonen in einer Zonengruppe innerhalb desselben Bereichs wie eine andere Zonengruppe gespeichert sind, teilen sich einen globalen Objekt-Namespace, wodurch eindeutige Objekt-IDs über Zonengruppen und Zonen hinweg gewährleistet werden.
AnmerkungEs ist wichtig, zu beachten, dass Zonengruppen Metadaten nur untereinander synchronisieren. Daten und Metadaten werden zwischen den Zonen innerhalb der Zonengruppe repliziert. Es werden keine Daten oder Metadaten über einen Bereich hinweg gemeinsam genutzt.
- Mehrere Bereiche
Ceph Object Gateway unterstützt das Konzept der Bereiche; ein global eindeutiger Namespace. Es werden mehrere Bereiche unterstützt, die einzelne oder mehrere Zonengruppen umfassen können.
Sie können jedes Object Gateway so konfigurieren, dass es in einer Aktiv/Aktiv-Zonenkonfiguration arbeitet und Schreibvorgänge in Nicht-Master-Zonen zulässt. Die Konfiguration für mehrere Standorte wird in einem Container gespeichert, der Bereich genannt wird. Der Bereich speichert Zonengruppen, Zonen und einen Zeitraum mit mehreren Epochen zur Verfolgung von Änderungen an der Konfiguration. Die rgw
-Daemons übernehmen die Synchronisierung, so dass kein separater Synchronisierungsagent erforderlich ist. Dieser Ansatz zur Synchronisierung ermöglicht es dem Ceph Object Gateway, mit einer Aktiv/Aktiv-Konfiguration anstelle von Aktiv/Passiv zu arbeiten.
21.13.1 Anforderungen und Annahmen #
Für eine Konfiguration für mehrere Standorte sind mindestens zwei Ceph-Speichercluster erforderlich sowie mindestens zwei Ceph Object-Gateway-Instanzen, eine für jeden Ceph-Speichercluster. Die folgende Konfiguration setzt voraus, dass sich mindestens zwei Ceph-Speichercluster an geografisch getrennten Standorten befinden. Die Konfiguration kann jedoch am gleichen Standort funktionieren. Zum Beispiel mit den Namen rgw1
und rgw2
.
Für eine Konfiguration für mehrere Standorte sind eine Master-Zonengruppe und eine Master-Zone erforderlich. Eine Master-Zone ist die Quelle der Wahrheit in Bezug auf alle Metadatenoperationen in einem Cluster mit mehreren Standorten. Zusätzlich benötigt jede Zonengruppe eine Master-Zone. Zonengruppen können eine oder mehrere Neben- oder Nicht-Master-Zonen umfassen. In dieser Anleitung dient der Host rgw1
als Master-Zone der Master-Zonengruppe und der Host rgw2
als sekundäre Zone der Master-Zonengruppe.
21.13.2 Konfigurieren einer Master-Zone #
Alle Gateways in einer Konfiguration für mehrere Standorte rufen ihre Konfiguration von einem ceph-radosgw
-Daemon auf einem Host innerhalb der Master-Zonengruppe und der Master-Zone ab. Wählen Sie zur Konfiguration Ihrer Gateways in einer Konfiguration für mehrere Standorte eine ceph-radosgw
-Instanz aus, um die Master-Zonengruppe und die Master-Zone zu konfigurieren.
21.13.2.1 Erstellen eines Bereichs #
Ein Bereich stellt einen global eindeutigen Namespace dar, der aus einer oder mehreren Zonengruppen mit einer oder mehreren Zonen besteht. Zonen enthalten Buckets, die ihrerseits Objekte enthalten. Durch einen Bereich kann das Ceph Object Gateway mehrere Namespaces und deren Konfiguration auf derselben Hardware unterstützen. Ein Bereich umfasst das Konzept von Zeiträumen. Jeder Zeitraum stellt den Zustand der Zonengruppe und der Zonenkonfiguration in der Zeit dar. Jedes Mal, wenn Sie eine Änderung an einer Zonengruppe oder Zone vornehmen, müssen Sie den Zeitraum aktualisieren und bestätigen. Standardmäßig erstellt das Ceph Object Gateway aus Gründen der Abwärtskompatibilität keinen Bereich. Als bewährtes Verfahren empfehlen wir, Bereiche für neue Cluster zu erstellen.
Erstellen Sie einen neuen Bereich namens Gold
für die Konfiguration für mehrere Standorte. Öffnen Sie dazu eine Kommandozeilenschnittstelle auf einem Host, der für die Master-Zonengruppe und -Zone identifiziert wurde. Führen Sie dann folgendes Kommando aus:
cephuser@adm >
radosgw-admin realm create --rgw-realm=gold --default
Wenn der Cluster einen einzigen Bereich umfasst, geben Sie das Flag --default
an. Wenn ‑‑default
angegeben wird, verwendet radosgw-admin
standardmäßig diesen Bereich. Wenn ‑‑default
nicht angegeben ist, muss beim Hinzufügen von Zonengruppen und Zonen entweder das Flag --rgw-realm
oder das Flag --realm-id
angegeben werden, um den Bereich zu identifizieren.
Nach dem Erstellen des Bereichs gibt radosgw-admin
die Bereichskonfiguration zurück:
{ "id": "4a367026-bd8f-40ee-b486-8212482ddcd7", "name": "gold", "current_period": "09559832-67a4-4101-8b3f-10dfcd6b2707", "epoch": 1 }
Ceph generiert eine eindeutige ID für den Bereich, die bei Bedarf die Umbenennung eines Bereichs ermöglicht.
21.13.2.2 Erstellen einer Master-Zonengruppe #
Ein Bereich muss mindestens eine Zonengruppe enthalten, die als Master-Zonengruppe für den Bereich dient. Erstellen Sie eine neue Master-Zonengruppe für die Konfiguration für mehrere Standorte. Öffnen Sie dazu eine Kommandozeilenschnittstelle auf einem Host, der für die Master-Zonengruppe und -Zone identifiziert wurde. Erstellen Sie mit folgendem Kommando eine Master-Zonengruppe mit dem Namen us
:
cephuser@adm >
radosgw-admin zonegroup create --rgw-zonegroup=us \
--endpoints=http://rgw1:80 --master --default
Wenn der Bereich eine einzige Zonengruppe umfasst, geben Sie das Flag --default
an. Wenn --default
angegeben ist, verwendet radosgw-admin
beim Hinzufügen neuer Zonen standardmäßig diese Zonengruppe. Wenn --default
nicht angegeben ist, muss beim Hinzufügen von Zonen entweder das Flag --rgw-zonegroup
oder das Flag --zonegroup-id
angegeben werden, um den Bereich zu identifizieren.
Nach dem Erstellen der Master-Zonengruppe gibt radosgw-admin
die Zonengruppenkonfiguration zurück. Beispiel:
{ "id": "d4018b8d-8c0d-4072-8919-608726fa369e", "name": "us", "api_name": "us", "is_master": "true", "endpoints": [ "http:\/\/rgw1:80" ], "hostnames": [], "hostnames_s3website": [], "master_zone": "", "zones": [], "placement_targets": [], "default_placement": "", "realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7" }
21.13.2.3 Erstellen einer Master-Zone #
Zonen müssen auf einem Ceph Object-Gateway-Knoten erstellt werden, der sich innerhalb der Zone befindet.
Erstellen Sie eine neue Master-Zone für die Konfiguration für mehrere Standorte. Öffnen Sie dazu eine Kommandozeilenschnittstelle auf einem Host, der für die Master-Zonengruppe und -Zone identifiziert wurde. Führen Sie Folgendes aus:
cephuser@adm >
radosgw-admin zone create --rgw-zonegroup=us --rgw-zone=us-east-1 \
--endpoints=http://rgw1:80 --access-key=SYSTEM_ACCESS_KEY --secret=SYSTEM_SECRET_KEY
Die Optionen --access-key
und --secret
sind im obigen Beispiel nicht angegeben. Diese Einstellungen werden der Zone hinzugefügt, wenn im nächsten Abschnitt der Benutzer erstellt wird.
Nach dem Erstellen der Master-Zone gibt radosgw-admin
die Zonenkonfiguration zurück. Beispiel:
{ "id": "56dfabbb-2f4e-4223-925e-de3c72de3866", "name": "us-east-1", "domain_root": "us-east-1.rgw.meta:root", "control_pool": "us-east-1.rgw.control", "gc_pool": "us-east-1.rgw.log:gc", "lc_pool": "us-east-1.rgw.log:lc", "log_pool": "us-east-1.rgw.log", "intent_log_pool": "us-east-1.rgw.log:intent", "usage_log_pool": "us-east-1.rgw.log:usage", "reshard_pool": "us-east-1.rgw.log:reshard", "user_keys_pool": "us-east-1.rgw.meta:users.keys", "user_email_pool": "us-east-1.rgw.meta:users.email", "user_swift_pool": "us-east-1.rgw.meta:users.swift", "user_uid_pool": "us-east-1.rgw.meta:users.uid", "otp_pool": "us-east-1.rgw.otp", "system_key": { "access_key": "1555b35654ad1656d804", "secret_key": "h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q==" }, "placement_pools": [ { "key": "us-east-1-placement", "val": { "index_pool": "us-east-1.rgw.buckets.index", "storage_classes": { "STANDARD": { "data_pool": "us-east-1.rgw.buckets.data" } }, "data_extra_pool": "us-east-1.rgw.buckets.non-ec", "index_type": 0 } } ], "metadata_heap": "", "realm_id": "" }
21.13.2.4 Löschen der Standardzone und -gruppe #
Die folgenden Schritte gehen von einer Konfiguration für mehrere Standorte mit neu installierten Systemen aus, in denen noch keine Daten gespeichert sind. Löschen Sie nicht die Standardzone und ihre Pools, wenn Sie sie bereits zum Speichern von Daten verwenden. Ansonsten werden die Daten gelöscht und können nicht wiederhergestellt werden.
Die Standardinstallation von Object Gateway erstellt die Standard-Zonengruppe namens default
. Löschen Sie die Standardzone, falls sie vorhanden ist. Stellen Sie sicher, dass Sie sie zuerst aus der Standard-Zonengruppe entfernen.
cephuser@adm >
radosgw-admin zonegroup delete --rgw-zonegroup=default
Löschen Sie die Standard-Pools in Ihrem Ceph-Speichercluster, falls sie vorhanden sind:
Im folgenden Schritt wird von einer Konfiguration für mehrere Standorte mit neu installierten Systemen ausgegangen, in denen aktuell noch keine Daten gespeichert sind. Löschen Sie nicht die Standard-Zonengruppe, wenn Sie sie bereits zum Speichern von Daten verwenden.
cephuser@adm >
ceph osd pool rm default.rgw.control default.rgw.control --yes-i-really-really-mean-itcephuser@adm >
ceph osd pool rm default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-itcephuser@adm >
ceph osd pool rm default.rgw.gc default.rgw.gc --yes-i-really-really-mean-itcephuser@adm >
ceph osd pool rm default.rgw.log default.rgw.log --yes-i-really-really-mean-itcephuser@adm >
ceph osd pool rm default.rgw.meta default.rgw.meta --yes-i-really-really-mean-it
Wenn Sie die Standard-Zonengruppe löschen, löschen Sie auch den Systembenutzer. Wenn Ihre Admin-Benutzerschlüssel nicht verteilt sind, schlägt die Object-Gateway-Verwaltungsfunktion des Ceph Dashboards fehl. Wenn Sie mit diesem Schritt fortfahren, machen Sie mit dem nächsten Abschnitt zum Neuerstellen des Systembenutzers weiter.
21.13.2.5 Erstellen von Systembenutzern #
Die ceph-radosgw
-Daemons müssen sich authentifizieren, bevor sie Bereichs- und Zeitrauminformationen abrufen. Erstellen Sie in der Master-Zone einen Systembenutzer, um die Authentifizierung zwischen den Daemons zu vereinfachen:
cephuser@adm >
radosgw-admin user create --uid=zone.user \
--display-name="Zone User" --access-key=SYSTEM_ACCESS_KEY \
--secret=SYSTEM_SECRET_KEY --system
Notieren Sie sich den access_key
und den secret_key
, da die sekundären Zonen sie zur Authentifizierung bei der Master-Zone benötigen.
Fügen Sie den Systembenutzer zur Master-Zone hinzu:
cephuser@adm >
radosgw-admin zone modify --rgw-zone=us-east-1 \
--access-key=ACCESS-KEY --secret=SECRET
Aktualisieren Sie die Periode, damit die Änderungen wirksam werden:
cephuser@adm >
radosgw-admin period update --commit
21.13.2.6 Aktualisieren Sie den Zeitraum mit #
Aktualisieren Sie nach der Aktualisierung der Master-Zonenkonfiguration den Zeitraum:
cephuser@adm >
radosgw-admin period update --commit
Nach dem Aktualisieren des Zeitraums gibt radosgw-admin
die Zeitraumkonfiguration zurück. Beispiel:
{ "id": "09559832-67a4-4101-8b3f-10dfcd6b2707", "epoch": 1, "predecessor_uuid": "", "sync_status": [], "period_map": { "id": "09559832-67a4-4101-8b3f-10dfcd6b2707", "zonegroups": [], "short_zone_ids": [] }, "master_zonegroup": "", "master_zone": "", "period_config": { "bucket_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1 }, "user_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1 } }, "realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7", "realm_name": "gold", "realm_epoch": 1 }
Durch Aktualisieren des Zeitraums wird die Epoche geändert und sichergestellt, dass andere Zonen die aktualisierte Konfiguration erhalten.
21.13.2.7 Starten des Gateways #
Starten und aktivieren Sie den Ceph Object-Gateway-Service auf dem Object-Gateway-Host. Ermitteln Sie mit dem Kommando ceph fsid
die eindeutige FSID des Clusters. Ermitteln Sie den Namen des Object-Gateway-Daemons mit dem Kommando ceph orch ps --hostname HOSTNAME
.
cephuser@ogw >
systemctl start ceph-FSID@DAEMON_NAMEcephuser@ogw >
systemctl enable ceph-FSID@DAEMON_NAME
21.13.3 Konfigurieren sekundärer Zonen #
In den Zonen einer Zonengruppe werden alle Daten reproduziert, sodass gewährleistet ist, dass alle Zonen dieselben Daten umfassen. Beim Erstellen der sekundären Zone führen Sie alle nachfolgenden Operationen auf einem Host aus, der für die sekundäre Zone vorgesehen ist.
Gehen Sie zum Hinzufügen einer dritten Zone genauso vor wie beim Hinzufügen der zweiten Zone. Verwenden Sie einen anderen Zonennamen.
Sie müssen Metadatenvorgänge, wie beispielsweise die Erstellung von Benutzern, auf einem Host innerhalb der Master-Zone ausführen. Die Master-Zone und die sekundäre Zone können Bucket-Vorgänge empfangen, doch die sekundäre Zone leitet Bucket-Vorgänge an die Master-Zone weiter. Wenn die Master-Zone inaktiv ist, schlagen Bucket-Vorgänge fehl.
21.13.3.1 Importieren des Bereichs #
Importieren Sie die Bereichskonfiguration mit dem URL-Pfad, dem Zugriffsschlüssel und dem Geheimnis der Masterzone in der Master-Zonengruppe auf den Host. Geben Sie zum Importieren eines nicht standardmäßigen Bereichs den Bereich mit den Konfigurationsoptionen --rgw-realm
oder --realm-id
an.
cephuser@adm >
radosgw-admin realm pull --url=url-to-master-zone-gateway --access-key=access-key --secret=secret
Durch Importieren des Bereichs wird auch die aktuelle Zeitraumkonfiguration des entfernten Hosts abgerufen und zum aktuellen Zeitraum auch auf diesem Host gemacht.
Wenn dieser Bereich der Standardbereich oder der einzige Bereich ist, machen Sie den Bereich zum Standardbereich.
cephuser@adm >
radosgw-admin realm default --rgw-realm=REALM-NAME
21.13.3.2 Erstellen einer sekundären Zone #
Erstellen Sie eine neue sekundäre Zone für die Konfiguration für mehrere Standorte. Öffnen Sie dazu eine Kommandozeilenschnittstelle auf einem Host, der für die sekundäre Zone identifiziert wurde. Geben Sie die Zonengruppen-ID, den neuen Zonennamen und einen Endpunkt für die Zone an. Verwenden Sie nicht das Flag --master
. Alle Zonen werden standardmäßig in einer Aktiv/Aktiv-Konfiguration ausgeführt. Wenn die sekundäre Zone keine Schreibvorgänge akzeptieren soll, geben Sie das Flag --read-only
an. Dadurch wird eine Aktiv/Passiv-Konfiguration zwischen der Master-Zone und der sekundären Zone erstellt. Geben Sie zusätzlich den access_key
und den secret_key
des generierten Systembenutzers an, der in der Master-Zone der Master-Zonengruppe gespeichert ist. Führen Sie Folgendes aus:
cephuser@adm >
radosgw-admin zone create --rgw-zonegroup=ZONE-GROUP-NAME\
--rgw-zone=ZONE-NAME --endpoints=URL \
--access-key=SYSTEM-KEY --secret=SECRET\
--endpoints=http://FQDN:80 \
[--read-only]
Beispiel:
cephuser@adm >
radosgw-admin zone create --rgw-zonegroup=us --endpoints=http://rgw2:80 \
--rgw-zone=us-east-2 --access-key=SYSTEM_ACCESS_KEY --secret=SYSTEM_SECRET_KEY
{
"id": "950c1a43-6836-41a2-a161-64777e07e8b8",
"name": "us-east-2",
"domain_root": "us-east-2.rgw.data.root",
"control_pool": "us-east-2.rgw.control",
"gc_pool": "us-east-2.rgw.gc",
"log_pool": "us-east-2.rgw.log",
"intent_log_pool": "us-east-2.rgw.intent-log",
"usage_log_pool": "us-east-2.rgw.usage",
"user_keys_pool": "us-east-2.rgw.users.keys",
"user_email_pool": "us-east-2.rgw.users.email",
"user_swift_pool": "us-east-2.rgw.users.swift",
"user_uid_pool": "us-east-2.rgw.users.uid",
"system_key": {
"access_key": "1555b35654ad1656d804",
"secret_key": "h7GhxuBLTrlhVUyxSPUKUV8r\/2EI4ngqJxD7iBdBYLhwluN30JaT3Q=="
},
"placement_pools": [
{
"key": "default-placement",
"val": {
"index_pool": "us-east-2.rgw.buckets.index",
"data_pool": "us-east-2.rgw.buckets.data",
"data_extra_pool": "us-east-2.rgw.buckets.non-ec",
"index_type": 0
}
}
],
"metadata_heap": "us-east-2.rgw.meta",
"realm_id": "815d74c2-80d6-4e63-8cfc-232037f7ff5c"
}
Die folgenden Schritte gehen von einer Konfiguration für mehrere Standorte mit neu installierten Systemen aus, in denen noch keine Daten gespeichert sind. Löschen Sie nicht die Standardzone und ihre Pools, wenn Sie sie bereits zum Speichern von Daten verwenden. Andernfalls gehen die Daten verloren und können nicht wiederhergestellt werden.
Löschen Sie die Standardzone, falls erforderlich:
cephuser@adm >
radosgw-admin zone delete --rgw-zone=default
Löschen Sie die Standard-Pools in Ihrem Ceph-Speichercluster, falls erforderlich:
cephuser@adm >
ceph osd pool rm default.rgw.control default.rgw.control --yes-i-really-really-mean-itcephuser@adm >
ceph osd pool rm default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-itcephuser@adm >
ceph osd pool rm default.rgw.gc default.rgw.gc --yes-i-really-really-mean-itcephuser@adm >
ceph osd pool rm default.rgw.log default.rgw.log --yes-i-really-really-mean-itcephuser@adm >
ceph osd pool rm default.rgw.users.uid default.rgw.users.uid --yes-i-really-really-mean-it
21.13.3.3 Aktualisieren der Ceph-Konfigurationsdatei #
Aktualisieren Sie die Ceph-Konfigurationsdatei auf den Hosts der sekundären Zone. Fügen Sie dazu die Konfigurationsoption rgw_zone
und den Namen der sekundären Zone zum Instanzeintrag hinzu.
Führen Sie hierzu folgendes Kommando aus:
cephuser@adm >
ceph config set SERVICE_NAME rgw_zone us-west
21.13.3.4 Aktualisieren des Zeitraums #
Aktualisieren Sie nach der Aktualisierung der Master-Zonenkonfiguration den Zeitraum:
cephuser@adm >
radosgw-admin period update --commit
{
"id": "b5e4d3ec-2a62-4746-b479-4b2bc14b27d1",
"epoch": 2,
"predecessor_uuid": "09559832-67a4-4101-8b3f-10dfcd6b2707",
"sync_status": [ "[...]"
],
"period_map": {
"id": "b5e4d3ec-2a62-4746-b479-4b2bc14b27d1",
"zonegroups": [
{
"id": "d4018b8d-8c0d-4072-8919-608726fa369e",
"name": "us",
"api_name": "us",
"is_master": "true",
"endpoints": [
"http:\/\/rgw1:80"
],
"hostnames": [],
"hostnames_s3website": [],
"master_zone": "83859a9a-9901-4f00-aa6d-285c777e10f0",
"zones": [
{
"id": "83859a9a-9901-4f00-aa6d-285c777e10f0",
"name": "us-east-1",
"endpoints": [
"http:\/\/rgw1:80"
],
"log_meta": "true",
"log_data": "false",
"bucket_index_max_shards": 0,
"read_only": "false"
},
{
"id": "950c1a43-6836-41a2-a161-64777e07e8b8",
"name": "us-east-2",
"endpoints": [
"http:\/\/rgw2:80"
],
"log_meta": "false",
"log_data": "true",
"bucket_index_max_shards": 0,
"read_only": "false"
}
],
"placement_targets": [
{
"name": "default-placement",
"tags": []
}
],
"default_placement": "default-placement",
"realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7"
}
],
"short_zone_ids": [
{
"key": "83859a9a-9901-4f00-aa6d-285c777e10f0",
"val": 630926044
},
{
"key": "950c1a43-6836-41a2-a161-64777e07e8b8",
"val": 4276257543
}
]
},
"master_zonegroup": "d4018b8d-8c0d-4072-8919-608726fa369e",
"master_zone": "83859a9a-9901-4f00-aa6d-285c777e10f0",
"period_config": {
"bucket_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
}
},
"realm_id": "4a367026-bd8f-40ee-b486-8212482ddcd7",
"realm_name": "gold",
"realm_epoch": 2
}
Durch Aktualisieren des Zeitraums wird die Epoche geändert und sichergestellt, dass andere Zonen die aktualisierte Konfiguration erhalten.
21.13.3.5 Starten des Object Gateways #
Starten und aktivieren Sie auf dem Object-Gateway-Host den Ceph Object-Gateway-Service:
cephuser@adm >
ceph orch start rgw.us-east-2
21.13.3.6 Prüfen des Synchronisierungsstatus #
Prüfen Sie den Synchronisierungsstatus, wenn die sekundäre Zone aktiv ist. Durch die Synchronisierung werden Benutzer und Buckets, die in der Master-Zone erstellt wurden, in die sekundäre Zone kopiert.
cephuser@adm >
radosgw-admin sync status
Die Ausgabe gibt den Status der Synchronisierungsvorgänge an. Beispiel:
realm f3239bc5-e1a8-4206-a81d-e1576480804d (gold) zonegroup c50dbb7e-d9ce-47cc-a8bb-97d9b399d388 (us) zone 4c453b70-4a16-4ce8-8185-1893b05d346e (us-west) metadata sync syncing full sync: 0/64 shards metadata is caught up with master incremental sync: 64/64 shards data sync source: 1ee9da3e-114d-4ae3-a8a4-056e8a17f532 (us-east) syncing full sync: 0/128 shards incremental sync: 128/128 shards data is caught up with source
Sekundäre Zonen akzeptieren zwar Bucket-Vorgänge, leiten allerdings Bucket-Vorgänge an die Master-Zone um. Dann synchronisieren sie sich mit der Master-Zone, um das Ergebnis der Bucket-Vorgänge zu erhalten. Wenn die Master-Zone inaktiv ist, schlagen Bucket-Vorgänge, die in der sekundären Zone ausgeführt werden, fehl. Objektvorgänge sollten jedoch erfolgreich sein.
21.13.3.7 Überprüfung eines Objekts #
Standardmäßig werden Objekte nach einer erfolgreichen Synchronisierung nicht erneut überprüft. Zum Aktivieren der Überprüfung legen Sie die Option rgw_sync_obj_etag_verify
auf true
fest. Danach werden die optionalen Objekte synchronisiert. Mit einer zusätzlichen MD5-Prüfsumme wird sichergestellt, dass die Berechnung sowohl für die Quelle als auch für das Ziel ausgeführt wird. Dies dient dazu, die Integrität der von einem Remote-Server über HTTP abgerufenen Objekte sicherzustellen, einschließlich der Synchronisierung über mehrere Standorte hinweg. Diese Option kann die Leistung von RGWs verringern, da mehr Berechnungen ausgeführt werden müssen.
21.13.4 Allgemeine Objekt-Gateway-Wartung #
21.13.4.1 Prüfen des Synchronisierungsstatus #
Informationen über den Reproduktionsstatus einer Zone können abgefragt werden mit:
cephuser@adm >
radosgw-admin sync status
realm b3bc1c37-9c44-4b89-a03b-04c269bea5da (gold)
zonegroup f54f9b22-b4b6-4a0e-9211-fa6ac1693f49 (us)
zone adce11c9-b8ed-4a90-8bc5-3fc029ff0816 (us-west)
metadata sync syncing
full sync: 0/64 shards
incremental sync: 64/64 shards
metadata is behind on 1 shards
oldest incremental change not applied: 2017-03-22 10:20:00.0.881361s
data sync source: 341c2d81-4574-4d08-ab0f-5a2a7b168028 (us-east)
syncing
full sync: 0/128 shards
incremental sync: 128/128 shards
data is caught up with source
source: 3b5d1a3f-3f27-4e4a-8f34-6072d4bb1275 (us-3)
syncing
full sync: 0/128 shards
incremental sync: 128/128 shards
data is caught up with source
Die Ausgabe kann je nach Synchronisierungsstatus unterschiedlich sein. Bei der Synchronisierung gibt es zwei verschiedene Arten von Shards:
- Rückständige Shards
Rückständige Shards benötigen entweder eine vollständige oder eine inkrementelle Datensynchronisierung, weil sie nicht auf dem neuesten Stand sind.
- Wiederherstellungs-Shards
Bei Wiederherstellungs-Shards ist während der Synchronisierung ein Fehler aufgetreten, sodass sie für einen erneuten Versuch markiert wurden. Der Fehler tritt meistens bei kleineren Problemen auf, z. B. wenn eine Sperre für einen Bucket aktiviert wird. In der Regel lösen sich diese Probleme von selbst.
21.13.4.2 Prüfen von Protokollen #
Bei mehreren Standorten können Sie das Metadaten-Protokoll (mdlog
), das Bucket-Index-Protokoll (bilog
) und das Datenprotokoll (datalog
) auslagern. Sie können sie auflisten und auch kürzen. Dies ist in den meisten Fällen nicht nötig, da die Option rgw_sync_log_trim_interval
standardmäßig auf 20 Minuten eingestellt ist. Wenn sie nicht manuell auf 0 festgelegt wird, müssen Sie nichts kürzen, was zu anderen Nebeneffekten führen kann.
21.13.4.3 Ändern der Metadaten-Master-Zone #
Seien Sie vorsichtig, wenn Sie die Zone ändern, die der Metadaten-Master ist. Wenn eine Zone die Synchronisierung der Metadaten mit der aktuellen Master-Zone noch nicht abgeschlossen hat, kann sie bei der Hochstufung zum Master keine verbleibenden Einträge mehr verarbeiten und diese Änderungen gehen verloren. Aus diesem Grund wird empfohlen zu warten, bis der radosgw-admin
-Synchronisierungsstatus einer Zone die Metadaten-Synchronisierung abgeschlossen hat, bevor sie zum Master hochgestuft wird. Ähnlich verhält es sich, wenn Änderungen an Metadaten von der aktuellen Master-Zone verarbeitet werden, während eine andere Zone zum Master hochgestuft wird. Diese Änderungen gehen wahrscheinlich verloren. Um dies zu vermeiden, empfehlen wir, alle Object-Gateway-Instanzen in der vorherigen Master-Zone herunterzufahren. Nach dem Hochstufen einer anderen Zone kann deren neuer Zeitraum mit radosgw-admin
abgerufen werden und die Gateways können neu gestartet werden.
Führen Sie zum Hochstufen einer Zone (z. B. Zone us-west
in der Zonengruppe us
) zum Metadaten-Master folgende Kommandos für diese Zone aus:
cephuser@ogw >
radosgw-admin zone modify --rgw-zone=us-west --mastercephuser@ogw >
radosgw-admin zonegroup modify --rgw-zonegroup=us --mastercephuser@ogw >
radosgw-admin period update --commit
Dadurch wird ein neuer Zeitraum generiert, und die Object-Gateway-Instanzen in der Zone us-west
senden diesen Zeitraum an andere Zonen.
21.13.5 Durchführen von Failover und Disaster Recovery #
Falls die Master-Zone ausfällt, führen Sie zum Zweck eines Disaster Recovery ein Failover zur sekundären Zone durch.
Machen Sie die sekundäre Zone zur Master- und Standardzone. Beispiel:
cephuser@adm >
radosgw-admin zone modify --rgw-zone=ZONE-NAME --master --defaultStandardmäßig wird das Ceph Object Gateway in einer Aktiv/Aktiv-Konfiguration ausgeführt. Wenn der Cluster zur Ausführung in einer Aktiv/Passiv-Konfiguration konfiguriert wurde, ist die sekundäre Zone eine schreibgeschützte Zone. Entfernen Sie den Status
--read-only
, damit die Zone Schreibvorgänge empfangen kann. Beispiel:cephuser@adm >
radosgw-admin zone modify --rgw-zone=ZONE-NAME --master --default \ --read-only=falseAktualisieren Sie die Periode, damit die Änderungen wirksam werden:
cephuser@adm >
radosgw-admin period update --commitStarten Sie das Ceph Object Gateway neu:
cephuser@adm >
ceph orch restart rgw
Wenn die frühere Master-Zone wiederhergestellt ist, setzen Sie die Operation zurück.
Rufen Sie in der wiederhergestellten Zone den Zeitraum von der aktuellen Master-Zone ab.
cephuser@adm >
radosgw-admin realm pull --url=URL-TO-MASTER-ZONE-GATEWAY \ --access-key=ACCESS-KEY --secret=SECRETMachen Sie die wiederhergestellte Zone zur Master- und Standardzone:
cephuser@adm >
radosgw-admin zone modify --rgw-zone=ZONE-NAME --master --defaultAktualisieren Sie die Periode, damit die Änderungen wirksam werden:
cephuser@adm >
radosgw-admin period update --commitStarten Sie das Ceph Object Gateway in der wiederhergestellten Zone neu:
cephuser@adm >
ceph orch restart rgw@rgwWenn die sekundäre Zone eine schreibgeschützte Konfiguration sein muss, aktualisieren Sie die sekundäre Zone:
cephuser@adm >
radosgw-admin zone modify --rgw-zone=ZONE-NAME --read-onlyAktualisieren Sie die Periode, damit die Änderungen wirksam werden:
cephuser@adm >
radosgw-admin period update --commitStarten Sie das Ceph Object Gateway in der sekundären Zone neu:
cephuser@adm >
ceph orch restart@rgw