Triển khai RGW trên CEPH Cluster: Hướng dẫn Chi tiết

Giới thiệu về RGW

RADOS Gateway (RGW) là thành phần object storage của CEPH, cung cấp giao diện tương thích với Amazon S3 API. Bài viết này hướng dẫn chi tiết cách triển khai RGW trên CEPH cluster đã được cài đặt từ bài trước.

Prerequisites

  • Đã có CEPH cluster hoạt động (theo bài trước)

  • Các OSD đã được phân loại thành SSD và HDD

  • CRUSH rules đã được tạo cho SSD và HDD

Tạo Pool cho RGW

Tạo Pools cho SSD

# Tạo data pool cho SSD
ceph osd pool create s3.ssd.data 32 32 replicated ssd_rule

# Tạo index pool cho SSD
ceph osd pool create s3.ssd.index 8 8 replicated ssd_rule

# Enable application cho pools
ceph osd pool application enable s3.ssd.data rgw
ceph osd pool application enable s3.ssd.index rgw

# Thiết lập kích thước replication
ceph osd pool set s3.ssd.data size 2
ceph osd pool set s3.ssd.index size 2

Tạo Pools cho HDD

# Tạo data pool cho HDD
ceph osd pool create s3.hdd.data 32 32 replicated hdd_rule

# Tạo index pool cho HDD
ceph osd pool create s3.hdd.index 8 8 replicated hdd_rule

# Enable application cho pools
ceph osd pool application enable s3.hdd.data rgw
ceph osd pool application enable s3.hdd.index rgw

# Thiết lập kích thước replication
ceph osd pool set s3.hdd.data size 2
ceph osd pool set s3.hdd.index size 2

Kiểm tra Pools

# Liệt kê tất cả pools
ceph osd pool ls detail

# Kiểm tra pool stats
rados df

Cấu hình Realm và Zone

Tạo Realm

# Tạo realm
radosgw-admin realm create --rgw-realm s3 --default

# Kiểm tra realm
radosgw-admin realm list

Tạo Zonegroup

# Tạo zonegroup
radosgw-admin zonegroup create --rgw-zonegroup default --master --default

# Kiểm tra zonegroup
radosgw-admin zonegroup list

Tạo Zone

# Tạo zone
radosgw-admin zone create --rgw-zone htv --master --default

# Kiểm tra zone
radosgw-admin zone list

Cấu hình Endpoints

# Thêm endpoints vào zonegroup
radosgw-admin zonegroup add \
  --rgw-zonegroup default \
  --rgw-zone htv \
  --endpoints http://10.10.210.81:8080

# Thêm endpoints vào zone
radosgw-admin zone modify \
  --rgw-zone htv \
  --endpoints http://10.10.210.81:8080

Cấu hình Placement cho SSD

# Thêm placement vào zonegroup
radosgw-admin zonegroup placement add \
  --rgw-zonegroup default \
  --placement-id ssd \
  --data-pool s3.ssd.data \
  --index-pool s3.ssd.index

# Thêm placement vào zone
radosgw-admin zone placement add \
  --rgw-zone=htv \
  --placement-id=ssd \
  --storage-class=STANDARD \
  --data-pool=s3.ssd.data \
  --index-pool=s3.ssd.index

Cấu hình Placement cho HDD

# Thêm placement vào zonegroup
radosgw-admin zonegroup placement add \
  --rgw-zonegroup default \
  --placement-id hdd \
  --data-pool s3.hdd.data \
  --index-pool s3.hdd.index

# Thêm placement vào zone
radosgw-admin zone placement add \
  --rgw-zone=htv \
  --placement-id=hdd \
  --storage-class=STANDARD \
  --data-pool=s3.hdd.data \
  --index-pool=s3.hdd.index

Apply Changes

# Cập nhật period
radosgw-admin period update --commit

# Kiểm tra cấu hình
radosgw-admin zonegroup placement list
radosgw-admin zone placement list

Triển khai RGW Service

Tạo RGW Configuration File

Tạo file rgw.yaml với nội dung:

service_type: rgw
service_id: s3
placement:
  hosts:
    - mon1
    - mon2
    - mon3
spec:
  rgw_realm: s3
  rgw_zonegroup: default
  rgw_zone: htv
  rgw_frontend_port: 8080
  rgw_frontend_type: beast

Áp dụng RGW Configuration

# Triển khai RGW service
ceph orch apply -i rgw.yaml

# Kiểm tra trạng thái service
ceph orch ps --daemon-type rgw

Kiểm tra RGW Service

# Kiểm tra service status
ceph orch ls --service-type rgw

# Kiểm tra logs
ceph logs rgw.s3.mon1 --cluster ceph

Tạo S3 User

Tạo User

# Tạo S3 user
radosgw-admin user create \
  --uid=manhhc \
  --display-name="Manh Hoang" \
  --email=manhhc@example.com

# Lưu lại access_key và secret_key

Kiểm tra User Information

# Xem thông tin user
radosgw-admin user info --uid=manhhc

# Danh sách users
radosgw-admin user list

Tạo Subusers và Keys (Optional)

# Tạo subuser
radosgw-admin subuser create \
  --uid=manhhc \
  --subuser=manhhc:swift \
  --access=full

# Tạo secret key cho subuser
radosgw-admin key create \
  --subuser=manhhc:swift \
  --key-type=swift \
  --gen-secret

Cấu hình Nginx Reverse Proxy

Cài đặt Nginx và SSL

# Cài đặt Nginx
sudo apt -y install nginx

# Cài đặt Certbot cho SSL
sudo apt -y install certbot python3-certbot-nginx

# Request SSL certificate
sudo certbot certonly --nginx -d s3.sysadminskills.com

Cấu hình Nginx

Tạo file /etc/nginx/sites-available/s3:

upstream rgw_backend {
    server mon1:8080;
    server mon2:8080;
    server mon3:8080;
    keepalive 32;
}

server {
    listen 80;
    server_name s3.sysadminskills.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name s3.sysadminskills.com;

    ssl_certificate /etc/letsencrypt/live/s3.sysadminskinskills.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/s3.sysadminskills.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    client_max_body_size 5G;
    client_body_buffer_size 1M;
    proxy_request_buffering off;

    location / {
        proxy_pass http://rgw_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_buffering off;
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
    }

    access_log /var/log/nginx/s3.access.log;
    error_log /var/log/nginx/s3.error.log;
}

Kích hoạt Nginx Configuration

# Enable site
sudo ln -s /etc/nginx/sites-available/s3 /etc/nginx/sites-enabled/

# Test configuration
sudo nginx -t

# Restart Nginx
sudo systemctl restart nginx

# Enable auto-renewal for SSL
sudo crontab -l | { cat; echo "0 12 * * * /usr/bin/certbot renew --quiet"; } | sudo crontab -

Kết nối với AWS CLI

Cài đặt AWS CLI

# Trên CentOS/RHEL
sudo yum install -y unzip
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

# Trên Ubuntu/Debian
sudo apt install -y unzip
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

Cấu hình AWS CLI

# Configure AWS CLI
aws configure

# Nhập thông tin:
# AWS Access Key ID: [access_key từ radosgw-admin]
# AWS Secret Access Key: [secret_key từ radosgw-admin]
# Default region name: us-east-1
# Default output format: json

Tạo Alias cho Tiện ích

# Thêm alias vào ~/.bashrc
echo "alias awss3='aws --endpoint-url https://s3.sysadminskills.com s3'" >> ~/.bashrc
echo "alias awss3api='aws --endpoint-url https://s3.sysadminskills.com s3api'" >> ~/.bashrc

# Apply alias
source ~/.bashrc

Testing và Validation

Kiểm tra RGW Service

# Kiểm tra endpoint
curl -X GET http://localhost:8080

# Kiểm tra với authentication
curl -X GET -H "Authorization: AWS <access_key>:<signature>" http://localhost:8080

Sử dụng AWS CLI để Test

# Kiểm tra kết nối
awss3 ls

# Tạo bucket
awss3 mb s3://test-bucket-ssd
awss3 mb s3://test-bucket-hdd

# Upload file
awss3 cp /etc/hosts s3://test-bucket-ssd/

# List objects
awss3 ls s3://test-bucket-ssd/

# Download file
awss3 cp s3://test-bucket-ssd/hosts /tmp/hosts.downloaded

# Xóa object
awss3 rm s3://test-bucket-ssd/hosts

# Xóa bucket
awss3 rb s3://test-bucket-ssd

Kiểm tra với S3API

# List buckets
awss3api list-buckets

# Get bucket location
awss3api get-bucket-location --bucket test-bucket-ssd

# Get bucket policy
awss3api get-bucket-policy --bucket test-bucket-ssd

Performance Testing

# Upload file lớn để test performance
dd if=/dev/zero of=/tmp/1gb-file bs=1M count=1000
awss3 cp /tmp/1gb-file s3://test-bucket-ssd/1gb-file

# Kiểm tra throughput
time awss3 cp /tmp/1gb-file s3://test-bucket-ssd/1gb-file

Kiểm tra Placement Rules

# Kiểm tra object storage class
awss3api head-object --bucket test-bucket-ssd --key 1gb-file

# Kiểm tra bucket location constraint
awss3api get-bucket-location --bucket test-bucket-ssd

Monitoring và Logging

Kiểm tra RGW Logs

# Xem logs real-time
ceph logs rgw.s3.mon1 --cluster ceph

# Xem access logs
radosgw-admin log show --rgw-zone=htv

# Xem usage stats
radosgw-admin usage show --uid=manhhc

Performance Monitoring

# Kiểm tra RGW performance counters
ceph perf rgw

# Kiểm tra request rates
ceph df detail

# Kiểm tra latency
ceph osd perf

Troubleshooting

Common Issues và Solutions

# RGW service không start
ceph orch daemon restart rgw.s3.mon1

# Authentication issues
radosgw-admin user info --uid=manhhc

# Permission issues
radosgw-admin caps add --uid=manhhc --caps="buckets=*"

# Network issues
ceph network ping

Kiểm tra Cluster Health

# Comprehensive health check
ceph health detail

# PG status
ceph pg stat

# OSD status
ceph osd stat

Kết luận

Bạn đã triển khai thành công RGW trên CEPH cluster với:

  • Multi-host RGW service với load balancing

  • SSL termination through Nginx

  • S3 API compatibility

  • Separate placement groups for SSD and HDD

  • Proper monitoring and logging

Hệ thống đã sẵn sàng cho production usage với khả năng mở rộng và high availability.

Tác giả: Mạnh Hoàng

Tôi là Hoàng Mạnh, người sáng lập blog SysadminSkills.com. Tôi viết về quản trị hệ thống, bảo mật máy chủ, DevOps và cách ứng dụng AI để tự động hóa công việc IT. Blog này là nơi tôi chia sẻ những gì đã học được từ thực tế – đơn giản, ngắn gọn và áp dụng được ngay.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *