🚀 جرب Zilliz Cloud، الـ Milvus المدارة بالكامل، مجاناً — تجربة أداء أسرع بـ 10 أضعاف! جرب الآن>>

milvus-logo
LFAI
الصفحة الرئيسية

(مهملة) نشر مجموعة Milvus على EC2

يصف هذا الموضوع كيفية نشر مجموعة Milvus على Amazon EC2 باستخدام Terraform و Ansible.

هذا الموضوع قديم وستتم إزالته قريبًا. يُنصح بالرجوع إلى نشر مجموعة Milvus العنقودية على EKS بدلاً من ذلك.

توفير مجموعة Milvus العنقودية

يصف هذا القسم كيفية استخدام تيرافورم Terraform لتوفير مجموعة Milvus العنقودية.

تيرافورم هي أداة برمجية للبنية التحتية كرمز (IaC). باستخدام تيرافورم، يمكنك توفير البنية التحتية باستخدام ملفات التكوين التوضيحية.

المتطلبات الأساسية

إعداد التكوين

يمكنك تنزيل ملفات تكوين القالب من 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}"
      }
    }
    

تطبيق التكوين

  1. افتح محطة طرفية وانتقل إلى المجلد الذي يخزن main.tf.

  2. لتهيئة التهيئة، قم بتشغيل terraform init.

  3. لتطبيق التهيئة، قم بتشغيل 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.
  1. قم بتشغيل terraform destroy وأدخل yes عندما يُطلب منك ذلك.

  2. إذا نجحت، يتم إيقاف جميع مثيلات العقد.

ما التالي

إذا كنت ترغب في معرفة كيفية نشر Milvus على السحب الأخرى:

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

ابدأ
التعليقات

هل كانت هذه الصفحة مفيدة؟