Ceph Object Gateway using Ceph-deploy

Ceph Object Gateway is an object storage interface built on top of librados to provide applications with a RESTful gateway to Ceph Storage Clusters. Ceph Object Storage supports two interfaces:

S3-compatible: Provides object storage functionality with an interface that is compatible with a large subset of the Amazon S3 RESTful API.

Swift-compatible: Provides object storage functionality with an interface that is compatible with a large subset of the OpenStack Swift API.

My ceph cluster setup

ceph version  : (10.2.1) Jewel

mon, osd1 and osd2 - mon-server(192.168.1.10)
osd3 and osd4 	 - node2(192.168.1.11)
gateway node       - gateway(192.168.1.12)
OS				 - Ubuntu Trusty(14.04.2 LTS)
User 			  - megamsys (with sudoer permission)

To run the Ceph object gateway service on Ubuntu 14.04 (Trusty), you should have a running Ceph cluster and the gateway host should have access to storage and public networks.

In my case, I've done the follwing in mon-server(192.168.1.10)

INSTALL CEPH OBJECT GATEWAY DAEMON USING CEPH-DEPLOY

Ceph-deploy tool is reduced the effort to setup gateway.

And make sure you have password less access for ceph cluster mon and gateway for the apropriate user.

Run the below commands on admin node

$ su megamsys

$ cd /home/megamsys/ceph-cluster

$ ceph-deploy install --rgw gateway

$ ceph-deploy admin gateway

$ ceph-deploy rgw create gateway

Civetweb runs on port 7480 by default.

To change the default port (e.g., to port 80), modify your Ceph configuration file in the working directory of your admin node. Add a section entitled [client.rgw.< gateway-node >], replacing < gateway-node > with the short node name of your Ceph Object Gateway node (i.e., hostname -s).

append the following after the [global] section:

[client.rgw.gateway]
rgw_frontends = "civetweb port=80"

Push the updated configuration file to your Ceph Object Gateway node (and other Ceph nodes):

$ ceph-deploy --overwrite-conf config push mon-server gatway node2

Run the below command on gateway-node

$ sudo service radosgw restart id=rgw.gateway

CREATE POOLS

If pools already exist, no problem. If not, create all the pools listed below

$ ceph osd pool create .rgw.buckets 128 128

.rgw
.rgw.root
.rgw.control
.rgw.gc
.rgw.buckets
.rgw.buckets.index
.log
.intent-log
.usage
.users
.users.email
.users.swift
.users.uid

calculate you pg_num using

max(128, Nearest power of 2 (No. of OSDs * 100 / No. of Replications / 10))

for example

max(128 ,Nearest Power of 2 (4 * 100 / 2 /10))

NOTE if write permission is given, Ceph Object Gateway will create pools automatically.

To increase your pg_num

ceph osd pool set < pool name > pg_num 128
ceph osd pool set < pool name > pgp_num 128

USING THE GATEWAY

CREATE A RADOSGW USER FOR S3 ACCESS

$ sudo radosgw-admin user create --uid="testuser" --display-name="First User"

The output of the command will be something like the following:

{"user_id": "testuser",
"display_name": "First User",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"auid": 0,
"subusers": [],
"keys": [
{ "user": "testuser",
"access_key": "I0PJDPCIYZ665MW88W9R",
"secret_key": 	"dxaXZ8U90SXydYzyS5ivamEP20hkLSUViiaR+ZDA"}],
"swift_keys": [],
"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": []}

NOTE The values of keys->access_key and keys->secret_key are needed for access validation.

ACCESS VERIFICATION

install the python-boto package

$ sudo apt-get install python-boto

Create the Python script:

$ nano s3.py

import boto
import boto.s3.connection
access_key = 'YOUR_ACCESS_KEY'
secret_key = 'YOUR_SECRET_KEY'
conn = boto.connect_s3(
aws_access_key_id = access_key,
aws_secret_access_key = secret_key,
host = '{FQDN}',
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,
)

Run the script:

$ python s3.py

The output will be something like the following:

my-new-bucket 2016-05-21T17:09:10.000Z

Test in ruby language

To test ceph-gateway, we have use rubygem s3. Source code is in https://github.com/megamsys/radosgw-s3

Revert installation

There are useful commands to purge the Ceph gateway nstallation and configuration from every node so that one can start over again from a clean state.

This will remove Ceph configuration and keys

ceph-deploy purgedata gateway

This will also remove Ceph packages

ceph-deploy purge gateway

IF you received the below error when you attempt to install radosgw again client.rgw.gateway exists but key does not match

Execute this to fix the error ceph auth del client.rgw.gateway

VirtEngine by DET.io

VirtEngine by DET.io
VirtEngine specializes in building Virtualization Software and powering Cloud Service Providers / Hosting Providers..

Meet VirtEngine at HostingCon India 2016!

Virtualization platform VirtEngine will be exhibiting in HostingCon India 2016! Continue reading

Installing VirtEngine on CentOS

Published on October 18, 2016

Cassandra Replication - HA

Published on July 14, 2016