المنسق HA
كما هو موضح في بنية Milvus، تتكون Milvus من العديد من المكونات وتعمل بطريقة موزعة. من بين جميع المكونات، يضمن Milvus التوافر العالي للعاملين من خلال زيادة وتوسيع نطاق العقد، مما يجعل المنسقين الحلقة الضعيفة الوحيدة في السلسلة.
نظرة عامة
في الإصدار 2.2.3، يطبّق Milvus التوافر العالي للمنسقين لجعلهم يعملون في وضع الاستعداد النشط، مما يخفف من نقاط الفشل الأحادية المحتملة (SPoFs) التي يمكن أن تؤدي إلى عدم توفر الخدمة.
المنسق HA
يوضح الشكل أعلاه كيفية عمل المنسقين في وضع الاستعداد النشط. عند بدء تشغيل زوج من المنسقين، يقومون بالتسجيل في etcd باستخدام معرف الخادم الخاص بهم ويتنافسون على الدور النشط. المنسق الذي ينجح في استئجار الدور النشط من الخادم سيبدأ في الخدمة، وسيبقى المنسق الآخر في الزوج في وضع الاستعداد، يراقب الدور النشط ويكون جاهزًا للخدمة في حالة وفاة المنسق النشط.
تمكين المنسق HA
مع Helm
لبدء تشغيل منسقين متعددين وجعلهم يعملون في وضع الاستعداد النشط، يجب عليك إجراء التغييرات التالية على ملف values.yaml
.
- قم بتعيين
xxxCoordinator.replicas
إلى2
. - قم بتعيين
xxxCoordinator.activeStandby.enabled
إلىtrue
.
يستخدم مقتطف التعليمات البرمجية التالي RootCoord كمثال. يمكنك فعل الشيء نفسه مع المنسقين من الأنواع الأخرى.
rootCoordinator:
enabled: true
# You can set the number of replicas greater than 1 only if you also need to set activeStandby.enabled to true.
replicas: 2 # Otherwise, remove this configuration item.
resources: {}
nodeSelector: {}
affinity: {}
tolerations: []
extraEnv: []
heaptrack:
enabled: false
profiling:
enabled: false # Enable live profiling
activeStandby:
enabled: true # Set this to true to have RootCoordinators work in active-standby mode.
باستخدام Docker
لبدء تشغيل منسقين متعددين وجعلهم يعملون في وضع الاستعداد النشط، يمكنك إضافة بعض التعريفات إلى ملف docker-compose
الذي تستخدمه لبدء تشغيل مجموعة ميلفوس الخاصة بك.
يستخدم مقتطف الشيفرة التالي RootCoord كمثال. يمكنك فعل الشيء نفسه مع المنسقين من الأنواع الأخرى.
rootcoord:
container_name: milvus-rootcoord
image: milvusdb/milvus:v2.2.3
command: ["milvus", "run", "rootcoord"]
environment:
ETCD_ENDPOINTS: etcd:2379
MINIO_ADDRESS: minio:9000
PULSAR_ADDRESS: pulsar://pulsar:6650
ROOT_COORD_ADDRESS: rootcoord:53100
# add ROOT_COORD_ENABLE_ACTIVE_STANDBY to enable active standby
ROOT_COORD_ENABLE_ACTIVE_STANDBY: true
depends_on:
- "etcd"
- "pulsar"
- "minio"
# add the following to have RootCoords work in active-standby mode
# rootcoord-1:
# container_name: milvus-rootcoord-1
# image: milvusdb/milvus:v2.2.3
# command: ["milvus", "run", "rootcoord"]
# environment:
# ETCD_ENDPOINTS: etcd:2379
# MINIO_ADDRESS: minio:9000
# PULSAR_ADDRESS: pulsar://pulsar:6650
# ROOT_COORD_ADDRESS: rootcoord-1:53100
# # add ROOT_COORD_ENABLE_ACTIVE_STANDBY to enable active standby
# ROOT_COORD_ENABLE_ACTIVE_STANDBY: true
# depends_on:
# - "etcd"
# - "pulsar"
# - "minio"
مع قذيفة ماك/لينكس
لبدء تشغيل عدة منسقين وجعلهم يعملون في وضع الاستعداد النشط، يمكنك
تحميل التعليمات البرمجية المصدرية لـ Milvus على محرك الأقراص المحلي، وبدء تشغيل مجموعة Milvus من التعليمات البرمجية المصدرية كما يلي:
sudo ./scripts/start_cluster.sh
يعمل Milvus بمنسق واحد فقط من كل نوع في نهاية هذه الخطوة.
قم بتحديث
milvus.yaml
لتغيير رقم منفذ المنسق من كل نوع. يستخدم ما يلي rootCoord كمثال.rootCoord: address: localhost port: 53100 # change to 53001
ابدأ تشغيل المنسق الاحتياطي.
sudo nohup ./bin/milvus run rootcoord > /tmp/rootcoord2.log 2>&1 &
في نهاية هذه الخطوة، قم بتشغيل الأمر التالي للتحقق من وجود عمليتي منسقين.
ps aux|grep milvus
يجب أن تكون المخرجات مشابهة لـ
> ps aux|grep milvus root 12813 0.7 0.2 410709648 82432 ?? S 5:18PM 0:33.28 ./bin/milvus run rootcoord root 12816 0.5 0.2 409487968 62352 ?? S 5:18PM 0:22.69 ./bin/milvus run proxy root 17739 0.1 0.3 410289872 91792 s003 SN 6:01PM 0:00.30 ./bin/milvus run rootcoord ...
ويقوم المنسق الاحتياطي بإخراج إدخال سجل كل عشر ثوانٍ على النحو التالي:
[INFO] [sessionutil/session_util.go:649] ["serverName: rootcoord is in STANDBY ..."]
أوقف المنسق النشط في زوج وراقب سلوك المنسق الاحتياطي.
يمكنك أن تجد أن الأمر يستغرق 60 ثانية حتى يتولى المنسق الاحتياطي الدور النشط.
[2022/09/21 11:58:33.855 +08:00] [DEBUG] [sessionutil/session_util.go:677] ["watch the ACTIVE key"] [DELETE="key:\"by-dev/meta/session/rootcoord\" mod_revision:167 "] [2022/09/21 11:58:33.856 +08:00] [DEBUG] [sessionutil/session_util.go:677] ["watch the ACTIVE key"] [DELETE="key:\"by-dev/meta/session/rootcoord-15\" mod_revision:167 "] [2022/09/21 11:58:33.856 +08:00] [INFO] [sessionutil/session_util.go:683] ["stop watching ACTIVE key"] [2022/09/21 11:58:33.856 +08:00] [INFO] [sessionutil/session_util.go:655] ["start retrying to register as ACTIVE service..."] [2022/09/21 11:58:33.859 +08:00] [INFO] [sessionutil/session_util.go:641] ["register ACTIVE service successfully"] [ServerID=19] [2022/09/21 11:58:33.859 +08:00] [INFO] [sessionutil/session_util.go:690] ["quit STANDBY mode, this node will become ACTIVE"] [2022/09/21 11:58:33.859 +08:00] [INFO] [rootcoord/root_coord.go:638] ["rootcoord switch from standby to active, activating"] [2022/09/21 11:58:33.859 +08:00] [INFO] [rootcoord/root_coord.go:306] ["RootCoord Register Finished"] [2022/09/21 11:58:33.859 +08:00] [DEBUG] [rootcoord/service.go:148] ["RootCoord start done ..."] [2022/09/21 11:58:33.859 +08:00] [DEBUG] [components/root_coord.go:58] ["RootCoord successfully started"]
عناصر التكوين ذات الصلة
يتم تعطيل المنسق HA افتراضيًا. ويمكنك تمكين هذه الميزة يدويًا عن طريق تغيير العناصر التالية في ملف تكوين Milvus.
- تمكين rootCoord.activeStandby.enabled
- تمكين queryCoord.activeStandby.enabled
- dataCoord.activeStandby.enabled
الحدود
لا يوجد حالياً ضمان تناسق قوي بين الخدمة النشطة والخدمة الاحتياطية. لذلك، يحتاج المنسق الاحتياطي إلى إعادة تحميل البيانات الوصفية أثناء تولي الدور النشط.
لا يقوم Etcd بإصدار عقد إيجار إلا بعد انتهاء مهلة جلسة العمل الحالية. يتم تحديد المهلة الافتراضية لجلسة العمل بـ 60 ثانية. ولذلك، توجد فجوة مدتها 60 ثانية بين وقت وفاة المنسق النشط ووقت تولي المنسق الاحتياطي للدور النشط.