إعداد النسخ المتماثل CDC

يوضح هذا الدليل كيفية نشر مجموعتين مستقلتين من مجموعات Milvus مع مشغل Milvus وتكوين النسخ المتماثل ل CDC من مجموعة مصدر إلى مجموعة مستهدفة.

تستخدم الأمثلة:

  • source-cluster كمجموعة أساسية.
  • target-cluster كمجموعة احتياطية.
  • milvus كمساحة أسماء لمجموعات Milvus.
  • milvus-operator كمساحة أسماء لـ Milvus Operator.

قبل أن تبدأ، اقرأ Milvus CDC لفهم نموذج الاستعداد الأساسي وخيارات تجاوز الفشل.

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

  • Milvus v2.6.16 أو أحدث.
  • مشغل Milvus الإصدار 1.3.4 أو أحدث.
  • تتوفر مجموعة Kubernetes.
  • يمكن لمجموعتي المصدر والهدف الاتصال ببعضهما البعض عبر الشبكة.
  • لديك بيانات اعتماد المسؤول لكلا مجموعتي Milvus.
  • أنت تعرف عدد القنوات الفعلية لكل مجموعة.

الخطوة 1: ترقية مشغل ميلفوس

قم بإضافة مستودع Milvus Operator Helm:

helm repo add zilliztech-milvus-operator https://zilliztech.github.io/milvus-operator/

قم بتحديث المستودع:

helm repo update zilliztech-milvus-operator

قم بتثبيت أو ترقية مشغل Milvus:

helm -n milvus-operator upgrade --install milvus-operator \
  zilliztech-milvus-operator/milvus-operator \
  --create-namespace

تحقق من تشغيل جراب المشغل:

kubectl get pods -n milvus-operator

مثال على الإخراج:

NAME                               READY   STATUS    RESTARTS   AGE
milvus-operator-6f7d8c9c7d-xm4tj   1/1     Running   0          54s

الخطوة 2: نشر مجموعة المصدر

قم بإنشاء ملف باسم milvus_source_cluster.yaml:

apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
  name: source-cluster
  namespace: milvus
  labels:
    app: milvus
spec:
  mode: standalone
  components:
    image: milvusdb/milvus:v2.6.16
    cdc:
      replicas: 1
  dependencies:
    msgStreamType: woodpecker

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

kubectl create namespace milvus
kubectl apply -f milvus_source_cluster.yaml

تحقق من أن كبسولات مجموعة المصدر قيد التشغيل:

kubectl get pods -n milvus

مثال على الإخراج:

NAME                                                   READY   STATUS    RESTARTS   AGE
source-cluster-etcd-0                                  1/1     Running   0          3m
source-cluster-minio-6d8f7d9b9f-9t7j2                  1/1     Running   0          3m
source-cluster-milvus-standalone-7f8d9c8f6d-r2m5x      1/1     Running   0          2m
source-cluster-milvus-cdc-66d64747bd-sckxj             1/1     Running   0          2m

تأكد من أن جراب CDC، مثل source-cluster-milvus-cdc-... ، في حالة Running.

الخطوة 3: نشر المجموعة المستهدفة

قم بإنشاء ملف باسم milvus_target_cluster.yaml:

apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
  name: target-cluster
  namespace: milvus
  labels:
    app: milvus
spec:
  mode: standalone
  components:
    image: milvusdb/milvus:v2.6.16
    cdc:
      replicas: 1
  dependencies:
    msgStreamType: woodpecker

يتم تمكين مكون CDC على الكتلة الهدف أيضًا. يكون خاملاً بينما يكون الهدف في وضع الاستعداد، ولكنه مطلوب إذا أصبح الهدف لاحقًا هو الأساسي بعد التبديل.

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

kubectl apply -f milvus_target_cluster.yaml

تحقق من أن كبسولات المجموعة الهدف قيد التشغيل:

kubectl get pods -n milvus | grep -E 'NAME|target-cluster'

مثال على الإخراج:

NAME                                                   READY   STATUS    RESTARTS   AGE
target-cluster-etcd-0                                  1/1     Running   0          3m
target-cluster-minio-5f7c8d9b6f-k8s2q                  1/1     Running   0          3m
target-cluster-milvus-standalone-66dc8d9f7f-5n6bp      1/1     Running   0          2m
target-cluster-milvus-cdc-7f8c9d6b8c-q4t9m             1/1     Running   0          2m

الخطوة 4: إعداد معلومات المجموعة

احصل على عناوين خدمة Milvus لكلا المجموعتين:

kubectl get svc -n milvus | grep -E 'NAME|source-cluster|target-cluster'

مثال على الإخراج:

NAME                                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)              AGE
source-cluster-milvus                 ClusterIP   10.98.124.90     <none>        19530/TCP,9091/TCP   8m
target-cluster-milvus                 ClusterIP   10.109.234.172   <none>        19530/TCP,9091/TCP   3m

قم بإعداد نوعين من العناوين:

  • تتم كتابة عناوين المجموعات إلى تكوين النسخ المتماثل وتستخدمها مكونات CDC. يجب أن تكون هذه العناوين قابلة للوصول إليها من قرون CDC.
  • يتم استخدام عناوين العميل فقط بواسطة عميل Python عند استدعاء واجهات برمجة تطبيقات Milvus. إذا كنت تقوم بتشغيل عميل Python خارج مجموعة Kubernetes، فقم بتعرض خدمات Milvus من خلال طريقة الوصول العادية، مثل موازن التحميل أو الدخول أو المنفذ إلى الأمام.

قم بإعداد معلومات الاتصال وقوائم pchannel لكلا المجموعتين:

source_cluster_addr = "http://source-cluster-milvus.milvus.svc.cluster.local:19530"
target_cluster_addr = "http://target-cluster-milvus.milvus.svc.cluster.local:19530"

source_client_addr = source_cluster_addr
target_client_addr = target_cluster_addr

# If your Python client runs outside the Kubernetes cluster, replace only
# source_client_addr and target_client_addr with externally reachable addresses.
# Keep source_cluster_addr and target_cluster_addr reachable from CDC pods.
# For example:
# source_client_addr = "http://127.0.0.1:19530"
# target_client_addr = "http://127.0.0.1:19531"

source_cluster_token = "root:Milvus"
target_cluster_token = "root:Milvus"

source_cluster_id = "source-cluster"
target_cluster_id = "target-cluster"

pchannel_num = 16
source_cluster_pchannels = [
    f"{source_cluster_id}-rootcoord-dml_{i}"
    for i in range(pchannel_num)
]
target_cluster_pchannels = [
    f"{target_cluster_id}-rootcoord-dml_{i}"
    for i in range(pchannel_num)
]

استبدل العناوين بعناوين خدمة Milvus الفعلية في بيئتك. لا تقم بتعيين source_cluster_addr أو target_cluster_addr إلى عنوان منفذ إعادة توجيه محلي ما لم يكن بإمكان كبسولات CDC الوصول إلى هذا العنوان أيضًا. يجب أن تتطابق قائمة pchannel مع نشر Milvus الخاص بك. لا تنسخ قيم المثال دون التحقق من تكوين مجموعتك.

الخطوة 5: إنشاء تكوين النسخ المتماثل

قم بإنشاء تكوين النسخ المتماثل من source-cluster إلى target-cluster:

replicate_config = {
    "clusters": [
        {
            "cluster_id": source_cluster_id,
            "connection_param": {
                "uri": source_cluster_addr,
                "token": source_cluster_token,
            },
            "pchannels": source_cluster_pchannels,
        },
        {
            "cluster_id": target_cluster_id,
            "connection_param": {
                "uri": target_cluster_addr,
                "token": target_cluster_token,
            },
            "pchannels": target_cluster_pchannels,
        },
    ],
    "cross_cluster_topology": [
        {
            "source_cluster_id": source_cluster_id,
            "target_cluster_id": target_cluster_id,
        }
    ],
}

الخطوة 6: تطبيق تكوين النسخ المتماثل

قم بتطبيق نفس التكوين على كلا المجموعتين:

from pymilvus import MilvusClient

source_client = MilvusClient(
    uri=source_client_addr,
    token=source_cluster_token,
)
target_client = MilvusClient(
    uri=target_client_addr,
    token=target_cluster_token,
)

try:
    source_client.update_replicate_configuration(**replicate_config)
    target_client.update_replicate_configuration(**replicate_config)
finally:
    source_client.close()
    target_client.close()

من أجل أتمتة الإنتاج، استخدم عملاء منفصلين قصيري الأجل لعملية مستوى التحكم هذه. يؤدي ذلك إلى تجنب مشاركة نفس قناة gRPC مع حركة مرور DML للتطبيق أثناء تغيير دور المجموعة.

بعد تطبيق التهيئة، يتم نسخ التغييرات المكتوبة على source-cluster إلى target-cluster.

الخطوة 7: التحقق من النسخ المتماثل للبيانات

للتحقق من عمل النسخ المتماثل

  1. اتصل بـ source-cluster.
  2. إنشاء مجموعة.
  3. أدخل البيانات في المجموعة.
  4. قم بتحميل المجموعة وتشغيل استعلام أو بحث على source-cluster.
  5. الاتصال ب target-cluster.
  6. قم بتشغيل نفس الاستعلام أو البحث على target-cluster دون تحميل المجموعة يدويًا على المجموعة الاحتياطية.
  7. تأكد من أن البيانات المتوقعة مرئية على كلا المجموعتين.

المجموعة المستهدفة هي مجموعة احتياطية في هذه الطوبولوجيا. لا تقم بتشغيل عمليات DDL أو DCL اليدوية، مثل load_collection ، على المجموعة الاحتياطية. يجب تنفيذ هذه العمليات على المجموعة المصدر ونسخها إلى المجموعة الهدف.

يعتمد رمز التحقق الدقيق على مخطط المجموعة الخاص بك. للحصول على سير عمل تجميع Milvus الأساسي، راجع وثائق البدء السريع لـ Milvus.

تأخر CDC

تأخر CDC هو نافذة البيانات بين المجموعة الأساسية والمجموعة الاحتياطية. يجب مراقبته باستمرار بعد تكوين النسخ المتماثل.

يمكن أن يزيد تأخر CDC عندما:

  • ارتفاع معدل الكتابة الأساسي.
  • زيادة زمن انتقال الشبكة أو فقدان الحزمة بين المجموعات.
  • زيادة التحميل على المجموعة الاحتياطية.
  • تكون عقد CDC غير متوفرة بشكل كافٍ.
  • تشغيل عمليات DDL أو عمليات استيراد كبيرة.

استخدم تأخر CDC لتوجيه القرارات التشغيلية:

  • إذا كان التأخر منخفضاً، يجب أن يكتمل التحويل بشكل أسرع.
  • إذا كان التأخر مرتفعاً، فقد يؤدي تجاوز الفشل إلى فقدان المزيد من البيانات.

يمكنك تقدير تأخر CDC باستخدام استعلام PromQL التالي:

clamp_min(
  max by (channel_name) (
    milvus_wal_last_confirmed_time_tick
  )
  -
  min by (channel_name) (
    milvus_cdc_last_replicated_time_tick
  ),
  0
)

تكون النتيجة بالثواني. بالنسبة لكل قناة مصدر، يقارن الاستعلام بين آخر نقرة زمنية مؤكدة ل WAL مع آخر نقرة زمنية تم نسخها بواسطة CDC. إذا تم النسخ المتماثل الأساسي إلى مجموعات احتياطية متعددة، فإن تعبير min by (channel_name) يُبلغ عن أبطأ تقدم للنسخ المتماثل لتلك القناة.

في حالة قيام Prometheus بكشط مجموعات Milvus متعددة، أضف عوامل تصفية التسمية التي تطابق عملية النشر لديك، مثل namespace أو app_kubernetes_io_instance ، لتجنب خلط المقاييس من مجموعات مختلفة.

الأسئلة الشائعة

هل أحتاج إلى استدعاء update_replicate_configuration على كلا المجموعتين؟

نعم. قم بتطبيق نفس الطوبولوجيا على جميع المجموعات المشاركة. إذا لم تكن إحدى العناقيد أساسية في وقت الاستدعاء، فإنها تنتظر حتى يتم تطبيق الطوبولوجيا من خلال CDC.

كيف يمكنني اختيار cluster_id ؟

استخدم معرّفًا ثابتًا وفريدًا لكل مجموعة. يستخدم المعرف أيضًا في أسماء قنوات pchannel ومراجع طوبولوجيا النسخ المتماثل.

هل يمكنني تغيير pchannels بعد تكوين النسخ المتماثل؟

يمكنك تحديث الطوبولوجيا، ولكن يجب أن تتطابق قائمة pchannel مع تخطيط المجموعة. تعامل مع تغييرات pchannel كعملية متقدمة وتحقق من النسخ المتماثل بعناية بعد ذلك.