Skip to main content
في هذا المثال، ستتعلّم كيفية إعداد عنقود ClickHouse بسيط يوفّر كلاً من التكرار والتوسعة. ويتكوّن من شاردين ونسختين متماثلتين، مع عنقود ClickHouse Keeper من 3 عقد لإدارة التناسق والحفاظ على النصاب داخل العنقود.
تظهر أدناه معمارية العنقود الذي ستقوم بإعداده:
على الرغم من إمكانية تشغيل ClickHouse Server وClickHouse Keeper معًا على الخادم نفسه، فإننا نوصي بشدة باستخدام مضيفات مخصصة لـ ClickHouse Keeper في بيئات production، وهذا هو النهج الذي سنوضحه في هذا المثال.يمكن أن تكون خوادم Keeper أصغر حجمًا، وعادةً ما تكون 4GB RAM كافية لكل خادم Keeper إلى أن تكبر ClickHouse Servers.

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

1

إعداد بنية الدليل وبيئة الاختبار

ملفات المثالتوضح لك الخطوات التالية كيفية إعداد العنقود من الصفر. إذا كنت تفضل تخطي هذه الخطوات والانتقال مباشرةً إلى تشغيل العنقود، فيمكنك الحصول على ملفات المثال من مستودع الأمثلة مجلد ‘docker-compose-recipes’.
في هذا الدليل العملي، ستستخدم Docker compose لإعداد مجموعة ClickHouse. يمكن تعديل هذا الإعداد ليعمل على أجهزة محلية منفصلة، أو أجهزة افتراضية، أو نُسَخ سحابية كذلك.نفّذ الأوامر التالية لإعداد بنية الدليل لهذا المثال:
أضف ملف docker-compose.yml التالي إلى دليل clickhouse-cluster:
docker-compose.yml
أنشئ المجلدات الفرعية والملفات التالية:
  • يحتوي الدليل config.d على ملف إعدادات خادم ClickHouse ‏config.xml، حيث تُحدَّد الإعدادات المخصصة لكل عقدة ClickHouse. وتُدمَج هذه الإعدادات مع ملف إعدادات ClickHouse الافتراضي config.xml الذي يأتي مع كل عملية تثبيت لـ ClickHouse.
  • يحتوي الدليل users.d على ملف إعدادات المستخدم users.xml، حيث تُحدَّد الإعدادات المخصصة للمستخدمين. وتُدمَج هذه الإعدادات مع ملف إعدادات ClickHouse الافتراضي users.xml الذي يأتي مع كل عملية تثبيت لـ ClickHouse.
أدلة الإعدادات المخصصةمن أفضل الممارسات استخدام الدليلين config.d وusers.d عند كتابة إعداداتك الخاصة، بدلًا من تعديل الإعدادات الافتراضية مباشرةً في /etc/clickhouse-server/config.xml وetc/clickhouse-server/users.xml.السطر
يضمن أن أقسام الإعدادات المحددة في الدليلين config.d وusers.d تحلّ محل أقسام الإعدادات الافتراضية المحددة في الملفين الافتراضيين config.xml وusers.xml.
2

تهيئة عقد ClickHouse

إعداد الخادم

قم الآن بتعديل كل ملف تهيئة فارغ config.xml الموجود في fs/volumes/clickhouse-{}/etc/clickhouse-server/config.d. يجب تغيير الأسطر المميزة أدناه بحيث تكون خاصة بكل عقدة:
يُشرح كل قسم من أقسام ملف الإعداد أعلاه بمزيد من التفاصيل في ما يلي.

الشبكة والتسجيل

يُفعَّل الاتصال الخارجي عبر واجهة الشبكة من خلال تفعيل إعداد listen host. ويضمن ذلك أن يكون خادم ClickHouse قابلاً للوصول من قِبل المضيفات الأخرى:
تم ضبط منفذ واجهة برمجة تطبيقات HTTP على 8123:
يُضبط منفذ TCP المستخدم للتواصل عبر البروتوكول الأصلي لـ ClickHouse بين clickhouse-client وأدوات ClickHouse الأصلية الأخرى، وبين clickhouse-server وخوادم clickhouse-server الأخرى على 9000:
يُعرَّف إعداد التسجيل في كتلة <logger>. يوفر هذا المثال سجل تصحيح يُدوَّر عند 1000 ميغابايت ثلاث مرات:
لمزيد من المعلومات حول تهيئة التسجيل، راجع التعليقات المضمّنة في ملف التهيئة الافتراضي لـ ClickHouse.

تهيئة الكلستر

يتم إعداد إعدادات الكلستر في مقطع <remote_servers>. هنا يُعرَّف اسم الكلستر cluster_2S_2R.يُعرِّف الكتلة <cluster_2S_2R></cluster_2S_2R> تخطيط الكلستر باستخدام إعدادَي <shard></shard> و<replica></replica>، ويعمل كقالب لاستعلامات DDL الموزَّعة، وهي الاستعلامات التي تُنفَّذ عبر الكلستر بأكمله باستخدام جملة ON CLUSTER. تكون استعلامات DDL الموزَّعة مسموحاً بها افتراضياً، غير أنه يمكن تعطيلها عبر الإعداد allow_distributed_ddl_queries.يُضبط internal_replication على true بحيث تُكتب البيانات إلى نسخة واحدة فقط من النسخ المتماثلة.
يُحدِّد القسم <cluster_2S_2R></cluster_2S_2R> تخطيط الكلستر، ويعمل بوصفه template لاستعلامات DDL الموزَّعة، وهي الاستعلامات التي تُنفَّذ عبر الكلستر باستخدام جملة ON CLUSTER.

تهيئة Keeper

يُخبر القسم <ZooKeeper> ClickHouse بمكان تشغيل ClickHouse Keeper (أو ZooKeeper). نظرًا لاستخدامنا Keeper cluster، يجب تحديد كل <node> من عقد الـ cluster، مع الـ hostname ورقم المنفذ الخاص به باستخدام الوسمَين <host> و<port> على التوالي.سيُشرح إعداد ClickHouse Keeper في الخطوة التالية من الدليل العملي.
على الرغم من أنه يمكن تشغيل ClickHouse Keeper على الخادم نفسه الذي يعمل عليه ClickHouse Server، فإننا نوصي بشدة، في بيئات الإنتاج، بتشغيل ClickHouse Keeper على مضيفات مخصصة.

تهيئة الماكرو

بالإضافة إلى ذلك، يُستخدم قسم <macros> لتعريف استبدالات المعاملات للجداول المُكرَّرة. وتُدرج هذه الاستبدالات في system.macros، مما يتيح استخدام استبدالات مثل {shard} و{replica} في الاستعلامات.

تهيئة المستخدم

عدِّل الآن كل ملف تهيئة فارغ users.xml الموجود في fs/volumes/clickhouse-{}/etc/clickhouse-server/users.d بإضافة ما يلي:
/users.d/users.xml
في هذا المثال، تم تكوين المستخدم default بدون كلمة مرور لتبسيط الإعداد. في التطبيق الفعلي، لا يُنصح بهذا الأسلوب.
في هذا المثال، يكون ملف users.xml متماثلًا على جميع العقد في العنقود.
3

إعداد ClickHouse Keeper

بعد ذلك، ستُعِد ClickHouse Keeper، والذي يُستخدم للتنسيق.

إعداد Keeper

لكي يعمل النسخ المتماثل، يجب إعداد عنقود ClickHouse Keeper وتهيئته. يوفّر ClickHouse Keeper نظام التنسيق لنسخ البيانات المتماثل، إذ يعمل كبديل مباشر لـ ZooKeeper، الذي يمكن استخدامه أيضًا. ومع ذلك، يُوصى باستخدام ClickHouse Keeper لأنه يوفّر ضمانات أفضل وموثوقية أعلى ويستخدم موارد أقل من ZooKeeper. ولتحقيق التوافر العالي والحفاظ على quorum، يُوصى بتشغيل ثلاث عقد ClickHouse Keeper على الأقل.
يمكن تشغيل ClickHouse Keeper على أي عقدة في العنقود إلى جانب ClickHouse، رغم أنه يُوصى بتشغيله على عقدة مخصصة، مما يتيح التوسّع وإدارة عنقود ClickHouse Keeper بشكل مستقل عن عنقود قاعدة البيانات.
أنشئ ملفات keeper_config.xml لكل عقدة ClickHouse Keeper باستخدام الأمر التالي من جذر مجلد المثال:
عدِّل ملفات التكوين الفارغة التي أُنشئت في دليل كل عقدة fs/volumes/clickhouse-keeper-{}/etc/clickhouse-keeper. يجب تعديل الأسطر المظللة أدناه بحيث تكون خاصة بكل عقدة:
/clickhouse-keeper/keeper_config.xml
سيحتوي كل ملف تهيئة على التكوين الفريد التالي (كما هو موضح أدناه). يجب أن يكون server_id المستخدم فريدًا لتلك العقدة المحددة من ClickHouse Keeper ضمن العنقود، وأن يطابق <id> الخاص بالخادم المعرّف في قسم <raft_configuration>. يمثل tcp_port المنفذ الذي يستخدمه عملاء ClickHouse Keeper.
يُستخدم القسم التالي لتكوين الخوادم المشاركة في النصاب ضمن خوارزمية إجماع Raft:
ClickHouse Cloud يسهّل الإدارةClickHouse Cloud يخفف العبء التشغيلي المرتبط بإدارة الأجزاء والنُسخ المتماثلة. تتولى المنصة تلقائيًا الإتاحة العالية والنسخ المتماثل وقرارات التوسّع. وتكون موارد الحوسبة والتخزين منفصلة، وتتوسع بحسب الطلب من دون الحاجة إلى إعداد يدوي أو صيانة مستمرة.اقرأ المزيد
4

اختبر الإعداد

تأكد من أن Docker قيد التشغيل على جهازك. ابدأ الـ cluster باستخدام الأمر docker-compose up من الدليل الجذر cluster_2S_2R:
يجب أن ترى Docker يبدأ بسحب صور ClickHouse وKeeper، ثم يشغّل الحاويات:
للتحقق من أن الـcluster يعمل، اتصل بأي عقدة منه وشغّل الاستعلام التالي. يظهر أدناه أمر الاتصال بالعقدة الأولى:
إذا نجحت العملية، فسيظهر لك موجّه ClickHouse client:
نفّذ الاستعلام التالي للتحقق من طوبولوجيات العناقيد المعرّفة والمضيفات التابعة لها:
Query
Response
نفّذ الاستعلام التالي للتحقق من حالة عنقود ClickHouse Keeper:
Query
Response
يُستخدم الأمر mntr أيضًا على نطاق واسع للتحقق من أن ClickHouse Keeper قيد التشغيل، وللحصول على معلومات عن حالة العلاقة بين عقد Keeper الثلاث. في الإعداد المستخدم في هذا المثال، هناك ثلاث عقد تعمل معًا. ستنتخب هذه العقد قائدًا، وستكون العقد المتبقية عقدًا تابعة.يوفّر الأمر mntr معلومات متعلقة بالأداء، ويُبيّن أيضًا ما إذا كانت عقدة معيّنة تابعة أم قائدًا.
قد تحتاج إلى تثبيت netcat حتى تتمكن من إرسال الأمر mntr إلى Keeper. يُرجى مراجعة صفحة nmap.org للحصول على معلومات التنزيل.
شغّل الأمر أدناه من سطر الأوامر على clickhouse-keeper-01 وclickhouse-keeper-02 و clickhouse-keeper-03 للتحقق من حالة كل عقدة Keeper. الأمر الخاص بـ clickhouse-keeper-01 موضح أدناه:
تعرض الاستجابة أدناه مثالًا على استجابة من عقدة follower:
Response
يوضح الرد أدناه مثالًا لرد صادر من العقدة القائدة:
Response
بهذا، تكون قد أعددت بنجاح عنقود ClickHouse يضم شاردين ونسختين متماثلتين. في الخطوة التالية، ستنشئ جدولًا على العنقود.
5

إنشاء قاعدة بيانات

الآن، بعد أن تحققت من أن العنقود مُعَدّ بشكل صحيح ويعمل، ستعيد إنشاء الجدول نفسه المستخدم في الدليل العملي لمجموعة البيانات النموذجية أسعار العقارات في المملكة المتحدة. ويحتوي على نحو 30 مليون صفّ من أسعار العقارات المدفوعة للعقارات في إنجلترا وويلز منذ عام 1995.اتصل بعميل كل مضيف بتشغيل كل واحد من الأوامر التالية من تبويبات طرفية أو نوافذ منفصلة:
يمكنك تشغيل الاستعلام أدناه من clickhouse-client على كل مضيف للتأكد من أنه لم يتم إنشاء أي قواعد بيانات بعد، باستثناء القواعد الافتراضية:
Query
Response
من العميل clickhouse-01، شغّل استعلام DDL موزّع التالي باستخدام بند ON CLUSTER لإنشاء قاعدة بيانات جديدة باسم uk:
يمكنك مرة أخرى تشغيل الاستعلام نفسه كما في السابق من عميل كل مضيف للتأكد من أن قاعدة البيانات قد أُنشئت على مستوى العنقود رغم تشغيل الاستعلام من clickhouse-01 فقط:
6

أنشئ جدولًا على العنقود

الآن بعد إنشاء قاعدة البيانات، أنشئ جدولًا مع النسخ المتماثل.شغّل الاستعلام التالي من أي عميل على أي مضيف:
لاحظ أنه مطابق للاستعلام المستخدم في دليل عملي لمجموعة البيانات النموذجية UK property prices الأصلي ضمن عبارة CREATE، باستثناء عبارة ON CLUSTER واستخدام المحرك ReplicatedMergeTree.صُمِّمت عبارة ON CLUSTER للتنفيذ الموزع لاستعلامات DDL (لغة تعريف البيانات) مثل CREATE وDROP وALTER وRENAME، بما يضمن تطبيق تغييرات المخطط هذه على جميع العقد في المجموعة.يعمل المحرك ReplicatedMergeTree تمامًا مثل محرك الجداول العادي MergeTree، لكنه ينسخ البيانات أيضًا. ويتطلب تحديد مَعلمَين:
  • zoo_path: مسار Keeper/ZooKeeper إلى البيانات الوصفية للجدول.
  • replica_name: اسم النسخة المتماثلة للجدول.

يمكن ضبط المَعلَم zoo_path على أي قيمة تختارها، مع أنه يُوصى باتباع الاصطلاح القائم على استخدام البادئة
حيث:
  • سيتم استبدال {database} و{table} تلقائيًا.
  • إن {shard} و{replica} عبارتان من نوع الماكرو جرى تعريفهما سابقًا في ملف config.xml لكل عقدة من عقد ClickHouse.
يمكنك تشغيل الاستعلام أدناه من العميل على كل مضيف للتأكد من أن الجدول قد أُنشئ عبر العنقود:
Query
Response
7

إدراج البيانات في جدول موزّع

لإدراج البيانات في الجدول، لا يمكن استخدام ON CLUSTER لأنه لا ينطبق على استعلامات DML (لغة معالجة البيانات) مثل INSERT وUPDATE وDELETE. ولإدراج البيانات، يجب استخدام محرّك الجدول Distributed. وكما تعلّمت في الدليل الخاص بإعداد عنقود يضم جزأين ونسخة متماثلة واحدة، فإن الجداول الموزّعة هي جداول يمكنها الوصول إلى الأجزاء الموجودة على مضيفين مختلفين، وتُعرَّف باستخدام محرّك الجدول Distributed. ويعمل الجدول الموزّع بوصفه واجهة موحّدة عبر جميع الأجزاء في العنقود.من أي عميل على أحد المضيفين، شغّل الاستعلام التالي لإنشاء جدول موزّع باستخدام الجدول المتماثل الحالي الذي أنشأناه في الخطوة السابقة:
على كل مضيف، سترى الآن الجداول التالية في قاعدة البيانات uk:
يمكن إدراج البيانات في جدول uk_price_paid_distributed من أيٍّ من العملاء على المضيفات باستخدام الاستعلام التالي:
شغّل الاستعلام التالي للتأكد من أن البيانات المُدخلة قد وُزِّعت بالتساوي عبر عُقد العنقود:

الخلاصة

تتمثل ميزة بنية العُنقود هذه، التي تضم شاردين ونسختين متماثلتين، في أنها توفّر كلاً من قابلية التوسع وتحمل الأعطال. تُوزَّع البيانات عبر مضيفين منفصلين، مما يقلّل متطلبات التخزين وعمليات الإدخال/الإخراج لكل عقدة، بينما تُعالَج الاستعلامات بالتوازي عبر كلا الشاردين لتحسين الأداء وكفاءة استخدام الذاكرة. والأهم من ذلك أن العُنقود يستطيع تحمّل فقدان عقدة واحدة ومواصلة خدمة الاستعلامات دون انقطاع، إذ تتوفر لكل شارد نسخة متماثلة احتياطية على عقدة أخرى. أما العيب الرئيسي في بنية العُنقود هذه فهو زيادة العبء التخزيني—إذ تتطلب سعة تخزين مضاعفة مقارنة بإعداد لا يحتوي على نسخ متماثلة، لأن كل شارد يكون مكرراً. بالإضافة إلى ذلك، ورغم أن العُنقود يمكنه الصمود أمام تعطل عقدة واحدة، فإن فقدان عقدتين في الوقت نفسه قد يجعل العُنقود غير قابل للتشغيل، وذلك بحسب العقد التي تتعطل وكيفية توزيع الشاردات. تحقق هذه البنية توازناً بين الإتاحة والتكلفة، مما يجعلها مناسبة لبيئات production التي تتطلب مستوى معيناً من تحمل الأعطال من دون كلفة عوامل نسخ متماثل أعلى. للتعرّف على كيفية معالجة ClickHouse Cloud للاستعلامات، بما يوفّر كلاً من قابلية التوسع وتحمل الأعطال، راجع قسم “Parallel Replicas”.
آخر تعديل في ٢٣ يوليو ٢٠٢٦