6 min read

Using RadosGW as a drop-in replacement for Swift

Using RadosGW as a drop-in replacement for Swift

Hello Folks! Artikel ini lebih seperti catatan untuk diri sendiri, tetapi ini mungkin membantu jika anda mencari cara untuk mengintegrasikan Openstack Swift dengan Ceph Object Storage yaitu Ceph Rados Gateway.

Pendahuluan

OpenStack Swift adalah project open-source Openstack yang menyediakan layanan Object Store. Swift ideal untuk menyimpan data yang bersifat tidak terstruktur, seperti file gambar, video, dan data arsip.

Ceph RADOS Gateway (RadosGW) adalah komponen dari sistem penyimpanan terdistribusi Ceph, yang menyediakan antarmuka RESTful untuk mengakses dan menyimpan objek dalam Ceph Storage Cluster.

Pada integrasi antara Openstack Swift dengan RadosGW, sebenarnya Swift tidak dideploy sama sekali. Saya akan memanfaatkan kompatibilitas API Swift pada Rados Gateway dan juga API S3 jika diinginkan.

Sehingga endpoint dari layanan Object Store Swift langsung diarahkan ke RadosGW milik Ceph. Saya akan menggunakan Ceph dan API Swift, namun tidak menggunakan Swift itu sendiri.

End-user tidak akan melihat perbedaan dengan vanilla Swift deployment, tetap menggunakan Swift API, tetap melakukan autentikasi dengan Keystone.

Prasyarat

Saya tidak akan menjelaskan bagaimana cara deploy Openstack dan Ceph pada artikel ini. Untuk Deployment Openstack dan Ceph bisa disesuaikan saja sesuai environment masing-masing.

Pada environment saya, Openstack Deployment menggunakan kolla-ansible dan Ceph dengan ceph-ansible sebagai backend storage.

!! Perlu diperhatikan bahwa Deployment Ceph menggunakan ceph-ansible sudah deprecated pada saat Artikel ini dibuat, disarankan untuk migrasi ke cephadm !!

Requirements

  • Openstack Yoga berjalan normal
  • Ceph Quincy berjalan normal

Setup dan Instalasi RadosGW

Instalasi dan Konfigurasi Ceph Rados Gateway pada Ceph.

Instalasi RadosGW

  1. Edit konfigurasi rgws.yml pada ceph-ansible
source ~/ceph/ceph-venv/bin/activate
cd ~/ceph/ceph-ansible/group_vars
cp rgws.yml.sample rgws.yml

vim group_vars/rgws.yml
---
copy_admin_key: true
radosgw_interface: ens7

2. Edit inventory untuk include rgws saat deployment ceph dengan ceph-ansible

vim hosts
---
[mons] 
democtrl0[1:3]
 
[mgrs] 
democtrl0[1:3]
 
[osds] 
democmpt0[1:3]

[clients]
democmpt0[1:3]

[mdss]
democtrl0[1:3]

# Tambahkan Parameter dibawah
[rgws]
democtrl0[1:3]

3. Jalankan ceph-ansible deployment

ansible-playbook -v -i hosts site.yml

4. Verifikasi hasil, pastikan service rgws sudah tampil dan active

pada ceph status terdeteksi 3 karena saya menginstall rgw pada tiga node controller.

(Optional) Setup Haproxy untuk RadosGW

Jika ceph rgw dideploy pada lebih dari satu node, maka bisa menambahkan konfigurasi Load Balancer (disini saya akan menggunakan haproxy dari kolla-ansible).

vim /etc/kolla/haproxy/services.d/ceph-rgw.cfg
----
frontend ceph_rgw_internal_front
    mode http
    http-request del-header X-Forwarded-Proto
    option httplog
    option forwardfor
    http-request set-header X-Forwarded-Proto https if { ssl_fc }
    http-request set-header X-Forwarded-Proto https
    bind 10.24.12.150:8080 ssl crt /etc/haproxy/haproxy-internal.pem
    default_backend ceph_rgw_back

frontend ceph_rgw_external_front
    mode http
    http-request deny if { path -i -m beg /server-status }
    http-request del-header X-Forwarded-Proto
    option httplog
    option forwardfor
    http-request set-header X-Forwarded-Proto https if { ssl_fc }
    http-request set-header X-Forwarded-Proto https
    bind 10.24.11.150:8080 ssl crt /etc/haproxy/haproxy.pem
    default_backend ceph_rgw_back

backend ceph_rgw_back
    balance  source
    mode http
    server democtrl01 10.24.14.101:8080 check inter 2000 rise 2 fall 5
    server democtrl02 10.24.14.102:8080 check inter 2000 rise 2 fall 5
    server democtrl03 10.24.14.103:8080 check inter 2000 rise 2 fall 5
for i in {1..3};do ssh 10.24.12.10$i docker restart haproxy; done
ss -tulpn |grep 8080

Integrasi RadosGW dengan OpenStack Swift

Integrasi RadosGW dengan Openstack Swift dengan pembuatan endpoint untuk Swift pada Openstack.

Konfigurasi ceph.conf Agar Terhubung dengan Keystone

1. Edit file /etc/ceph/ceph.conf pada setiap node ceph rgw dengan menambahkan konfigurasi seperti dibawah.

cp /etc/ceph/ceph.conf /etc/ceph/ceph.conf.bak
vim /etc/ceph/ceph.conf
---
[client.rgw.<hostname>.rgw0]
host = <hostname>
keyring = /var/lib/ceph/radosgw/ceph-rgw.<hostname>.rgw0/keyring
log file = /var/log/ceph/ceph-rgw-<hostname>.rgw0.log
rgw frontends = beast endpoint=<ip-address>:8080
rgw thread pool size = 512
rgw keystone api version = 3
rgw keystone url = https://10.24.12.150:35357
rgw keystone admin user = admin
rgw keystone admin password = <admin-password>
rgw keystone admin tenant = admin
rgw keystone accepted roles = admin, _member_, member
rgw keystone admin domain = default
rgw keystone token cache size = 500
rgw keystone revocation interval = 300
rgw keystone implicit tenants = true
rgw swift account in url = true
rgw s3 auth use keystone = true
rgw_enable_apis = swift, s3
rgw_keystone_verify_ssl = false
Note: rgw s3 auth use keystone = true digunakan jika ingin menggunakan S3 API

2. Restart ceph radosgw pada masing-masing controller

systemctl restart ceph-radosgw@rgw.<hostname>.rgw0.service

Konfigurasi Openstack Endpoint

1. Buat Service Swift pada Openstack

openstack service create --name swift \
  --description "OpenStack Object Storage" object-store

2. Buat swift internal, public, dan admin endpoint

openstack endpoint create --region RegionOne  \
object-store public \
'https://public.demo.lab:8080/swift/v1/AUTH_%(tenant_id)s'

openstack endpoint create --region RegionOne  \
object-store admin \
'https://admin.demo.lab:8080/swift/v1'

openstack endpoint create --region RegionOne  \
object-store internal \
'https://internal.demo.lab:8080/swift/v1/AUTH_%(tenant_id)s'

Jika pembuatan endpoint sudah selesai, pada Openstack Horizon akan muncul menu Object Storage.

Tes Operasional Swift

Jika ingin menggunakan swift command perlu install dependensi berikut. Jika tidak, bisa langsung pakai dari command openstack.

pip3 install python-swiftclient

Upload Object

Pengujian operasional swift upload dengan membuat container (istilah dalam swift) / bucket bernama firstdemo  dan mencoba upload beberapa file kedalam container tersebut.

openstack container create firstdemo
cd openstack/images
echo "rj testing" > test.txt
swift upload firstdemo test.txt
swift upload firstdemo cirros-0.6.1-x86_64-disk.img

Download Object

Pengujian operasional swift download dengan download file yang sudah diupload sebelumnya ke container firstdemo  dan verifikasi hasil checksum.

swift list firstdemo
swift download firstdemo test.txt
swift download firstdemo cirros-0.6.1-x86_64-disk.img

Integrasi S3

Pengujian operasional swift terintegrasi dengan S3 dengan menggunakan s3cmd command.

Pertama, buat ec2 credentials melalui Openstack untuk mendapatkan access & secret keys

openstack ec2 credentials create

Selanjutnya dari sisi Client, konfigurasi s3cmd agar menggunakan access & secret keys yang sudah dibuat serta Endpoint dari swift

mkdir swift ; cd swift
apt install s3cmd -y

cat<<EOF > ~/.s3cfg
[default]
access_key = 03f0fe31e1e4428098be77f88e882789
secret_key = 2a527e7149ed446e80e2b2e9dc87d46f
host_base = https://public.demo.lab:8080
host_bucket = https://public.demo.lab:8080
check_ssl_certificate = False
EOF

Download file menggunakan s3cmd

s3cmd ls
s3cmd get -r s3://firstdemo

Referensi

Welcome to Swift’s documentation! — Swift 2.29.3.dev5 documentation
Integrating with OpenStack Keystone — Ceph Documentation