(مهملة) نشر مجموعة Milvus على EC2
يصف هذا الموضوع كيفية نشر مجموعة Milvus على Amazon EC2 باستخدام Terraform و Ansible.
هذا الموضوع قديم وستتم إزالته قريبًا. يُنصح بالرجوع إلى نشر مجموعة Milvus العنقودية على EKS بدلاً من ذلك.
توفير مجموعة Milvus العنقودية
يصف هذا القسم كيفية استخدام تيرافورم Terraform لتوفير مجموعة Milvus العنقودية.
تيرافورم هي أداة برمجية للبنية التحتية كرمز (IaC). باستخدام تيرافورم، يمكنك توفير البنية التحتية باستخدام ملفات التكوين التوضيحية.
المتطلبات الأساسية
تثبيت تيرافورم وتكوينه
تثبيت وتكوين واجهة مستخدم AWS CLI
إعداد التكوين
يمكنك تنزيل ملفات تكوين القالب من Google Drive.
main.tf
يحتوي هذا الملف على التكوين الخاص بتوفير مجموعة Milvus.
variables.tf
يسمح هذا الملف بالتحرير السريع للمتغيرات المستخدمة لإعداد مجموعة Milvus أو تحديثها.
output.tf
وinventory.tmpl
تخزن هذه الملفات البيانات الوصفية لمجموعة Milvus العنقودية. البيانات الوصفية المستخدمة في هذا الموضوع هي
public_ip
لكل مثيل عقدة،private_ip
لكل مثيل عقدة، وجميع معرفات مثيلات EC2.
إعداد المتغيرات.tf
يصف هذا القسم التكوين الذي يحتوي عليه ملف variables.tf
الذي يحتوي على.
عدد العقد
يعلن القالب التالي متغير
index_count
المستخدم لتعيين عدد عقد الفهرس.يجب أن تكون قيمةindex_count
أكبر من أو تساوي واحدًا.variable "index_count" { description = "Amount of index instances to run" type = number default = 5 }
نوع المثيل لنوع العقدة
يعلن القالب التالي عن متغير
index_ec2_type
يستخدم لتعيين نوع المثيل لعقد الفهرس.variable "index_ec2_type" { description = "Which server type" type = string default = "c5.2xlarge" }
إذن الوصول
يعلن القالب التالي عن متغير
key_name
ومتغيرmy_ip
. يمثل المتغيرkey_name
مفتاح وصول AWS. يمثل المتغيرmy_ip
نطاق عنوان IP لمجموعة الأمان.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" }
إعداد main.tf
يصف هذا القسم التكوينات التي يحتوي عليها ملف main.tf
الذي يحتوي على.
موفر السحابة والمنطقة
يستخدم القالب التالي المنطقة
us-east-2
. راجع المناطق المتاحة لمزيد من المعلومات.provider "aws" { profile = "default" region = "us-east-2" }
مجموعة الأمان
يقوم القالب التالي بإعلان مجموعة أمان تسمح بنقل البيانات الواردة من نطاق عناوين CIDR الذي يمثله
my_ip
المعلن في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
يحدد القالب التالي VPC مع كتلة 10.0.0.0.0/24 CIDR 10.0.0.0/24 على مجموعة 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" } }
الشبكات الفرعية (اختياري)
يعلن القالب التالي شبكة فرعية يتم توجيه حركة المرور الخاصة بها إلى بوابة إنترنت. في هذه الحالة، يكون حجم كتلة CIDR للشبكة الفرعية هو نفس حجم كتلة 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 }
مثيلات العقدة (العقد)
يعلن القالب التالي عن مثيل عقدة MinIO. يعلن ملف القالب
main.tf
عن عقد من 11 نوعاً من العقد. بالنسبة لبعض أنواع العقد، تحتاج إلى تعيينroot_block_device
. انظر EBS، وEBS، وأجهزة الكتل الجذرية سريعة الزوال، وأجهزة الكتل الجذرية لمزيد من المعلومات.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}" } }
تطبيق التكوين
افتح محطة طرفية وانتقل إلى المجلد الذي يخزن
main.tf
.لتهيئة التهيئة، قم بتشغيل
terraform init
.لتطبيق التهيئة، قم بتشغيل
terraform apply
وأدخلyes
عندما يُطلب منك ذلك.
لقد قمت الآن بتزويد مجموعة Milvus مع تيرافورم.
بدء تشغيل مجموعة ميلفوس
يصف هذا القسم كيفية استخدام Ansible لبدء تشغيل مجموعة Milvus التي قمت بتزويدها.
Ansible هي أداة لإدارة التكوين تُستخدم لأتمتة توفير السحابة وإدارة التكوين.
المتطلبات الأساسية
- وحدة تحكم أنسيبل مثبتة.
تنزيل دليل تشغيل نشر عقدة Milvus Ansible Milvus
قم باستنساخ مستودع Milvus من GitHub لتنزيل دليل تشغيل نشر عقدة Ansible Milvus.
git clone https://github.com/milvus-io/milvus.git
تكوين ملفات التثبيت
يتم استخدام الملفين inventory.ini
و ansible.cfg
للتحكم في متغيرات البيئة وطرق التحقق من تسجيل الدخول في كتاب تشغيل Ansible. في الملف inventory.ini
، يحدد القسم dockernodes
جميع خوادم محركات دوكر. يحدد قسم ansible.cfg
جميع خوادم منسقي ميلفوس. يحدد قسم node
جميع خوادم عقد ميلفوس.
أدخل المسار المحلي لدليل التشغيل وقم بتكوين ملفات التثبيت.
$ cd ./milvus/deployments/docker/cluster-distributed-deployment
inventory.ini
قم بتكوين inventory.ini
لتقسيم المضيفين في مجموعات وفقاً لأدوارهم في نظام ميلفوس.
أضف أسماء المضيفين، وحدد docker
المجموعة و 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
التحكم في عمل كتاب التشغيل، على سبيل المثال، مفتاح SSH، إلخ. لا تقم بإعداد عبارة المرور عبر مفتاح SSH على مضيفي docker. وإلا سيفشل اتصال Ansible SSH. نوصي بإعداد نفس اسم المستخدم ومفتاح SSH على المضيفين الثلاثة وإعداد حساب المستخدم الجديد لتنفيذ sudo بدون كلمة مرور. خلاف ذلك، ستتلقى أخطاءً تفيد بأن اسم المستخدم لا يتطابق مع كلمة المرور أو أنك لم تُمنح امتيازات مرتفعة عند تشغيل كتاب تشغيل Ansible playbook.
[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
يحدد المهام أثناء تثبيت Docker. راجع التعليقات البرمجية في الملف للحصول على التفاصيل.
---
- 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
اختبار الاتصال بـ Ansible
اختبر الاتصال بـ Ansible.
$ ansible all -m ping
أضف -i
في الأمر لتحديد المسار إلى ملف المخزون إذا لم تحدده في ansible.cfg
، وإلا يستخدم Ansible /etc/ansible/hosts
.
تعود المحطة الطرفية على النحو التالي:
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"
}
تحقق من بناء جملة دفتر التشغيل
تحقق من بناء جملة دفتر التشغيل.
$ ansible-playbook deploy-docker.yml --syntax-check
عادةً ما ترجع المحطة الطرفية على النحو التالي:
playbook: deploy-docker.yml
تثبيت Docker
قم بتثبيت Docker باستخدام Playbook.
$ ansible-playbook deploy-docker.yml
إذا تم تثبيت Docker بنجاح على المضيفين الثلاثة، ستُظهر المحطة الطرفية ما يلي:
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
التحقق من التثبيت
قم بتسجيل الدخول إلى المضيفين الثلاثة باستخدام مفتاح SSH، وتحقق من التثبيت على المضيفين.
- للمضيف الجذر:
$ docker -v
- للمضيفين غير الجذر:
$ sudo docker -v
عادة، تعود المحطة الطرفية على النحو التالي:
Docker version 20.10.14, build a224086
تحقق من حالة تشغيل الحاويات.
$ docker ps
تحقق من بناء الجملة
تحقق من بناء الجملة deploy-milvus.yml
.
$ ansible-playbook deploy-milvus.yml --syntax-check
عادة، تعود المحطة الطرفية على النحو التالي:
playbook: deploy-milvus.yml
إنشاء حاوية ميلفوس
يتم تعريف مهام إنشاء حاوية ميلفوس في deploy-milvus.yml
.
$ ansible-playbook deploy-milvus.yml
تعود المحطة الطرفية على النحو التالي:
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
الآن تم نشر Milvus على المضيفين الثلاثة.
إيقاف العقد
يمكنك إيقاف جميع العقد بعد أن لم تعد بحاجة إلى مجموعة Milvus بعد الآن.
terraform
على موقعك PATH
. قم بتشغيل
terraform destroy
وأدخلyes
عندما يُطلب منك ذلك.إذا نجحت، يتم إيقاف جميع مثيلات العقد.
ما التالي
إذا كنت ترغب في معرفة كيفية نشر Milvus على السحب الأخرى: