ceph metasearch – elasticsearch backend - part 2
Posted on Thu 27 April 2017 in Ceph • 2 min read
requirements
- ceph cluster (kraken release)
- elasticsearch
The rgw syncer is only used/triggered in multisite configurations - so we need to setup a second zone for the metasearch.
environment / settings
export rgwhost="192.168.122.80"
export elastichost="192.168.122.71"
export realm="demo"
export zonegrp="zone-1"
export 1zone="zone1-a"
export 2zone="zone1-b" # used for metasearch
export sync_akey="$( cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 20 | head -n 1 )"
export sync_skey="$( cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 40 | head -n 1 )"
export user_akey="$( cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 20 | head -n 1 )"
export user_skey="$( cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 40 | head -n 1 )"
setup (see also part1)
create first zone
# radosgw-admin realm create --rgw-realm=${realm} --default
# radosgw-admin zonegroup create --rgw-realm=${realm} --rgw-zonegroup=${zonegrp} --endpoints=http://${rgwhost}:80 --master --default
# radosgw-admin zone create --rgw-realm=${realm} --rgw-zonegroup=${zonegrp} --rgw-zone=${1zone} --endpoints=http://${rgwhost}:80 --access-key=${sync_akey} --secret=${sync_skey} --master --default
# radosgw-admin user create --uid=sync --display-name="zone sync" --access-key=${sync_akey} --secret=${sync_skey} --system
# radosgw-admin period update --commit
# systemctl restart ceph-radosgw@rgw.${rgwhost}
create second zone
# radosgw-admin zone create --rgw-realm=${realm} --rgw-zonegroup=${zonegrp} --rgw-zone=${2zone} --access-key=${sync_akey} --secret=${sync_skey} --endpoints=http://${rgwhost}:81
# radosgw-admin zone modify --rgw-realm=${realm} --rgw-zonegroup=${zonegrp} --rgw-zone=${2zone} --tier-type=elasticsearch --tier-config=endpoint=http://${elastichost}:9200,num_replicas=1,num_shards=10
# radosgw-admin period update --commit
Restart the first radosgw and the start the second radosgw. For example:
# screen -dmS rgw2zone radosgw --keyring /etc/ceph/ceph.client.admin.keyring -f --rgw-zone=${2zone} --rgw-frontends="civetweb port=81"
Check elasticsearch for the new index:
# curl http://${elastichost}:9200/_cat/indices | grep rgw-${realm}
yellow open rgw-demo z0UiKOOFQl682yILobYbMw 5 1 1 0 11.7kb 11.7kb
modify header/metadata
create a user
radosgw-admin user create --uid=rmichel --display-name="rmichel" --access-key=${user_akey} --secret=${user_skey}
upload some test data....
s3cmd is configured with the ${user_akey}
+ ${user_skey}
and the ${rgwhost}:80
as the endpoint.
# s3cmd modify --add-header x-amz-meta-color:green s3://bucket1/admin.key
modify: 's3://bucket1/admin.key'
# s3cmd info s3://bucket1/admin.key
s3://bucket1/admin.key (object):
File size: 63
Last mod: Thu, 27 Apr 2017 21:14:55 GMT
MIME type: text/plain
Storage: STANDARD
MD5 sum: ee40e385a45c4855bd360cfbdbd48711
SSE: none
policy: bucket11000falseadmin.key2017-04-27T21:14:55.494Z"ee40e385a45c4855bd360cfbdbd48711"63STANDARDrmichelrmichel
cors: none
ACL: rmichel: FULL_CONTROL
x-amz-meta-color: green
x-amz-meta-s3cmd-attrs: uid:0/gname:root/uname:root/gid:0/mode:33152/mtime:1493326171/atime:1493326171/md5:ee40e385a45c4855bd360cfbdbd48711/ctime:1493326171
query elasticsearch
The radosgw creates a index with the name rgw-${realm}
(ref ceph.git)
In my case the url is http://${elastichost}:9200/rgw-${realm}/
# curl http://192.168.122.71:9200/rgw-demo/_search?q=meta.custom.color=green | python -m json.tool
{
"_shards": {
"failed": 0,
"successful": 5,
"total": 5
},
"hits": {
"hits": [
{
"_id": "d9b0c7a5-f9e5-4c6e-a0c2-48642840c98b.14125.1:admin.key:",
"_index": "rgw-demo",
"_score": 0.23691465,
"_source": {
"bucket": "bucket1",
"instance": "",
"meta": {
"content_type": "text/plain",
"custom": {
"color": "green",
"s3cmd-attrs": "uid:0/gname:root/uname:root/gid:0/mode:33152/mtime:1493326171/atime:1493326171/md5:ee40e385a45c4855bd360cfbdbd48711/ctime:1493326171"
},
"etag": "ee40e385a45c4855bd360cfbdbd48711",
"mtime": "2017-04-27T21:14:55.483Z",
"size": 63,
"x-amz-copy-source": "/bucket1/admin.key",
"x-amz-date": "Thu, 27 Apr 2017 21:14:55 +0000",
"x-amz-metadata-directive": "REPLACE"
},
"name": "admin.key",
"owner": {
"display_name": "rmichel",
"id": "rmichel"
},
"permissions": [
"rmichel"
]
},
"_type": "object"
}
],
"max_score": 0.23691465,
"total": 1
},
"timed_out": false,
"took": 102
}