Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

اكتشاف العنقود

نظرة عامة

تُبسّط ميزة اكتشاف العنقود في ClickHouse تهيئة العنقود، إذ تتيح للعُقد اكتشاف نفسها وتسجيلها تلقائيًا من دون الحاجة إلى تعريفها صراحةً في ملفات التكوين. ويكون ذلك مفيدًا بشكل خاص عندما يصبح التعريف اليدوي لكل عقدة أمرًا مرهقًا.

تهيئة الخوادم البعيدة

التهيئة اليدوية التقليدية

تقليديًا، في ClickHouse، كان لا بد من تحديد كل جزء وكل نسخة متماثلة في العنقود يدويًا ضمن التهيئة:

<remote_servers>
    <cluster_name>
        <shard>
            <replica>
                <host>node1</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>node2</host>
                <port>9000</port>
            </replica>
        </shard>
        <shard>
            <replica>
                <host>node3</host>
                <port>9000</port>
            </replica>
            <replica>
                <host>node4</host>
                <port>9000</port>
            </replica>
        </shard>
    </cluster_name>
</remote_servers>

استخدام اكتشاف العنقود

مع اكتشاف العنقود، بدلًا من تعريف كل عقدة صراحةً، يكفي تحديد مسار في ZooKeeper. وستُكتشف تلقائيًا جميع العقد التي تُسجَّل تحت هذا المسار في ZooKeeper وتُضاف إلى العنقود.

<remote_servers>
    <cluster_name>
        <discovery>
            <path>/clickhouse/discovery/cluster_name</path>

            <!-- # Optional configuration parameters: -->

            <!-- ## Authentication credentials to access all other nodes in cluster: -->
            <!-- <user>user1</user> -->
            <!-- <password>pass123</password> -->
            <!-- ### Alternatively to password, interserver secret may be used: -->
            <!-- <secret>secret123</secret> -->

            <!-- ## Shard for current node (see below): -->
            <!-- <shard>1</shard> -->

            <!-- ## Observer mode (see below): -->
            <!-- <observer/> -->
        </discovery>
    </cluster_name>
</remote_servers>

إذا أردت تحديد رقم الجزء لعقدة معيّنة، يمكنك تضمين الوسم <shard> ضمن القسم <discovery>:

بالنسبة إلى node1 وnode2:

<discovery>
    <path>/clickhouse/discovery/cluster_name</path>
    <shard>1</shard>
</discovery>

بالنسبة إلى node3 وnode4:

<discovery>
    <path>/clickhouse/discovery/cluster_name</path>
    <shard>2</shard>
</discovery>

وضع المراقبة

لن تسجّل العُقد المُعدّة في وضع المراقبة نفسها كنسخ متماثلة. بل ستقتصر على مراقبة النسخ المتماثلة النشطة الأخرى في العنقود واكتشافها من دون المشاركة الفعلية. لتمكين وضع المراقبة، أدرِج الوسم <observer/> ضمن قسم <discovery>:

<discovery>
    <path>/clickhouse/discovery/cluster_name</path>
    <observer/>
</discovery>

اكتشاف العناقيد

قد تحتاج أحيانًا إلى إضافة المضيفين داخل العناقيد وإزالتهم، بل وإضافة العناقيد نفسها وإزالتها أيضًا. يمكنك استخدام العقدة <multicluster_root_path> مع مسار جذر لعدة عناقيد:

<remote_servers>
    <some_unused_name>
        <discovery>
            <multicluster_root_path>/clickhouse/discovery</multicluster_root_path>
            <observer/>
        </discovery>
    </some_unused_name>
</remote_servers>

في هذه الحالة، عندما يسجّل مضيف آخر نفسه باستخدام المسار /clickhouse/discovery/some_new_cluster، سيُضاف عنقود باسم some_new_cluster.

يمكنك استخدام الآليتين معًا في الوقت نفسه، إذ يمكن للمضيف أن يسجّل نفسه في العنقود my_cluster وأن يكتشف أي عناقيد أخرى:

<remote_servers>
    <my_cluster>
        <discovery>
            <path>/clickhouse/discovery/my_cluster</path>
        </discovery>
    </my_cluster>
    <some_unused_name>
        <discovery>
            <multicluster_root_path>/clickhouse/discovery</multicluster_root_path>
            <observer/>
        </discovery>
    </some_unused_name>
</remote_servers>

القيود:

  • لا يمكنك استخدام كلٍّ من <path> و<multicluster_root_path> ضمن الشجرة الفرعية نفسها في remote_servers.
  • لا يمكن استخدام <multicluster_root_path> إلا مع <observer/>.
  • يُستخدم الجزء الأخير من المسار في Keeper كاسم للعنقود، بينما عند التسجيل يُؤخذ الاسم من وسم XML.

حالات الاستخدام والقيود

عند إضافة عُقد إلى مسار ZooKeeper المحدد أو إزالتها منه، تُكتشف أو تُستبعد تلقائيًا من العنقود من دون الحاجة إلى تغيير الإعدادات أو إعادة تشغيل الخادم.

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

انظر إلى المثال التالي لعنقود يتكوّن من 3 عُقد:

<remote_servers>
    <default>
        <discovery>
            <path>/clickhouse/discovery/default_cluster</path>
        </discovery>
    </default>
</remote_servers>
SELECT * EXCEPT (default_database, errors_count, slowdowns_count, estimated_recovery_time, database_shard_name, database_replica_name)
FROM system.clusters WHERE cluster = 'default';

CREATE TABLE event_table ON CLUSTER default (event_time DateTime, value String)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/event_table', '{replica}')
ORDER BY event_time PARTITION BY toYYYYMM(event_time);

INSERT INTO event_table ...

بعد ذلك، نضيف عقدة جديدة إلى العنقود عبر تشغيل عقدة جديدة تتضمن نفس الإدخال في قسم remote_servers ضمن ملف التهيئة:

┌─cluster─┬─shard_num─┬─shard_weight─┬─replica_num─┬─host_name────┬─host_address─┬─port─┬─is_local─┬─user─┬─is_active─┐
│ default │         1 │            1 │           1 │ 92d3c04025e8 │ 172.26.0.5   │ 9000 │        0 │      │      ᴺᵁᴸᴸ │
│ default │         1 │            1 │           2 │ a6a68731c21b │ 172.26.0.4   │ 9000 │        1 │      │      ᴺᵁᴸᴸ │
│ default │         1 │            1 │           3 │ 8e62b9cb17a1 │ 172.26.0.2   │ 9000 │        0 │      │      ᴺᵁᴸᴸ │
│ default │         1 │            1 │           4 │ b0df3669b81f │ 172.26.0.6   │ 9000 │        0 │      │      ᴺᵁᴸᴸ │
└─────────┴───────────┴──────────────┴─────────────┴──────────────┴──────────────┴──────┴──────────┴──────┴───────────┘

تشارك العقدة الرابعة في العنقود، لكن الجدول event_table لا يزال موجودًا فقط على العقد الثلاث الأولى:

SELECT hostname(), database, table FROM clusterAllReplicas(default, system.tables) WHERE table = 'event_table' FORMAT PrettyCompactMonoBlock

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

Navigation