Cài đặt và cấu hình Swift backend cho Glance

Swift là một trong các core project của OpenStack, cung cấp các phiên bản giống nhau cho việc lưu trữ dữ liệu, đồng thời với việc mở rộng lưu trữ rất linh hoạt và sử dụng cơ chế clusters, khả năng của Swift có thể lưu trữ lên đến petabytes dữ liệu truy cập. Swift không chỉ là một hệ thống data thờigian thực, nó còn là một hệ thống lưu trữ lớn với tính chất “lâudài–longterm” với một lượng dữ liệu cực lớn mà vẫn đảm bảo việc truyxuất, phân cấp, và nâng cấp (retrieved, leveraged, and updated). Các khái niệm cần biết trong Swift:

  • Proxy Server: nhận các request và chứng thực user. Sau khi quá trình chứng thực hoàn tất, dữ liệu sẽ được chuyển trực tiếp từ (hoặc tới) user. Proxy server sẽ không kiểm tra chúng.
  • Object Server: lưu trữ, quản lý các đối tượng được lưu. Các object sẽ được lưu dưới dạng binary cùng với metadata miêu tả về dữ liệu đó.
  • Container Server: lưu trữ thông tin và trả về danh sách các object đang được lưu bên Object Store. Nó không biết chính xác object được lưu ở đâu nhưng nó biết cụ thể object đó được lưu tại container nào. Dữ liệu được lưu mặc định trong một Sqlite DB, nếu Swift được cài đặt trên các cluster khác nhau thì DB này sẽ được tạo thêm các bản sao tương ứng.
  • Account Server: cũng giống như Container Server nhưng nhiệm vụ của nó là quản lý danh sách các Container chứ không phải là object.
  • The Ring: thành phần này sẽ tạo một ánh xạ giữa tên của các thực thể được lưu trên đĩa cứng và địa chỉ vật lý của nó. Có nhiều Ring khác nhau cho account, contairer và object. Khi mà các thành phần khác cần sử dụng bất cứ thao tác nào trên object, container hay account thì cần phải tương tác với ring tương ứng để tìm ra đúng địa chỉ lưu trữ trên cluster. Ring được sử dụng bởi proxy server và các tiến trình khác chạy trong backgroud.

swift-architecture Nguồn: http://docs.openstack.org/icehouse/install-guide/install/apt/content/example-object-storage-installation-architecture.html

Tận dụng các ưu điểm trên của Swift, ta sẽ tiến hành cấu hình Glance sử dụng Swift để lưu trữ các image file của mình. Mô hình hoạt động lúc này sẽ tương ứng với hình sau glance-storage-on-swiftMô hình thử nghiệm swift-test-architectureCài đặt Swift

1. Các bước cài đặt chung

  • Tại controller server, tạo swift user để chứng thực với keystone. Đưa swift user vào service tenant và gán admin role.

keystone user-create --name=swift --pass=SWIFT_PASS --email=swift@example.com

keystone user-role-add --user=swift --tenant=service --role=admin

  • Tạo Object Storage Service cho swift

keystone service-create --name=swift --type=object-store --description="OpenStack Object Storage"

  • Tạo API endpoint cho Object Storage Service

keystone endpoint-create

--service-id=$(keystone service-list | awk '/ object-store / {print $2}')

--publicurl='http://10.196.200.61:8080/v1/AUTH_%(tenant_id)s'

--internalurl='http://10.196.201.61:8080/v1/AUTH_%(tenant_id)s'

--adminurl=http://10.196.201.61:8080

  • Tạo thư mục cấu hình cho swift trên tất cả các server

mkdir -p /etc/swift

  • Tạo file /etc/swift/swift.conf trên tất cả các server

2. Cài đặt và cấu hình các storage nodes (Netword và 2 Compute server)

  • Cài đặt các gói

apt-get install swift swift-account swift-container swift-object xfsprogs

  • Tạo XFS volume tại Network server

fdisk /dev/sdb

mkfs.xfs /dev/sdb1

echo "/dev/sdb1 /srv/node/sdb1 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab

mkdir -p /srv/node/sdb1

mount /srv/node/sdb1

chown -R swift:swift /srv/node

  • Tạo XFS volume tại hai Compute server

fdisk /dev/sda

mkfs.xfs /dev/sda4

echo "/dev/sda4 /srv/node/sda4 xfs noatime,nodiratime,nobarrier,logbufs=8 0 0" >> /etc/fstab

mkdir -p /srv/node/sda4

mount /srv/node/sda4

chown -R swift:swift /srv/node

  • Tạo file /etc/rsyncd.conf

với STORAGE_LOCAL_NET_IP là địa chỉ mạng management (10.196.201.0/24) của các server. VD: Tại Network server, STORAGE_LOCAL_NET_IP tương ứng với 10.196.201.63 theo mô hình.

  • Cấu hình file /etc/default/rsync

  •  Khởi động lại dịch vụ rsync

service rsync start

  • Tạo thư mục recon cache cho swift và đặt owner cho nó

mkdir -p /var/swift/recon

chown -R swift:swift /var/swift/recon

3. Cài đặt và cấu hình proxy server (Controller server)

  • Cài đặt các gói

apt-get install swift swift-proxy memcached python-keystoneclient python-swiftclient python-webob

  • Cấu hình file /etc/mecached.conf để memcached lắng nghe trên eth0 của Controller server

  •  Khởi động lại dịch vụ memcached

service memcached restart

  • Do Horizon cũng sử dụng memcached nên cần cấu hình file /etc/openstack-dashboard/local_settings.py

  •  Khởi động lại dịch vụ Apache

service apache2 restart

  • Tạo file /etc/swift/proxy-server.conf

  •  Tạo account, container và object ring

cd /etc/swift

swift-ring-builder account.builder create 18 3 1

swift-ring-builder container.builder create 18 3 1

swift-ring-builder object.builder create 18 3 1

  • Tạo các bản ghỉ (entries) cho từng storage nodes

swift-ring-builder account.builder add z1-10.196.201.63:6002/sdb1 100

swift-ring-builder container.builder add z1-10.196.201.63:6001/sdb1 100

swift-ring-builder object.builder add z1-10.196.201.63:6000/sdb1 100

 

swift-ring-builder account.builder add z2-10.196.201.58:6002/sda4 100

swift-ring-builder container.builder add z2-10.196.201.58:6001/sda4 100

swift-ring-builder object.builder add z2-10.196.201.58:6000/sda4 100

 

swift-ring-builder account.builder add z3-10.196.201.130:6002/sda4 100

swift-ring-builder container.builder add z3-10.196.201.130:6001/sda4 100

swift-ring-builder object.builder add z3-10.196.201.130:6000/sda4 100

  • Xác nhận các ring content

swift-ring-builder account.builder

swift-ring-builder container.builder

swift-ring-builder object.builder

  • Cân bằng lại các rings

swift-ring-builder account.builder rebalance

swift-ring-builder container.builder rebalance

swift-ring-builder object.builder rebalance

  • Copy các file account.ring.gz, container.ring.gz và object.ring.gz đến thư mục /etc/swift trên mỗi storage nodes

scp /etc/swift/*.gz 10.196.201.61:/etc/swift

scp /etc/swift/*.gz 10.196.201.58:/etc/swift

scp /etc/swift/*.gz 10.196.201.130:/etc/swift

Chú ý: Mặc định, Ubuntu 14.04 không cho phép truy cập ssh bằng tài khoản root, nên lúc dùng các lênh scp trên sẽ bị báo lỗi. Tại mỗi storage nodes, cấu hình file /etc/ssh/sshd_config

và khởi động lại dịch vụ ssh:

service ssh restart

  • Chắc chắn rằng các file cấu hình trong /etc/swift đều owner bởi swift user. Tại tất cả server:

chown -R swift:swift /etc/swift

  • Khởi động lại dịch vụ Proxy tại Controller server

service swift-proxy restart

  • Khởi động tất cả dịch vụ swift tại các storage nodes:

swift-init all start

4. Cấu hình Glance sử dụng Swift

  • Cấu hình file /etc/glance/glace-api.conf

  •  Cấu hình file /etc/glance/glance-cache.conf

  •  Khởi động lại các dịch vụ Glance

service glance-api restart

service glance-registry restart

Thử nghiệm upload image file lên Glance

  • Tại Controller Server, tiến hành upload Windows 7 64bit

glance-upload-win7

  • Kiểm tra trong glance container của swift user

glance-container Ta thấy windows 7 image file (id: 1fce6997-946a-4c0e-baeb-a4fcb9161a1e) đã được split thành các file có dung lương 2 GB và lưu trữ trên glance container.

  • Kiểm tra tại các storage nodes, Network server

storage-network

  • Compute server

storage-compute

  • Compute 2 server

storage-compute2

  • Thử nghiệm launch 1 instance với file ảnh windows 7 vừa upload

launch-win7

  • Kết quả launch instance với image file lưu trữ bằng Swift thành công. Theo kết quả thử nghiệm chưa chính thức thì thời gian get image của Glance tăng lên đáng kể ( bao nhiêu % thì chưa tính được :D). Chúc các bạn cảm thấy hứng thú và vui vẽ với OpenStack. :D

Bình luận