Mục đích.
Script này được sử dụng để tính toán số lượng phân vùng cho mỗi thiết bị lưu trữ và tổng số lượng phân vùng cho vòng (ring) trong hệ thống lưu trữ phân tán Swift. Vòng (ring) là một cấu trúc dữ liệu được sử dụng để phân phối dữ liệu trên nhiều thiết bị lưu trữ.
Giới thiệu.
Script sẽ hiển thị một mô tả ngắn gọn về chức năng của nó.
Script sẽ đặt giá trị mặc định cho số lượng phân vùng mỗi thiết bị là 20 (nghĩa là mỗi 1TB dung lượng lưu trữ sẽ được chia thành 20 phân vùng).
Script sẽ nhắc người dùng nhập các thông tin cần thiết để tính toán.
#!/bin/bash
# Ring builder calculator for swift
clear
echo "- This script will calculate the number of partitions for each device and the total number of partitions for the ring."
echo " - The default divisor is 20, which means that each device will have 20 partitions per TB."
echo " - You can change the divisor if you want to."
echo " - The number of partitions will be calculated as follows:"
echo
read -p " + Enter device size in TB: " device_size_tb
read -p " + Enter total number of devices: " total_devices
read -p " + Enter the divisor for calculating partitions per device (default is 20): " divisor
read -p " + Enter number of replicas: " replica
# Convert device size to integer
device_size_tb=${device_size_tb%.*}
# Set default divisor if empty
if [ -z "$divisor" ]; then
divisor=20
fi
device_size_gb=$((device_size_tb * 1024))
partitions_per_device=$((device_size_gb / divisor))
total_partitions=$(( (total_devices * partitions_per_device) / replica ))
part_power=0
while (( (2**part_power) < total_partitions )); do
((part_power++))
done
echo
echo " - Number of partitions per device: $partitions_per_device"
echo " - Total number of partitions: $total_partitions"
echo " - Partition power: $part_power"
echo " - You can now create the ring builder files with the following commands:"
echo
echo " + swift-ring-builder account.builder create $part_power $replica 1"
echo " + swift-ring-builder container.builder create $part_power $replica 1"
echo " + swift-ring-builder object.builder create $part_power $replica 1"
Cách nó hoạt động như sau:
- Thu thập thông tin từ người dùng:
- Script sẽ hỏi người dùng nhập các giá trị sau:
- Kích thước thiết bị (TB): Dung lượng lưu trữ của mỗi thiết bị lưu trữ (ví dụ: 2, 4, 8).
- Tổng số thiết bị: Số lượng thiết bị lưu trữ tham gia vào vòng (ring).
- Số lượng phân vùng mỗi thiết bị (tùy chọn): Người dùng có thể thay đổi giá trị mặc định (20) nếu muốn.
- Số bản sao: Số lượng bản sao của dữ liệu được lưu trữ trên các thiết bị khác nhau.
- Script sẽ hỏi người dùng nhập các giá trị sau:
- Tính toán:
- Script sẽ chuyển đổi kích thước thiết bị từ TB sang GB.
- Script sẽ tính toán số lượng phân vùng cho mỗi thiết bị bằng cách chia dung lượng lưu trữ thiết bị (GB) cho số lượng phân vùng mỗi thiết bị.
- Script sẽ tính toán tổng số lượng phân vùng cho vòng (ring) bằng cách chia số lượng thiết bị cho số lượng bản sao, sau đó nhân với số lượng phân vùng mỗi thiết bị.
- Script sẽ xác định số mũ của 2 cần thiết để biểu diễn tổng số lượng phân vùng (ví dụ: 2^10 = 1024, 2^20 = 1,048,576).
- Hiển thị kết quả:
- Script sẽ hiển thị các kết quả tính toán:
- Số lượng phân vùng cho mỗi thiết bị.
- Tổng số lượng phân vùng cho vòng (ring).
- Số mũ của 2 cần thiết để biểu diễn tổng số lượng phân vùng.
- Script sẽ cung cấp các ví dụ lệnh Swift để tạo tệp cấu hình cho vòng (ring) dựa trên kết quả tính toán.
- Script sẽ hiển thị các kết quả tính toán:
Ví dụ khi chạy script.
shell> ./ring.builder.calculator.sh
- This script will calculate the number of partitions for each device and the total number of partitions for the ring.
- The default divisor is 20, which means that each device will have 20 partitions per TB.
- You can change the divisor if you want to.
- The number of partitions will be calculated as follows:
+ Enter device size in TB: 14
+ Enter total number of devices: 100
+ Enter the divisor for calculating partitions per device (default is 20): 50
+ Enter number of replicas: 2
Kết quả bạn nhận được.
- Number of partitions per device: 286
- Total number of partitions: 14300
- Partition power: 14
- You can now create the ring builder files with the following commands:
+ swift-ring-builder account.builder create 14 2 1
+ swift-ring-builder container.builder create 14 2 1
+ swift-ring-builder object.builder create 14 2 1
Lưu ý:
- Script này giả định người dùng có kiến thức cơ bản về hệ thống lưu trữ phân tán Swift và vòng (ring).
- Giá trị mặc định cho số lượng phân vùng mỗi thiết bị (20) có thể không phù hợp với mọi trường hợp. Người dùng nên điều chỉnh giá trị này dựa trên nhu cầu cụ thể của họ.
- Script này chỉ cung cấp tính toán cơ bản. Người dùng có thể cần điều chỉnh thêm các thông số cấu hình khác cho vòng (ring) tùy theo hệ thống của họ.