في هذا المثال، ستتعلّم كيفية إعداد عنقود ClickHouse بسيط يوفّر كلاً من التكرار والتوسعة. ويتكوّن من شاردين ونسختين متماثلتين، مع عنقود ClickHouse Keeper من 3 عقد لإدارة التناسق والحفاظ على النصاب داخل العنقود.تظهر أدناه معمارية العنقود الذي ستقوم بإعداده:
على الرغم من إمكانية تشغيل ClickHouse Server وClickHouse Keeper معًا على الخادم نفسه،
فإننا نوصي بشدة باستخدام مضيفات مخصصة لـ ClickHouse Keeper في بيئات production،
وهذا هو النهج الذي سنوضحه في هذا المثال.يمكن أن تكون خوادم Keeper أصغر حجمًا، وعادةً ما تكون 4GB RAM كافية لكل خادم Keeper
إلى أن تكبر ClickHouse Servers.
المتطلبات الأساسية
- سبق أن قمت بإعداد خادم ClickHouse محلي
- لديك إلمام بمفاهيم التكوين الأساسية في ClickHouse، مثل ملفات التكوين
- Docker مُثبّت على جهازك
1
إعداد بنية الدليل وبيئة الاختبار
في هذا الدليل العملي، ستستخدم 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.
2
تهيئة عقد ClickHouse
إعداد الخادم
قم الآن بتعديل كل ملف تهيئة فارغconfig.xml الموجود في
fs/volumes/clickhouse-{}/etc/clickhouse-server/config.d. يجب تغيير الأسطر
المميزة أدناه بحيث تكون خاصة بكل عقدة:يُشرح كل قسم من أقسام ملف الإعداد أعلاه بمزيد من التفاصيل في ما يلي.
الشبكة والتسجيل
يُفعَّل الاتصال الخارجي عبر واجهة الشبكة من خلال تفعيل إعداد listen host. ويضمن ذلك أن يكون خادم ClickHouse قابلاً للوصول من قِبل المضيفات الأخرى:8123:9000:<logger>. يوفر هذا المثال سجل تصحيح يُدوَّر عند 1000 ميغابايت ثلاث مرات:تهيئة الكلستر
يتم إعداد إعدادات الكلستر في مقطع<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
في هذا المثال، يكون ملف
users.xml متماثلًا على جميع العقد في العنقود.3
إعداد ClickHouse Keeper
بعد ذلك، ستُعِد ClickHouse Keeper، والذي يُستخدم للتنسيق.أنشئ ملفات عدِّل ملفات التكوين الفارغة التي أُنشئت في
دليل كل عقدة يُستخدم القسم التالي لتكوين الخوادم المشاركة في
النصاب ضمن خوارزمية إجماع Raft:
إعداد 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.4
اختبر الإعداد
تأكد من أن Docker قيد التشغيل على جهازك.
ابدأ الـ cluster باستخدام الأمر يجب أن ترى Docker يبدأ بسحب صور ClickHouse وKeeper،
ثم يشغّل الحاويات:للتحقق من أن الـcluster يعمل، اتصل بأي عقدة منه وشغّل
الاستعلام التالي. يظهر أدناه أمر الاتصال بالعقدة الأولى:إذا نجحت العملية، فسيظهر لك موجّه ClickHouse client:نفّذ الاستعلام التالي للتحقق من طوبولوجيات العناقيد المعرّفة والمضيفات
التابعة لها:نفّذ الاستعلام التالي للتحقق من حالة عنقود ClickHouse Keeper:يُستخدم الأمر تعرض الاستجابة أدناه مثالًا على استجابة من عقدة follower:يوضح الرد أدناه مثالًا لرد صادر من العقدة القائدة:بهذا، تكون قد أعددت بنجاح عنقود ClickHouse يضم شاردين ونسختين متماثلتين.
في الخطوة التالية، ستنشئ جدولًا على العنقود.
docker-compose up من الدليل الجذر cluster_2S_2R:Query
Response
Query
Response
mntr أيضًا على نطاق واسع للتحقق من أن ClickHouse Keeper
قيد التشغيل، وللحصول على معلومات عن حالة العلاقة بين عقد Keeper الثلاث.
في الإعداد المستخدم في هذا المثال، هناك ثلاث عقد تعمل معًا.
ستنتخب هذه العقد قائدًا، وستكون العقد المتبقية عقدًا تابعة.يوفّر الأمر mntr معلومات متعلقة بالأداء، ويُبيّن أيضًا ما إذا كانت
عقدة معيّنة تابعة أم قائدًا.شغّل الأمر أدناه من سطر الأوامر على clickhouse-keeper-01 وclickhouse-keeper-02 و
clickhouse-keeper-03 للتحقق من حالة كل عقدة Keeper. الأمر
الخاص بـ clickhouse-keeper-01 موضح أدناه:Response
Response
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 من أيٍّ من
العملاء على المضيفات باستخدام الاستعلام التالي: