🚀 Coba Zilliz Cloud, Milvus yang sepenuhnya terkelola, secara gratis—rasakan performa 10x lebih cepat! Coba Sekarang>>

milvus-logo
LFAI
Beranda

(Tidak lagi digunakan) Menerapkan Cluster Milvus pada EC2

Topik ini menjelaskan cara menggunakan cluster Milvus di Amazon EC2 dengan Terraform dan Ansible.

Topik ini sudah usang dan akan segera dihapus. Anda disarankan untuk merujuk ke Menerapkan Cluster Milvus pada EKS sebagai gantinya.

Menyediakan cluster Milvus

Bagian ini menjelaskan cara menggunakan Terraform untuk menyediakan cluster Milvus.

Terraform adalah alat perangkat lunak infrastruktur sebagai kode (IaC). Dengan Terraform, Anda dapat menyediakan infrastruktur dengan menggunakan file konfigurasi deklaratif.

Prasyarat

Siapkan konfigurasi

Anda dapat mengunduh file konfigurasi template di Google Drive.

  • main.tf

    File ini berisi konfigurasi untuk penyediaan cluster Milvus.

  • variables.tf

    File ini memungkinkan pengeditan cepat variabel yang digunakan untuk menyiapkan atau memperbarui cluster Milvus.

  • output.tf dan inventory.tmpl

    File-file ini menyimpan metadata dari cluster Milvus. Metadata yang digunakan dalam topik ini adalah public_ip untuk setiap instance node, private_ip untuk setiap instance node, dan semua ID instance EC2.

Menyiapkan variabel.tf

Bagian ini menjelaskan konfigurasi yang berisi file variables.tf.

  • Jumlah node

    Templat berikut ini mendeklarasikan variabel index_count yang digunakan untuk mengatur jumlah simpul indeks.

    Nilai index_count harus lebih besar atau sama dengan satu.
    variable "index_count" {
      description = "Amount of index instances to run"
      type        = number
      default     = 5
    }
    
  • Jenis contoh untuk jenis simpul

    Templat berikut ini mendeklarasikan variabel index_ec2_type yang digunakan untuk mengatur tipe instance untuk node indeks.

    variable "index_ec2_type" {
      description = "Which server type"
      type        = string
      default     = "c5.2xlarge"
    }
    
  • Izin akses

    Templat berikut ini mendeklarasikan variabel key_name dan variabel my_ip. Variabel key_name mewakili kunci akses AWS. Variabel my_ip mewakili rentang alamat IP untuk grup keamanan.

    variable "key_name" {
      description = "Which aws key to use for access into instances, needs to be uploaded already"
      type        = string
      default     = ""
    }
    
    variable "my_ip" {
      description = "my_ip for security group. used so that ansible and terraform can ssh in"
      type        = string
      default     = "x.x.x.x/32"
    }
    

Menyiapkan main.tf

Bagian ini menjelaskan konfigurasi yang berisi file main.tf.

  • Penyedia dan wilayah cloud

    Templat berikut ini menggunakan wilayah us-east-2. Lihat Wilayah yang Tersedia untuk informasi lebih lanjut.

    provider "aws" {
      profile = "default"
      region  = "us-east-2"
    }
    
  • Grup keamanan

    Templat berikut ini mendeklarasikan grup keamanan yang mengizinkan lalu lintas masuk dari rentang alamat CIDR yang diwakili oleh my_ip yang dideklarasikan di variables.tf.

    resource "aws_security_group" "cluster_sg" {
      name        = "cluster_sg"
      description = "Allows only me to access"
      vpc_id      = aws_vpc.cluster_vpc.id
    
      ingress {
        description      = "All ports from my IP"
        from_port        = 0
        to_port          = 65535
        protocol         = "tcp"
        cidr_blocks      = [var.my_ip]
      }
    
      ingress {
        description      = "Full subnet communication"
        from_port        = 0
        to_port          = 65535
        protocol         = "all"
        self             = true
      }
    
      egress {
        from_port        = 0
        to_port          = 0
        protocol         = "-1"
        cidr_blocks      = ["0.0.0.0/0"]
        ipv6_cidr_blocks = ["::/0"]
      }
    
      tags = {
        Name = "cluster_sg"
      }
    }
    
  • VPC

    Templat berikut menentukan VPC dengan blok CIDR 10.0.0.0/24 pada cluster Milvus.

    resource "aws_vpc" "cluster_vpc" {
      cidr_block = "10.0.0.0/24"
      tags = {
        Name = "cluster_vpc"
      }
    }
    
    resource "aws_internet_gateway" "cluster_gateway" {
      vpc_id = aws_vpc.cluster_vpc.id
    
      tags = {
        Name = "cluster_gateway"
      }
    }
    
  • Subnet (Opsional)

    Templat berikut ini mendeklarasikan subnet yang trafiknya dialihkan ke gateway internet. Dalam kasus ini, ukuran blok CIDR subnet sama dengan blok CIDR VPC.

    resource "aws_subnet" "cluster_subnet" {
      vpc_id                  = aws_vpc.cluster_vpc.id
      cidr_block              = "10.0.0.0/24"
      map_public_ip_on_launch = true
    
      tags = {
        Name = "cluster_subnet"
      }
    }
    
    resource "aws_route_table" "cluster_subnet_gateway_route" {
      vpc_id       = aws_vpc.cluster_vpc.id
    
      route {
        cidr_block = "0.0.0.0/0"
        gateway_id = aws_internet_gateway.cluster_gateway.id
      }
    
      tags = {
        Name = "cluster_subnet_gateway_route"
      }
    }
    
    resource "aws_route_table_association" "cluster_subnet_add_gateway" {
      subnet_id      = aws_subnet.cluster_subnet.id
      route_table_id = aws_route_table.cluster_subnet_gateway_route.id
    }
    
    
  • Instance node (Node)

    Templat berikut ini mendeklarasikan instance node MinIO. File template main.tf mendeklarasikan node dari 11 jenis node. Untuk beberapa jenis node, Anda perlu mengatur root_block_device. Lihat Perangkat EBS, Ephemeral, dan Root Block untuk informasi lebih lanjut.

    resource "aws_instance" "minio_node" {
      count         = var.minio_count
      ami           = "ami-0d8d212151031f51c"
      instance_type = var.minio_ec2_type
      key_name      = var.key_name
      subnet_id     = aws_subnet.cluster_subnet.id 
      vpc_security_group_ids = [aws_security_group.cluster_sg.id]
    
      root_block_device {
        volume_type = "gp2"
        volume_size = 1000
      }
      
      tags = {
        Name = "minio-${count.index + 1}"
      }
    }
    

Menerapkan konfigurasi

  1. Buka terminal dan arahkan ke folder yang menyimpan main.tf.

  2. Untuk menginisialisasi konfigurasi, jalankan terraform init.

  3. Untuk menerapkan konfigurasi, jalankan terraform apply dan masukkan yes saat diminta.

Anda sekarang telah menyediakan cluster Milvus dengan Terraform.

Memulai cluster Milvus

Bagian ini menjelaskan cara menggunakan Ansible untuk memulai cluster Milvus yang telah Anda sediakan.

Ansible adalah alat manajemen konfigurasi yang digunakan untuk mengotomatiskan penyediaan cloud dan manajemen konfigurasi.

Prasyarat

Unduh Panduan Penyebaran Node Ansible Milvus

Kloning repositori Milvus dari GitHub untuk mengunduh Playbook penyebaran node Ansible Milvus.

git clone https://github.com/milvus-io/milvus.git

Mengonfigurasi file instalasi

File inventory.ini dan ansible.cfg digunakan untuk mengontrol variabel lingkungan dan metode verifikasi masuk di Ansible playbook. Dalam berkas inventory.ini, bagian dockernodes mendefinisikan semua server mesin docker. Bagian ansible.cfg mendefinisikan semua server koordinator Milvus. Bagian node mendefinisikan semua server dari simpul Milvus.

Masukkan jalur lokal ke Playbook dan konfigurasikan berkas instalasi.

$ cd ./milvus/deployments/docker/cluster-distributed-deployment

inventory.ini

Konfigurasikan inventory.ini untuk membagi host dalam kelompok sesuai dengan perannya dalam sistem Milvus.

Tambahkan nama host, dan tentukan grup docker dan vars.

[dockernodes] #Add docker host names.
dockernode01
dockernode02
dockernode03

[admin] #Add Ansible controller name.
ansible-controller

[coords] #Add the host names of Milvus coordinators.
; Take note the IP of this host VM, and replace 10.170.0.17 with it.
dockernode01

[nodes] #Add the host names of Milvus nodes.
dockernode02

[dependencies] #Add the host names of Milvus dependencies.
; dependencies node will host etcd, minio, pulsar, these 3 roles are the foundation of Milvus. 
; Take note the IP of this host VM, and replace 10.170.0.19 with it.
dockernode03

[docker:children]
dockernodes
coords
nodes
dependencies

[docker:vars]
ansible_python_interpreter= /usr/bin/python3
StrictHostKeyChecking= no

; Setup variables to control what type of network to use when creating containers.
dependencies_network= host
nodes_network= host

; Setup varibale to control what version of Milvus image to use.
image= milvusdb/milvus-dev:master-20220412-4781db8a

; Setup static IP addresses of the docker hosts as variable for container environment variable config.
; Before running the playbook, below 4 IP addresses need to be replaced with the IP of your host VM
; on which the etcd, minio, pulsar, coordinators will be hosted.
etcd_ip= 10.170.0.19
minio_ip= 10.170.0.19
pulsar_ip= 10.170.0.19
coords_ip= 10.170.0.17

; Setup container environment which later will be used in container creation.
ETCD_ENDPOINTS= {{etcd_ip}}:2379 
MINIO_ADDRESS= {{minio_ip}}:9000
PULSAR_ADDRESS= pulsar://{{pulsar_ip}}:6650
QUERY_COORD_ADDRESS= {{coords_ip}}:19531
DATA_COORD_ADDRESS= {{coords_ip}}:13333
ROOT_COORD_ADDRESS= {{coords_ip}}:53100
INDEX_COORD_ADDRESS= {{coords_ip}}:31000

ansible.cfg

ansible.cfg mengontrol aksi dari playbook, misalnya, kunci SSH, dll. Jangan mengatur kata sandi melalui kunci SSH pada hos docker. Jika tidak, koneksi SSH Ansible akan gagal. Kami menyarankan untuk menyiapkan nama pengguna dan kunci SSH yang sama pada tiga hos dan menyiapkan akun pengguna baru untuk menjalankan sudo tanpa kata sandi. Jika tidak, Anda akan menerima kesalahan bahwa nama pengguna tidak cocok dengan kata sandi atau Anda tidak diberikan hak istimewa yang lebih tinggi saat menjalankan panduan Ansible.

[defaults]
host_key_checking = False
inventory = inventory.ini # Specify the Inventory file
private_key_file=~/.my_ssh_keys/gpc_sshkey # Specify the SSH key that Ansible uses to access Docker host

deploy-docker.yml

deploy-docker.yml mendefinisikan tugas selama penginstalan Docker. Lihat komentar kode dalam berkas untuk detailnya.

---
- name: setup pre-requisites # Install prerequisite
  hosts: all
  become: yes
  become_user: root
  roles:
    - install-modules
    - configure-hosts-file

- name: install docker
  become: yes
  become_user: root
  hosts: dockernodes
  roles:
    - docker-installation

Menguji konektivitas Ansible

Uji konektivitas ke Ansible.

$ ansible all -m ping

Tambahkan -i pada perintah untuk menentukan jalur ke berkas inventori jika Anda tidak menentukannya di ansible.cfg, jika tidak, Ansible menggunakan /etc/ansible/hosts.

Terminal kembali sebagai berikut:

dockernode01 | SUCCESS => {
"changed": false,
"ping": "pong"
}
ansible-controller | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
dockernode03 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
dockernode02 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Periksa Sintaks Playbook

Periksa sintaks Playbook.

$ ansible-playbook deploy-docker.yml --syntax-check

Biasanya, terminal akan kembali sebagai berikut:

playbook: deploy-docker.yml

Instal Docker

Instal Docker dengan Playbook.

$ ansible-playbook deploy-docker.yml

Jika Docker berhasil diinstal pada ketiga hos, terminal akan menampilkan tampilan berikut:

TASK [docker-installation : Install Docker-CE] *******************************************************************
ok: [dockernode01]
ok: [dockernode03]
ok: [dockernode02]

TASK [docker-installation : Install python3-docker] **************************************************************
ok: [dockernode01]
ok: [dockernode02]
ok: [dockernode03]

TASK [docker-installation : Install docker-compose python3 library] **********************************************
changed: [dockernode01]
changed: [dockernode03]
changed: [dockernode02]

PLAY RECAP *******************************************************************************************************
ansible-controller         : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
dockernode01               : ok=10   changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
dockernode02               : ok=10   changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
dockernode03               : ok=10   changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Verifikasi penginstalan

Masuk ke tiga hos dengan kunci SSH, dan verifikasi penginstalan pada hos.

  • Untuk hos root:
$ docker -v
  • Untuk hos non-root:
$ sudo docker -v

Biasanya, terminal akan menampilkan hasil sebagai berikut:

Docker version 20.10.14, build a224086

Periksa status kontainer yang sedang berjalan.

$ docker ps

Periksa Sintaks

Periksa sintaks deploy-milvus.yml.

$ ansible-playbook deploy-milvus.yml --syntax-check

Biasanya, terminal akan menampilkan hasil sebagai berikut:

playbook: deploy-milvus.yml

Membuat kontainer Milvus

Tugas untuk membuat kontainer Milvus didefinisikan di deploy-milvus.yml.

$ ansible-playbook deploy-milvus.yml

Terminal kembali:

PLAY [Create milvus-etcd, minio, pulsar] *****************************************************************

TASK [Gathering Facts] ********************************************************************************************
ok: [dockernode03]

TASK [etcd] *******************************************************************************************************
changed: [dockernode03]

TASK [pulsar] *****************************************************************************************************
changed: [dockernode03]

TASK [minio] ******************************************************************************************************
changed: [dockernode03]

PLAY [Create milvus nodes] ****************************************************************************************

TASK [Gathering Facts] ********************************************************************************************
ok: [dockernode02]

TASK [querynode] **************************************************************************************************
changed: [dockernode02]

TASK [datanode] ***************************************************************************************************
changed: [dockernode02]

TASK [indexnode] **************************************************************************************************
changed: [dockernode02]

PLAY [Create milvus coords] ***************************************************************************************

TASK [Gathering Facts] ********************************************************************************************
ok: [dockernode01]

TASK [rootcoord] **************************************************************************************************
changed: [dockernode01]

TASK [datacoord] **************************************************************************************************
changed: [dockernode01]

TASK [querycoord] *************************************************************************************************
changed: [dockernode01]

TASK [indexcoord] *************************************************************************************************
changed: [dockernode01]

TASK [proxy] ******************************************************************************************************
changed: [dockernode01]

PLAY RECAP ********************************************************************************************************
dockernode01               : ok=6    changed=5    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
dockernode02               : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
dockernode03               : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Sekarang Anda telah menggunakan Milvus pada tiga hos.

Menghentikan node

Anda dapat menghentikan semua node setelah Anda tidak membutuhkan cluster Milvus lagi.

Pastikan bahwa biner terraform tersedia di PATH.
  1. Jalankan terraform destroy dan masukkan yes saat diminta.

  2. Jika berhasil, semua instans node akan dihentikan.

Apa selanjutnya

Jika Anda ingin mempelajari cara men-deploy Milvus di cloud lain:

Coba Milvus yang Dikelola secara Gratis

Zilliz Cloud bebas masalah, didukung oleh Milvus dan 10x lebih cepat.

Mulai
Umpan balik

Apakah halaman ini bermanfaat?