<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Scaling &amp; Resilience on Qdrant - Vector Search Engine</title><link>https://qdrant.tech/documentation/scaling/</link><description>Recent content in Scaling &amp; Resilience on Qdrant - Vector Search Engine</description><generator>Hugo</generator><language>en-us</language><managingEditor>info@qdrant.tech (Andrey Vasnetsov)</managingEditor><webMaster>info@qdrant.tech (Andrey Vasnetsov)</webMaster><atom:link href="https://qdrant.tech/documentation/scaling/index.xml" rel="self" type="application/rss+xml"/><item><title>Vertical Scaling</title><link>https://qdrant.tech/documentation/scaling/vertical-scaling/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://qdrant.tech/documentation/scaling/vertical-scaling/</guid><description>&lt;h1 id="vertical-scaling"&gt;Vertical Scaling&lt;/h1&gt;
&lt;p&gt;Vertical scaling means resizing CPU, RAM, or disk on an existing node. It&amp;rsquo;s simpler than horizontal scaling, avoids distributed system complexity, and is reversible, which makes it the recommended first step whenever a single node&amp;rsquo;s resources are the bottleneck.&lt;/p&gt;
&lt;h2 id="when-to-scale-vertically"&gt;When to Scale Vertically&lt;/h2&gt;
&lt;p&gt;Scale vertically when your current node resources are insufficient but your workload doesn&amp;rsquo;t yet require distribution:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RAM usage is approaching 80% of available memory. Beyond this threshold, the operating system starts evicting pages from cache, which causes a sharp performance drop rather than a gradual one.&lt;/li&gt;
&lt;li&gt;CPU is saturated during query serving or indexing.&lt;/li&gt;
&lt;li&gt;Disk space is running low for on-disk vectors and payloads.&lt;/li&gt;
&lt;li&gt;Your workload is non-production or otherwise tolerant of a single point of failure.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A single node can typically hold up to about 100 million vectors, depending on vector dimensionality and whether quantization is enabled.&lt;/p&gt;</description></item><item><title>Horizontal Scaling</title><link>https://qdrant.tech/documentation/scaling/horizontal-scaling/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://qdrant.tech/documentation/scaling/horizontal-scaling/</guid><description>&lt;h1 id="horizontal-scaling"&gt;Horizontal Scaling&lt;/h1&gt;
&lt;p&gt;Horizontal scaling means adding more nodes to a Qdrant cluster instead of making existing nodes bigger. It&amp;rsquo;s how Qdrant handles data that no longer fits on one node, and it&amp;rsquo;s also the mechanism underlying Qdrant&amp;rsquo;s fault tolerance. This page covers how it works under the hood: sharding, replication, Raft consensus, and consistency guarantees.&lt;/p&gt;
&lt;p&gt;For what these mechanics buy you in terms of fault tolerance and failover, see &lt;a href="https://qdrant.tech/documentation/scaling/resilience/"&gt;Resilience&lt;/a&gt;. For the practical configuration steps, see &lt;a href="https://qdrant.tech/documentation/scaling/distributed_deployment/"&gt;Distributed Deployment&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Resilience</title><link>https://qdrant.tech/documentation/scaling/resilience/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://qdrant.tech/documentation/scaling/resilience/</guid><description>&lt;h1 id="resilience"&gt;Resilience&lt;/h1&gt;
&lt;p&gt;Qdrant&amp;rsquo;s fault tolerance is driven by replication and node count. Together, they control whether your data survives a node loss and whether your cluster keeps serving requests when one goes down.&lt;/p&gt;
&lt;p&gt;Resilience covers three distinct aspects of a Qdrant cluster, and it&amp;rsquo;s worth keeping them separate since a cluster can have one without the others:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Availability for reading and writing data&lt;/strong&gt;: whether search and write requests keep succeeding while a node is down. See &lt;a href="#temporary-node-failure"&gt;Temporary Node Failure&lt;/a&gt; for exactly how differently-configured clusters behave when a node goes down.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Availability for cluster-wide operations&lt;/strong&gt;: whether you can still create, edit, or delete collections while a node is down. This requires a majority of nodes to be healthy, regardless of replication factor. See &lt;a href="https://qdrant.tech/documentation/scaling/horizontal-scaling/#how-many-qdrant-nodes-should-i-run"&gt;How many Qdrant nodes should I run?&lt;/a&gt; for how this plays out at different cluster sizes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data integrity&lt;/strong&gt;: whether your data survives the permanent loss of a node. This depends on replication factor and node count together, not on either form of availability.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This page covers what determines Qdrant&amp;rsquo;s fault tolerance and how to configure failover in production. For how the underlying replication and consensus mechanics work, see &lt;a href="https://qdrant.tech/documentation/scaling/horizontal-scaling/"&gt;Horizontal Scaling&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Distributed Deployment</title><link>https://qdrant.tech/documentation/scaling/distributed_deployment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://qdrant.tech/documentation/scaling/distributed_deployment/</guid><description>&lt;h1 id="distributed-deployment"&gt;Distributed Deployment&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;Available since Qdrant v0.8.0&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Qdrant supports a distributed deployment mode.
In this mode, multiple Qdrant services communicate with each other to distribute the data across the peers to extend the storage capabilities and increase stability.&lt;/p&gt;
&lt;h2 id="enabling-distributed-mode-in-self-hosted-qdrant"&gt;Enabling Distributed Mode in Self-Hosted Qdrant&lt;/h2&gt;
&lt;p&gt;To enable distributed deployment - enable the cluster mode in the &lt;a href="https://qdrant.tech/documentation/ops-configuration/configuration/"&gt;configuration&lt;/a&gt; or using the ENV variable: &lt;code&gt;QDRANT__CLUSTER__ENABLED=true&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;cluster&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Use `enabled: true` to run Qdrant in distributed deployment mode&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Configuration of the inter-cluster communication&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;p2p&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Port for internal communication between peers&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;6335&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Configuration related to distributed consensus algorithm&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;consensus&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# How frequently peers should ping each other.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# Setting this parameter to lower value will allow consensus&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# to detect disconnected node earlier, but too frequent&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# tick period may create significant network and CPU overhead.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;# We encourage you NOT to change this parameter unless you know what you are doing.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;tick_period_ms&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;By default, Qdrant will use port &lt;code&gt;6335&lt;/code&gt; for its internal communication.
All peers should be accessible on this port from within the cluster, but make sure to isolate this port from outside access, as it might be used to perform write operations.&lt;/p&gt;</description></item><item><title>Consistency Guarantees</title><link>https://qdrant.tech/documentation/scaling/consistency-guarantees/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://qdrant.tech/documentation/scaling/consistency-guarantees/</guid><description>&lt;h1 id="consistency-guarantees"&gt;Consistency Guarantees&lt;/h1&gt;
&lt;p&gt;By default, Qdrant focuses on availability and maximum throughput of search operations, which is a preferable trade-off for most use cases. During normal operation, you can search and modify data from any peer in the cluster: reads use a partial fan-out strategy to optimize latency and availability, and writes execute in parallel on all active sharded replicas.&lt;/p&gt;
&lt;p&gt;This means concurrent updates on one point can result in an inconsistent state. For example, if two clients simultaneously update the same point in a collection with three replicas per shard. On some replicas, the point may reflect the update from one client, while on other replicas, the point may reflect the update from the other client.&lt;/p&gt;</description></item><item><title>Node Failure Recovery</title><link>https://qdrant.tech/documentation/scaling/node-failure-recovery/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>info@qdrant.tech (Andrey Vasnetsov)</author><guid>https://qdrant.tech/documentation/scaling/node-failure-recovery/</guid><description>&lt;h1 id="node-failure-recovery"&gt;Node Failure Recovery&lt;/h1&gt;
&lt;p&gt;Sometimes hardware malfunctions might render some nodes of the Qdrant cluster unrecoverable. Several recovery scenarios allow Qdrant to stay available for requests and even avoid performance degradation. Let&amp;rsquo;s walk through them from best to worst.&lt;/p&gt;
&lt;h2 id="recover-with-replicated-collection"&gt;Recover with Replicated Collection&lt;/h2&gt;
&lt;p&gt;If the number of failed nodes is less than the replication factor of the collection, then your cluster should &lt;a href="https://qdrant.tech/documentation/scaling/resilience/"&gt;still be able to perform read, search, and update queries&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>