The term crate engine is often frowned upon in our engine builder world. Coming from the OEs, crate engines often undercut what a professional engine builder can offer customers. While the price point is often cheaper than a rebuild from an independent shop, a crate engine has always been an option engine builders have had to compete against. Edelbrock Crate Engines are 100% brand new and utilize our proven Power Package formulas to offer breathtaking performance right out of the box.
- Chevrolet 6.5 Crate Running
- Complete Crate Running
- Wooden Crate Runners
- Atwoods Dog Crate Runs
- Create Run Route Map
- Jessica Crate Runner
Chevrolet 6.5 Crate Running
CrateDB and Docker are a great match thanks to CrateDB’s horizontallyscalableshared-nothing architecture that lends itself well tocontainerization.
This document covers the essentials of running CrateDB on Docker.
Note
If you are just getting started with CrateDB and Docker, check out theintroductory guides for spinning up your first CrateDB instance.
See also
A guide for running CrateDB on Kubernetes.
The official CrateDB Docker image.
Table of contents
- Quick start
- Best Practices
- Resource constraints
To get started with CrateDB and Docker, you will create a three-node clusteron your dev machine. The cluster will run on a dedicated network and willrequire the first two nodes, crate01
and crate02
, to vote which oneis the master. The third node, crate03
, will simply join the clusterwith no vote.
To create the user-defined network, run the command:
You should then be able to see something like this:
Any CrateDB container put into the crate
network will be able to resolveother CrateDB containers by name. Each container will run a single node, whichis identified by its node name. In this guide, container crate01
will runnode crate01
, container crate02
will run node crate02
, andcontainer crate03
will run cluster node crate03
.
You can then create your first CrateDB container and node, like this:
Breaking the command down:
- Creates and runs a container called
crate01
(–name) in detachedmode (-d). The container will automatically be removed on exit (–rm),and all its internal data will be lost. If you would like to avoid this,you can mount a dedicated volume (-v) for the container (each containerwould need its own dedicated folder on your dev machine, seeDocker Compose as reference). - Puts the container into the
crate
network and maps port4201
on yourhost machine to port4200
on the container (admin UI). - Defines the environment variable
CRATE_HEAP_SIZE
which is used by CrateDBto allocate 2G for its heap. - Runs the command
crate
inside the container with parameters: network.host
: The_site_
value results in the binding of theCrateDB process to a site-local IP address.node.name
: Defines the node’s name ascrate01
(used bymaster election).discovery.seed_hosts
: This parameter lists the other hosts in thecluster. The format is a comma-separated list ofhost:port
entries,where port defaults to settingtransport.tcp.port
. Each node mustcontain the name of all the other hosts in this list. Notice also thatany node in the cluster might be started at any time, and this willcreate connection exceptions in the log files, however all nodes willeventually be running and interconnected.cluster.initial_master_nodes
: Defines the list of master-eligiblenode names which will participate in the vote of the first master(first bootstrap). If this parameter is not defined, then it is expectedthat the node will join an already formed cluster. This parameter is onlyrelevant for the first election.gateway.expected_nodes
andgateway.recover_after_nodes
: Specifieshow many nodes you expect in the cluster and how many nodes must bediscovered before the cluster state is recovered.
- Runs the command
Note
If this command aborts with an error, consult theTroubleshooting section for help.
Verify that the node is running with dockerps
and you should see something like this:
You can have a look at the container’s logs in tail mode like this:
Note
To exit the logs view, press ctrl+C.
You can visit the admin UI in your browser with this URL:
Select the Cluster icon from the left-hand navigation, and you should see apage that lists a single node.
Now add the second node, crate02
, to the cluster:
Notice here that:
- You updated the container and node name to
crate02
. - You updated the port mapping, so that port
4202
on your host is mappedto4200
on the container. - You set the parameter
discovery.seed_hosts
to contain the other hosts ofthe cluster. cluster.initial_master_nodes
: Since only nodescrate01
andcrate02
will participate in the election of the first master, this setting is unchanged.
Now, if you go back to the admin UI you opened earlier, or visit the admin UIof the node you just created (located at http://localhost:4202/
) youshould see two nodes.
You can now add crate03
like this:
Notice here that:
- You updated the container and node name to
crate03
. - You updated the port mapping, so that port
4203
on your host is mappedto4200
on the container. - You set parameter
discovery.seed_hosts
to contain the other hosts of thecluster. cluster.initial_master_nodes
: This setting is removed since only nodescrate01
andcrate02
will participate in the election of the firstmaster.
Success! You just created a three-node CrateDB cluster with Docker.
Note
This is only a quick start example and you will notice some failing checksin the admin UI. For a more robust cluster, you should, at the very least,configure the Metadata Gateway and Discovery settings.
Complete Crate Running
The most common issue when running CrateDB on Docker is a failingbootstrap check because the memory map limitis too low. This can be adjusted on the host system.
Wooden Crate Runners
If the limit cannot be adjusted on the host system, the memory map limit checkcan be bypassed by passing the -Cnode.store.allow_mmapfs=false
option tothe crate
command:
Caution
This will result in degraded performance.
You can also start a single node without any bootstrap checks by passing the-Cdiscovery.type=single-node
option:
Note
This means that the node cannot form a cluster with any other nodes.
CrateDB settings are setusing the -C
flag, as shown in the examples above.
Check out the Docker docsfor more Docker-specific features that CrateDB can leverage.
The CrateDB Shell, crash
, is bundled with the Docker image.
If you wanted to run crash
inside a user-defined network called crate
and connect to three hosts named crate01
, crate02
, and crate03
(i.e. the example covered in the Creating a Cluster section) you could run:
Docker’s Compose tool allows developers to define and run multi-containerDocker applications that can be started with a single docker-composeup
command.
Read about Docker Compose specifics here.
You can define the services that make up your app in a docker-compose.ymlfile. To recreate the three-node cluster in the previous example, you candefine your services like this:
In the file above:
- You specified the latest compose file version.
- You created three CrateDB services which pulls the latest CrateDB Dockerimage and maps the ports manually.
- You created a file system volume per instance and defined a set ofconfiguration parameters (-C).
- You defined some deploy settings and an environment variable for the heap size.
- Network settings no longer need to be defined in the latest compose fileversion because a default bridge network will be created. If you areusing multiple hosts and want to use an overlay network, you will need toexplicitly define that.
- The start order of the containers is not deterministic and you want allthree containers to be up and running before the election of the master node.
For performance reasons, we strongly recommend that you only run one containerper host machine.
If you are running one container per machine, you can map the container portsto the host ports so that the host acts like a native installation. For example:
Docker containers are ephemeral, meaning that containers are expected to comeand go, and any data inside them is lost when the container is removed. Forthis reason, you should mount a persistent data
directory on your hostmachine to the /data
directory inside the container:
Here, /srv/crate/data
is an example path, and should be replaced with thepath to your host machine’s data
directory.
See the Docker volume documentation for more help.
If you want to use a custom configuration, it is recommended that you mountconfiguration files on the host machine to the appropriate path inside thecontainer. That way, your configuration will not be lost if the container isremoved.
Here is an example of how you could mount the crate.yml
config file:
Here, /srv/crate/config/crate.yml
is an example path, and should bereplaced with the path to your host machine’s crate.yml
file.
The official CrateDB Docker image ships with a liveness healthcheckconfigured.
This healthcheck will flag a problem if the CrateDB process crashed or hunginside the container without terminating.
If you use Docker Swarm and are experiencing trouble starting your Dockercontainers, try to deactivate the healthcheck.
You can do that by editing your Docker Stack YAML file:
To avoid overallocation of resources, you may want to consider settingconstraints on CPU and memory if you plan to run multiple CrateDB containerson a single machine.
When using CrateDB with Docker, CrateDB binds by default to any site-local IPaddress on the system (i.e. 192.168.0.1). This performs a number of checksduring bootstrap. The settings listed in Bootstrap Checks must be addressed onthe Docker host system in order to start CrateDB successfully and whengoing into production.
Atwoods Dog Crate Runs
You must calculate and explicitly set the maximum memory that the containercan use. This is dependent on your host system and should typically be as highas possible.
You must then calculate the appropriate heap size (typically half the container’smemory limit, see CRATE_HEAP_SIZE for details) and pass this to CrateDB,which in turn passes it to the JVM.
It is not necessary to configure swap memory since CrateDB does not use swap.
Create Run Route Map
You must calculate and explicitly set the maximum number of CPUs that thecontainer can use. This is dependent on your host system and should typicallybe as high as possible.
Jessica Crate Runner
If you want the container to use a maximum of 1.5 CPUs, a maximum of 2 GBmemory, with a heap size of 1 GB, you could configure everything at once. Forexample: