Files
ubicloud/model/minio/minio_cluster.rb
shikharbhardwaj 523d6ca958 Use public IPs for minio cluster communication
Based on some recent networking performance benchmarks, we've discovered
that the private netwroking stack seems to offer upto 10x lower
bandwidth as compared to the public one. While this needs to be
investigated further, meanwhile we switch the MinIO cluster to use
public IPs for peer communication to avoid this performance penalty.
2025-02-21 17:58:29 +05:30

95 lines
2.9 KiB
Ruby

# frozen_string_literal: true
require_relative "../../model"
class MinioCluster < Sequel::Model
many_to_one :project
one_to_many :pools, key: :cluster_id, class: :MinioPool do |ds|
ds.order(:start_index)
end
many_through_many :servers, [[:minio_pool, :cluster_id, :id], [:minio_server, :minio_pool_id, :id]], class: :MinioServer do |ds|
ds.order(:index)
end
one_to_one :strand, key: :id
many_to_one :private_subnet, key: :private_subnet_id
include ResourceMethods
include SemaphoreMethods
semaphore :destroy, :reconfigure
plugin :column_encryption do |enc|
enc.column :admin_password
enc.column :root_cert_key_1
enc.column :root_cert_key_2
end
def storage_size_gib
pools.sum(&:storage_size_gib)
end
def server_count
pools.sum(&:server_count)
end
def drive_count
pools.sum(&:drive_count)
end
def ip4_urls
servers.map(&:ip4_url)
end
def single_instance_single_drive?
server_count == 1 && drive_count == 1
end
def single_instance_multi_drive?
server_count == 1 && drive_count > 1
end
def hostname
"#{name}.#{Config.minio_host_name}"
end
def url
dns_zone ? "https://#{hostname}:9000" : nil
end
def dns_zone
@dns_zone ||= DnsZone.where(project_id: Config.minio_service_project_id, name: Config.minio_host_name).first
end
def root_certs
root_cert_1.to_s + root_cert_2.to_s
end
def self.redacted_columns
super + [:root_cert_1, :root_cert_2]
end
end
# Table: minio_cluster
# Columns:
# id | uuid | PRIMARY KEY
# name | text | NOT NULL
# location | text | NOT NULL
# created_at | timestamp without time zone | NOT NULL DEFAULT CURRENT_TIMESTAMP
# admin_user | text | NOT NULL
# admin_password | text | NOT NULL
# private_subnet_id | uuid |
# root_cert_1 | text |
# root_cert_key_1 | text |
# root_cert_2 | text |
# root_cert_key_2 | text |
# certificate_last_checked_at | timestamp with time zone | NOT NULL DEFAULT now()
# project_id | uuid | NOT NULL
# Indexes:
# minio_cluster_pkey | PRIMARY KEY btree (id)
# minio_cluster_project_id_location_name_uidx | UNIQUE btree (project_id, location, name)
# Foreign key constraints:
# minio_cluster_private_subnet_id_fkey | (private_subnet_id) REFERENCES private_subnet(id)
# minio_cluster_project_id_fkey | (project_id) REFERENCES project(id)
# Referenced By:
# minio_pool | minio_pool_cluster_id_fkey | (cluster_id) REFERENCES minio_cluster(id)