(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
daninventory.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.Nilaiindex_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 variabelmy_ip
. Variabelkey_name
mewakili kunci akses AWS. Variabelmy_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 divariables.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 mengaturroot_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
Buka terminal dan arahkan ke folder yang menyimpan
main.tf
.Untuk menginisialisasi konfigurasi, jalankan
terraform init
.Untuk menerapkan konfigurasi, jalankan
terraform apply
dan masukkanyes
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
- Pengontrol Ansible telah diinstal.
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.
terraform
tersedia di PATH
. Jalankan
terraform destroy
dan masukkanyes
saat diminta.Jika berhasil, semua instans node akan dihentikan.
Apa selanjutnya
Jika Anda ingin mempelajari cara men-deploy Milvus di cloud lain: