CEPH - ubuntu install radosgw by manual

如果安裝的node是完全沒安裝過ceph的需加入下列到source.list
$ wget -q -O- https://raw.github.com/ceph/ceph/master/keys/autobuild.asc | sudo apt-key add - echo deb http://gitbuilder.ceph.com/apache2-deb-$(lsb_release -sc)-x86_64-basic/ref/master $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph-apache.list $ echo deb http://gitbuilder.ceph.com/libapache-mod-fastcgi-deb-$(lsb_release -sc)-x86_64-basic/ref/master $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph-fastcgi.list

我們在這邊是把radosgw安裝至ceph-mon上,所以跳過上述步驟直接安裝
$ sudo apt-get update && sudo apt-get install apache2 libapache2-mod-fastcgi

# 增加一行ServerName {fqdn},這邊是ceph-mon
$ sudo vim /etc/apache2/apache2.conf
ServerName ceph-mon

$ sudo a2enmod rewrite

$ sudo a2enmod fastcgi

$ sudo service apache2 restart


# 安裝radosgw,radosgw-agent $ sudo apt-get install radosgw radosgw-agent

在ceph-mon上執行以下動作
# 建立user跟設定權限,並產生keyring到/etc/ceph底下
$ sudo ceph auth get-or-create client.radosgw.gateway osd 'allow rwx' mon 'allow rwx' -o /etc/ceph/ceph.client.radosgw.keyring

# 或者使用以下cmd
$ sudo ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.gateway --gen-key

$ sudo ceph-authtool -n client.radosgw.gateway --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring

# 把key加入cluster中
$ sudo ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.gateway -i /etc/ceph/ceph.client.radosgw.keyring


加入radosgw section
$ vim /etc/ceph/ceph.conf [client.radosgw.gateway] host = ceph-mon keyring = /etc/ceph/ceph.client.radosgw.keyring rgw socket path = /var/run/ceph/ceph.radosgw.gateway.fastcgi.sock log file = /var/log/ceph/radosgw.log rgw dns name = ceph-mon

並把新的ceph.conf複製到其他ceph host上
# 我們這邊是到admin node的ceph-deploy工具來複製 $ ceph-deploy --overwrite-conf config pull ceph-mon
$ ceph-deploy --overwrite-conf config push ceph-1 ceph-2 ceph-3

==Note==

如果是新版的radosgw會自動建立相關的radosgw pool,如果沒有自動建立需我們自己創立
# 利用cmd顯示目前的pool,如果有相關rgw的pool即可跳過
$ ceph df GLOBAL: SIZE AVAIL RAW USED %RAW USED 9182M 9041M 141M 1.54 POOLS: NAME ID USED %USED MAX AVAIL OBJECTS rbd 0 0 0 3012M 0 .rgw.root 1 1636 0 3012M 4 default.rgw.control 2 0 0 3012M 8 default.rgw.data.root 3 616 0 3012M 2 default.rgw.gc 4 0 0 3012M 32 default.rgw.log 5 0 0 3012M 127 default.rgw.users.uid 6 505 0 3012M 2 default.rgw.users.keys 19 12 0 3012M 1 default.rgw.meta 20 1954 0 3012M 5 default.rgw.users.swift 21 12 0 3012M 1 default.rgw.buckets.index 22 0 0 3012M 1

# 沒有的話請複製以下cmd手動建立pool

ceph osd pool create .rgw 128 128
ceph osd pool create .rgw.root 128 128
ceph osd pool create .rgw.control 128 128
ceph osd pool create .rgw.gc 128 128
ceph osd pool create .rgw.buckets 128 128
ceph osd pool create .rgw.buckets.index 128 128
ceph osd pool create .log 128 128
ceph osd pool create .intent-log 128 128
ceph osd pool create .usage 128 128
ceph osd pool create .users 128 128
ceph osd pool create .users.email 128 128
ceph osd pool create .users.swift 128 128
ceph osd pool create .users.uid 128 128

加入一個ceph object gateway腳本
$ vim /var/www/s3gw.fcgi #!/bin/sh exec /usr/bin/radosgw -c /etc/ceph/ceph.conf -n client.radosgw.gateway


# 修改權限
$ sudo chmod +x /var/www/html/s3gw.fcgi

$ sudo chown www-data:www-data /var/www/html/s3gw.fcgi

$ sudo mkdir -p /var/lib/ceph/radosgw/ceph-radosgw.gateway

建立radosgw的sites-available conf
# vim /etc/apache2/sites-available/rgw.conf <VirtualHost *:80> ServerName ceph-mon ServerAlias *.ceph-mon DocumentRoot /var/www/html 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 combined ServerSignature Off </VirtualHost>  # 讓rgw.conf生效
# 重啟apache2 ,啟動radosgw
$ sudo a2ensite rgw.conf $ sudo a2dissite default $ sudo service apache2 restart $ sudo /etc/init.d/radosgw start

==利用s3測試radosgw是否安裝成功==

如果是用ceph-deploy安裝radosgw 
# 先建立使用者
$ sudo radosgw-admin user create --uid="testuser" --display-name="First User"

# 再建立swift使用者
$ sudo radosgw-admin subuser create --uid=testuser --subuser=testuser:swift --access=full

# 產生私密
$ sudo radosgw-admin key create --subuser=testuser:swift --key-type=swift --gen-secret

# 注意:如果生成的key中有"\",最后把这个user删掉,再重新生成直到不含"\": $ radosgw-admin user rm --uid=testuser
$ sudo apt-get install python-boto

$ radosgw-admin user info --uid=testuser

{
"user_id": "testuser",
"display_name": "First User",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [
{
"id": "testuser:swift",
"permissions": "full-control"
}
],
"keys": [
{
"user": "testuser",
"access_key": "209P7GGVYLLEKDBISCKA",
"secret_key": "rX4cglqBofChInsTUomUgOAFycmv9yv08vOIhRrH"
}
],
"swift_keys": [
{
"user": "testuser:swift",
"secret_key": "fwo6YU2pazqBY1VUuVG1TBMebCNNQiBLhpAr70aN"
}
],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"max_size_kb": -1,
"max_objects": -1
},
"temp_url_keys": []
}
$ vi s3test.py #複製以下內容至s3test.py import boto import boto.s3.connection access_key = '209P7GGVYLLEKDBISCKA' secret_key = 'rX4cglqBofChInsTUomUgOAFycmv9yv08vOIhRrH' conn = boto.connect_s3( aws_access_key_id = access_key, aws_secret_access_key = secret_key, host = 'ceph-mon', port = 80, 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}\t{created}".format( name = bucket.name, created = bucket.creation_date
)
其他常用radosgw cmd
# 列出所有的user
$ radosgw-admin metadata list user

# 列出所有的bucket
$ radosgw-admin buckets list

# 列出特定使用者的資訊
$ radosgw-admin user info --uid=testuser

# 列出特定bucket的所有object
$ rados --pool=.rgw.buckets ls

# 刪除特定buckets的object
$ rados --pool=.rgw.buckets ls | grep __shadow_ | xargs rados --pool=.rgw.buckets rm

==參考連結==

留言

這個網誌中的熱門文章

Python - 計算特定目錄底下的檔案以及目錄數量

PHP - 產生qrcode

devstack安裝all in one openstack(pike)