 
      まえがき
radosで地理的に分散したレプリケーションを設定し始めたとき、公式ドキュメントがjewelの新しいメジャーリリースには少し不適切であり、実際の指示がまだインターネットにないという問題に遭遇しました。 このマニュアルは、小さな独自の地理的に分散されたs3クラウドが必要な場合に多くの時間を節約します。
いくつかの用語
ゾーン:オブジェクトのコピーのグループ。そのうちの1つはマスターです
ゾーン グループ: ゾーンで構成
ゾーングループマップ:システム全体のマップを含むゾーングループマップ、つまり 異なるゾーン グループとゾーン間の関係
レルム: ゾーングループで構成されます
期間: realmの現在の状態の構造。 relam、zonegroup、またはzoneの各新しい変更には、新しい期間が必要です
ソースデータ
OS: ubuntu 14.04
レルム: project1
zonegroup: ru
ゾーン: dc1、dc2
すでに2つのデータセンターに2つのcephクラスターを展開しています。 これには多くの情報があるので、説明しません。 keyとsecret_keyをすぐに生成し、すべてのゾーンとシステムユーザーに対して同一にします。
SYSTEM_ACCESS_KEY
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 20 | head -n 1
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
     SYSTEM_SECRET_KEY
 cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 40 | head -n 1
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
     
      構成の準備
レプリケーションを機能させるには、両方のデータセンターで同一の設定、jsonファイルを準備する必要があります。
zonegroup.json
 { "name": "ru", "api_name": "ru", "is_master": "true", "endpoints": [ "http:\/\/s3.dc1.superdomain.ru:80\/" ], "master_zone": "ru-dc1", "zones": [ { "name": "ru-dc1", "endpoints": [ "http:\/\/s3.dc1.superdomain.ru:80\/" ], "log_meta": "true", "log_data": "true", }, { "name": "ru-dc2", "endpoints": [ "http:\/\/s3.dc2.superdomain.ru:80\/" ], "log_meta": "true", "log_data": "true", } ], "placement_targets": [ { "name": "default-placement", "tags": [] } ], "default_placement": "default-placement", }
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
     
      dc1.json
 { "name": "ru-dc1", "domain_root": "ru-dc1.rgw.data.root", "control_pool": "ru-dc1.rgw.control", "gc_pool": "ru-dc1.rgw.gc", "log_pool": "ru-dc1.rgw.log", "intent_log_pool": "ru-dc1.rgw.intent-log", "usage_log_pool": "ru-dc1.rgw.usage", "user_keys_pool": "ru-dc1.rgw.users.keys", "user_email_pool": "ru-dc1.rgw.users.email", "user_swift_pool": "ru-dc1.rgw.users.swift", "user_uid_pool": "ru-dc1.rgw.users.uid", "system_key": { "access_key": "SYSTEM_ACCESS_KEY", "secret_key": "SYSTEM_SECRET_KEY" }, "placement_pools": [ { "key": "default-placement", "val": { "index_pool": "ru-dc1.rgw.buckets.index", "data_pool": "ru-dc1.rgw.buckets.data", "data_extra_pool": "ru-dc1.rgw.buckets.non-ec", "index_type": 0 } } ], "metadata_heap": "ru-dc1.rgw.meta", }
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
     
      dc2.json
 { "name": "ru-dc2", "domain_root": "ru-dc2.rgw.data.root", "control_pool": "ru-dc2.rgw.control", "gc_pool": "ru-dc2.rgw.gc", "log_pool": "ru-dc2.rgw.log", "intent_log_pool": "ru-dc2.rgw.intent-log", "usage_log_pool": "ru-dc2.rgw.usage", "user_keys_pool": "ru-dc2.rgw.users.keys", "user_email_pool": "ru-dc2.rgw.users.email", "user_swift_pool": "ru-dc2.rgw.users.swift", "user_uid_pool": "ru-dc2.rgw.users.uid", "system_key": { "access_key": "SYSTEM_ACCESS_KEY", "secret_key": "SYSTEM_SECRET_KEY" }, "placement_pools": [ { "key": "default-placement", "val": { "index_pool": "ru-dc2.rgw.buckets.index", "data_pool": "ru-dc2.rgw.buckets.data", "data_extra_pool": "ru-dc2.rgw.buckets.non-ec", "index_type": 0 } } ], "metadata_heap": "ru-dc2.rgw.meta", }
      
      
        
        
        
      
    
        
        
        
      
      
        
        
        
      
    
     
      最初のデータセンターの準備
-   radosgwのジェネレータキー: 
      
 
 
 
 ceph auth get-or-create client.rgw.ru-dc1 osd 'allow rwx' mon 'allow rwx' -o /etc/ceph/ceph.client.radosgw.keyring
 
 
 
 
 
 
-   radosgwを説明するセクションを/etc/ceph/ceph.confに追加します 。 
      
 
 
 
 [client.rgw.ru-dc1]
 
 rgw_zonegroup = ru
 
 rgw_zone = ru-dc1
 
 log_file = /var/log/ceph/client.rgw.dc1.log
 
 keyring = /etc/ceph/ceph.client.radosgw.keyring
 
 rgw_dns_name = s3.dc1.superdomain.ru
 
 rgw_socket_path = /tmp/rgw.ru-dc1.sock
 
 host = ceph1
 
 
 
 
 
 
 
 
-  現在プールが作成されているceph osd pool lsコマンドを見て、 rbdを除くすべてを削除します。cefosd pool delete $ pool $ pool --yes-i-really-really-mean-itコマンド (はい、正確に2回)、ここで$ poolはプールの名前です。 
      
 
 
 
 私はそれを持っていました:
 
 
 
 ceph osd pool delete default.rgw.control default.rgw.control --yes-i-really-really-mean-it ceph osd pool delete default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-it ceph osd pool delete default.rgw.gc default.rgw.gc --yes-i-really-really-mean-it ceph osd pool delete default.rgw.log default.rgw.log --yes-i-really-really-mean-it
 
 
 
 
 
 
-  そして今、必要なものを作成します。 
      
 
 
 
 ceph osd pool create .rgw.root 8 ceph osd pool create ru-dc1.rgw.control 8 ceph osd pool create ru-dc1.rgw.data.root 8 ceph osd pool create ru-dc1.rgw.gc 8 ceph osd pool create ru-dc1.rgw.log 8 ceph osd pool create ru-dc1.rgw.intent-log 8 ceph osd pool create ru-dc1.rgw.usage 8 ceph osd pool create ru-dc1.rgw.users.keys 8 ceph osd pool create ru-dc1.rgw.users.email 8 ceph osd pool create ru-dc1.rgw.users.swift 8 ceph osd pool create ru-dc1.rgw.users.uid 8 ceph osd pool create ru-dc1.rgw.buckets.index 8 ceph osd pool create ru-dc1.rgw.buckets.data 128 128 ceph osd pool create ru-dc1.rgw.meta 8
 
 
 
 
 
 
-   radosgwクライアント用のディレクトリを作成し、所有者を編集します。 
      
 
 
 
 mkdir /var/lib/ceph/radosgw/ceph-rgw.ru-dc1 chown ceph:ceph /var/lib/ceph/radosgw/ceph-rgw.ru-dc1
 
 
 
 
 
 
-  デフォルトであったrealm、zonegroup、およびzoneを削除します。 コマンドradosgw-admin(realm | zonegroup | zone)listで表示できます。次のようにしました。 
      
 
 
 
 radosgw-admin zonegroup delete --rgw-zonegroup=default radosgw-admin zone delete --rgw-zone=default
 
 
 
 
 
 
-   レルム、ゾーングループ、ゾーン 、新しい期間を作成します。 
      
 
 
 
 radosgw-admin realm create --rgw-realm=project1 --default radosgw-admin zonegroup set --rgw-realm=project1 --rgw-zonegroup=ru --default < zonegroup.json radosgw-admin zone set --rgw-realm=project1 --rgw-zonegroup=ru --rgw-zone=ru-dc1 --default < dc1.json radosgw-admin zone set --rgw-realm=project1 --rgw-zonegroup=ru --rgw-zone=ru-dc2 < dc2.json radosgw-admin period update --commit
 
 
 
 
 
 
-  クラウドで動作するようにapache2を配置および構成します。 これには、 apache2自体とlibapache2-mod-fastcgiが必要です。 標準のubuntuリポジトリのバージョンを使用したレプリケーションは正常に機能しませんでしたが、 cefチームがこれを処理し、別のカブで処理することができます。 
      
 
 
 
 echo “deb http://gitbuilder.ceph.com/libapache-mod-fastcgi-deb-trusty-x86_64-basic/ref/master trusty main” > /etc/apt/sources.list.d/ceph-fastcgi.list apt-key adv --keyserver keyserver.ubuntu.com --recv-key 6EAEAE2203C3951A apt-get update apt-get install apache2 libapache2-mod-fastcgi a2enmod rewrite
 
 
 
 
 
 
-   Apache構成自体: 
      
 
 
 
 FastCgiExternalServer /var/www/s3gw.fcgi -socket /tmp/rgw.ru-dc1.sock <VirtualHost *:80> ServerName s3.dc1.superdomain.ru ServerAlias *.s3.dc1.superdomain.ru DocumentRoot /var/www RewriteEngine On RewriteRule ^/(.*) /s3gw.fcgi?%{QUERY_STRING} [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] <IfModule mod_fastcgi.c> <Directory /var/www> Options +ExecCGI AllowOverride All SetHandler fastcgi-script Order allow,deny Allow from all AuthBasicAuthoritative Off </Directory> </IfModule> AllowEncodedSlashes On ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log vhost_combined ServerSignature Off </VirtualHost>
 
 
 
 
 
 
-   Apacheの再起動: 
      
 
 
 
 service apache2 restart
 
 
 
 
 
 
-  スクリプト/var/www/s3gw.fcgiを作成します 
      
 
 
 
 #!/bin/sh exec /usr/bin/radosgw -c /etc/ceph/ceph.conf -n ceph-rgw.ru-dc1
 
 
 
 
 
 
-  編集権: 
      
 
 
 
 chmod +x /var/www/s3gw.fcgi
 
 
 
 
 
 
-  最後に、 radosgwを起動します 。 
      
 
 
 
 start radosgw id=rgw.ru-dc1
 
 
 
 
 
 
-  システムユーザーを作成します。 
      
 
 
 
 radosgw-admin user create --uid=zone.user --display-name="ZoneUser" --access-key=SYSTEM_ACCESS_KEY --secret=SYSTEM_SECRET_KEY --system
 
 
 
 
 
 
これで、最初のDCをセットアップし、2番目のDCに進みます。
№2
2番目のクラスターについても同様にすべてのポイントを実行し、単にdc1をdc2に置き換えます。
ほんの少し
現在の段階では、バケットでデータ複製を取得しますが、バケットとユーザー自身のリストを同期するには、 radosgw-agentが必要です。
-  最初のデータセンターに配置しました。 
      
 
 
 
 apt-get install radosgw-agent
 
 
 
 
 
 
-   config /etc/ceph/radosgw-agent/default.confを作成します 。 
      
 
 
 
 src_zone: ru-dc1 source: http://s3.dc1.superdomain.ru:80 src_access_key: SYSTEM_ACCESS_KEY src_secret_key: SYSTEM_SECRET_KEY destination: http://s3.dc2.superdomain.ru:80 dest_access_key: SYSTEM_ACCESS_KEY dest_secret_key: SYSTEM_SECRET_KEY log_file: /var/log/ceph/sync.dc1-dc2.log dest_zone: ru-dc2
 
 
 
 
 
 
-  そしてそれを実行します: 
      
 
 
 
 /etc/init.d/radosgw-agent start
 
 
 
 
 
 
結果は何ですか?
そして、最終的には、アクティブ/アクティブの地理的に分散したs3クラウドを取得します。 オブジェクトのすべての書き込み/削除操作は、数十秒の遅延で非同期に実行されます。 唯一の制限は、2番目のデータセンターでバケットを作成できないことです。