ClickHouseCluster، وكيفية تحجيم نصاب KeeperCluster بأمان، وما هي شروط الحالة التي ينبغي مراقبتها أثناء تنفيذ عملية التوسيع.
يحتاج
ClickHouseCluster دائمًا إلى Keeper، ويُشار إليه عبر الحقل الإلزامي spec.keeperClusterRef — ويُنسّق المشغّل العنقود من خلاله بغضّ النظر عن حجمه. ولتشغيل أكثر من نسخة متماثلة واحدة لكل شارد، يجب أيضًا أن تكون البيانات مخزّنة في جداول ReplicatedMergeTree، لأن replication هي ما يتيح لنسخة متماثلة ثانية تقديم الصفوف نفسها.تحجيم النسخ المتماثلة
spec.replicas عدد النسخ المتماثلة في كل shard. تعمل كل نسخة متماثلة ضمن StatefulSet مستقل باسم <cluster>-clickhouse-<shard>-<replica>، لذا فإن أي عنقود يتضمن shards: 2 وreplicas: 3 يشغّل ستة StatefulSets.
ارفع العدد أو اخفضه مباشرةً:
تحجيم الشاردات
spec.shards عدد الشاردات. ويضيف كل شارد جديد مجموعة كاملة من StatefulSets لكل نسخة متماثلة، كما ينشئ المشغّل مورد PodDisruptionBudget واحدًا لكل شارد بحيث لا يُحتسب أي انقطاع في شارد واحد على حساب شارد آخر.
Distributed أو آلية توجيه صريحة الشارد الذي يستقر فيه الصف، لذا فإن إضافة شارد توفّر وجهةً لعمليات الكتابة الجديدة من دون المساس بالصفوف المخزّنة بالفعل في الشاردات الحالية.
المزامنة التلقائية للمخطط
spec.settings.enableDatabaseSync مساوية لـ true (وهو الإعداد الافتراضي)، يُبقي المُشغِّل المخطط متوافقًا مع تغيّر الطوبولوجيا:
- عند التوسّع — بمجرد أن تصبح هناك نسختان متماثلتان جاهزتان على الأقل، ينسخ المُشغِّل تعريفات قواعد البيانات إلى النسخ المتماثلة المُنشأة حديثًا، بحيث تنضم النسخة المتماثلة الجديدة وهي تحمل قواعد بيانات
Replicatedوقواعد بيانات التكامل نفسها الموجودة في بقية العقد في العنقود. - عند التقليص — قبل اختفاء نسخة متماثلة، يحذف المُشغِّل تسجيل تلك النسخة من كل قاعدة بيانات
ReplicatedباستخدامSYSTEM DROP DATABASE REPLICA، حتى لا ينتظر العنقود بعد تقليصه نسخةً متماثلة لقاعدة بياناتReplicatedلم تعد موجودة.
Replicated ومحركات قواعد بيانات التكامل. ولا ينقل هذا بيانات الجداول — إذ تبقى بيانات الصفوف في جداول ReplicatedMergeTree ويجري نسخها المتماثل عبر Keeper بشكل مستقل عن مزامنة المخطط هذه. وعند وجود نسخة متماثلة جاهزة واحدة فقط، لا توجد جهة هدف للنسخ إليها، لذلك يتجاوز المُشغِّل هذه الخطوة ويسجّل أنه لا يملك هدفًا.
اضبط enableDatabaseSync: false لتعطيل هذا السلوك، على سبيل المثال عندما تتولى أداة خارجية نشر المخطط. وعندها يبلّغ المُشغِّل عن السبب SchemaSyncDisabled في الحالة SchemaInSync.
الحالات التي ينبغي مراقبتها
تكتمل عملية تغيير الحجم عندما تعرض
ClusterSizeAligned القيمة UpToDate، وتعرض SchemaInSync القيمة ReplicasInSync، وتعرض Ready القيمة AllShardsReady.
تحجيم Keeper
KeeperCluster نصاب RAFT، لذلك لا يغيّر المشغّل أعضاءه إلا بواقع نسخة متماثلة واحدة في كل مرة، وفقط عندما يكون الـ عنقود في حالة مستقرة. وهذا يحمي النصاب: إذ يمكن لعنقود من نوع 2F+1 تحمّل تعطل F من الأعضاء، لذا يواصل عنقود مكوّن من 3 عُقد العمل مع غياب عضو واحد، وعنقود مكوّن من 5 عُقد مع غياب عضوين.
maxUnavailable: replicas/2 للحفاظ على النصاب أثناء عمليات التعطيل الطوعية.
توضّح الحالة ScaleAllowed ما إذا كان يمكن تغيير عضوية النصاب في الوقت الحالي:
وسّع Keeper أو قلّصه على مراحل فردية، ودَع
ScaleAllowed يعود إلى ReadyToScale بين كل تغيير وآخر. فالانتقال بعدة أعضاء دفعة واحدة لا يتجاوز عملية reconcile التي تتم عضوًا واحدًا في كل مرة — إذ يظل المشغّل يمرّ عبر النصاب عضوًا واحدًا في كل خطوة.