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.