To try CockroachDB Cloud instead of running CockroachDB yourself, refer to the Cloud Quickstart.
CockroachDB v25.1 is the latest supported production release. It is a required Regular release. To learn more, refer to CockroachDB v25.1 Release Notes.
Use one of the options below to install CockroachDB. To upgrade an existing cluster, refer to Upgrade to v25.1.
- To install a FIPS-compliant CockroachDB binary, refer to Install a FIPS-compliant build of CockroachDB instead of this page.
- For limitations of CockroachDB on ARM, refer to ARM limitations.
- For limitations of CockroachDB on a NUMA architecture, refer to NUMA limitations.
Download the binary
The CockroachDB binary for Linux requires glibc
, libncurses
, and tzdata
, which are found by default on nearly all Linux distributions, with Alpine as the notable exception.
-
Visit Releases to download the CockroachDB archive for the architecture of your Linux host. The archive contains the
cockroach
binary and the supporting libraries that are used to provide spatial features. Extract the archive and optionally copy thecockroach
binary into yourPATH
so you can execute cockroach commands from any shell. If you get a permission error, usesudo
. -
CockroachDB uses custom-built versions of the GEOS libraries. Copy these libraries to one of the locations where CockroachDB expects to find them.
By default, CockroachDB looks for external libraries in
/usr/local/lib/cockroach
or alib
subdirectory of the CockroachDB binary's current directory. If you place these libraries in another location, you must pass the location in the--spatial-libs
flag tocockroach start
. The instructions below assume the/usr/local/lib/cockroach
location.- Create the directory where the external libraries will be stored:
mkdir -p /usr/local/lib/cockroach
- Copy the library files to the directory. In the following commands, replace
{ARCHITECTURE}
withlinux-amd64
for Intel, or withlinux-arm64
for ARM.cp -i cockroach-v25.1.0-alpha.1.linux-{ARCHITECTURE}/lib/libgeos.so /usr/local/lib/cockroach/
cp -i cockroach-v25.1.0-alpha.1.linux-{ARCHITECTURE}/lib/libgeos_c.so /usr/local/lib/cockroach/
If you get a permissions error, prefix the command with
sudo
.
- Create the directory where the external libraries will be stored:
Verify that CockroachDB can execute spatial queries.
Make sure the
cockroach
binary you just installed is the one that runs when you typecockroach
in your shell:which cockroach
/usr/local/bin/cockroach
Start a temporary, in-memory cluster using
cockroach demo
:cockroach demo
In the demo cluster's interactive SQL shell, run the following command to test that the spatial libraries have loaded properly:
> SELECT ST_IsValid(ST_MakePoint(1,2));
You should see the following output:
st_isvalid -------------- true (1 row)
If your
cockroach
binary is not properly accessing the dynamically linked C libraries in/usr/local/lib/cockroach
, it will output an error message like the one below.ERROR: st_isvalid(): geos: error during GEOS init: geos: cannot load GEOS from dir "/usr/local/lib/cockroach": failed to execute dlopen Failed running "sql"
-
Keep up-to-date with CockroachDB releases and best practices:
If you plan to use CockroachDB's spatial features, you must complete the following steps. Otherwise, your installation is now complete.
Use Kubernetes
To orchestrate CockroachDB using Kubernetes, either with configuration files or the Helm package manager, use the following tutorials:
Use Docker
Running a stateful application like CockroachDB in Docker is more complex and error-prone than most uses of Docker. Unless you are very experienced with Docker, we recommend starting with a different installation and deployment method.
CockroachDB's Docker images are multi-platform images that contain binaries for both Intel and ARM. Multi-platform images do not take up additional space on your Docker host.
Experimental images are not qualified for production use and not eligible for support or uptime SLA commitments.
- Install a container runtime, such as Docker Desktop.
- Verify that the runtime service is installed correctly and running in the background. Refer to the runtime's documentation. For Docker, start a terminal and run
docker version
. If you get an error, verify your installation and try again. Visit Docker Hub and decide which image tag to pull. Releases are rolled out gradually. Docker images for a new release are published when other binary artifacts are published. The following tag formats are commonly used, although other tags are available.
Tag Example Description An exact patch v25.1.0-alpha.1
Pins a cluster to an exact patch. The cluster is upgraded to a newer patch or major version only when you pull a newer tag. Latest patch within a major version latest-v25.1
Automatically updates a cluster to the latest patch of the version you specify. This tag is recommended in production, because it keeps your cluster updated within a major version but does not automatically upgrade your cluster to a new major version. latest
The latest patch within the latest major version. This is the default if you do not specify a tag. It updates your cluster automatically to each new patch and major version, and is not recommended in production. Copy the tag you want to pull.
Pull the image. Replace
{TAG}
with the tag from the previous step.docker pull cockroachdb/cockroach:{TAG}
Start a cluster by starting the container on each node using
docker start
. The default command iscockroach start
. Pass your desired flags as the final argument. For details, refer to Deploy a local container in Docker.
For CockroachDB v22.2.beta-5 and above, Docker images are multi-platform images that contain binaries for both Intel and ARM. Multi-platform images do not take up additional space on your Docker host.
Docker images for previous releases contain Intel binaries only. Intel binaries can run on ARM systems, but with a significant reduction in performance.
CockroachDB on ARM is in Limited Access in v22.2.13, and is experimental in all other versions. Experimental images are not qualified for production use and not eligible for support or uptime SLA commitments.
-
Install Docker for Linux. Please carefully check that you meet all prerequisites.
-
Confirm that the Docker daemon is running in the background:
$ docker version
If you do not see the server listed, start the Docker daemon.
Note:On Linux, Docker needs sudo privileges. -
Pull the image for the v25.1.0-alpha.1 release of CockroachDB from Docker Hub:
$ sudo docker pull cockroachdb/cockroach-unstable:v25.1.0-alpha.1
-
Keep up-to-date with CockroachDB releases and best practices:
Build from Source
See the public wiki for guidance. When building on the ARM architecture, refer to Limitations.
Limitations
ARM
CockroachDB runtimes built for the ARM architecture have the following limitations:
- Floating point operations may yield different results on ARM than on Intel, particularly Fused Multiply Add (FMA) intrinsics.
Validate workloads that rely on floating point operations or FMA instrincs before migrating those workloads to ARM in production.
When building from source on ARM, it is not currently possible to disable FMA intrinsics in Go. To track the status of this feature request, refer to GoLang issue #36971.
- In production, Cockroach Labs recommends that all cluster nodes have identical CockroachDB versions, CPU architecture, hardware, and software.
- A mix of Intel and ARM nodes is supported as a temporary transitional state during the migration only. Cockroach Labs recommends that you test and validate your workload ahead of the migration to ensure that the workload and your application work as expected in a cluster with both Intel and ARM nodes, especially with respect to floating-point arithmetic.
NUMA
In a NUMA (non-uniform memory access) architecture, the system’s memory is physically distributed across multiple memory banks or "nodes", and each node is assigned to a processor. A processor can access its local memory much faster than non-local memory. This non-uniform memory access can lead to performance differences depending on data location.
CockroachDB is written in Go, which has no process-level support for NUMA scheduling or pinning. Instead, you must manage NUMA at the operating system level. To run multiple CockroachDB clusters on a NUMA architecture:
- Assign no more than 32 cores to the node for each instance. Refer to the documentation for
numactl --membind
. - Ensure that your orchestration framework, process manager, or startup scripts start each CockroachDB in a separate NUMA node.
- If multiple CockroachDB nodes for the same CockroachDB cluster run on the same physical host, ensure that they are in the same
--locality
to ensure that data is distributed across different physical hosts. - Ensure that each CockroachDB node writes to a unique set of storage volumes (block devices).
What's next?
- If you're just getting started with CockroachDB:
- Start a cluster locally and talk to it via the built-in SQL client
- Learn more about CockroachDB SQL
- Build a simple application with CockroachDB using PostgreSQL-compatible client drivers and ORMs
- Explore CockroachDB features like automatic replication, rebalancing, and fault tolerance
- If you're ready to run CockroachDB in production: