<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Lucien Volmar</title>
    <description>The latest articles on Forem by Lucien Volmar (@volmarl).</description>
    <link>https://forem.com/volmarl</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F357832%2Fab231c86-f325-428b-8431-02cf007c40b6.png</url>
      <title>Forem: Lucien Volmar</title>
      <link>https://forem.com/volmarl</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/volmarl"/>
    <language>en</language>
    <item>
      <title>How do I get a 2 nodes Aerospike cluster running quickly in Docker without editing a single file?</title>
      <dc:creator>Lucien Volmar</dc:creator>
      <pubDate>Mon, 30 Mar 2020 17:35:00 +0000</pubDate>
      <link>https://forem.com/aerospike/how-do-i-get-a-2-nodes-aerospike-cluster-running-quickly-in-docker-without-editing-a-single-file-2bnj</link>
      <guid>https://forem.com/aerospike/how-do-i-get-a-2-nodes-aerospike-cluster-running-quickly-in-docker-without-editing-a-single-file-2bnj</guid>
      <description>&lt;p&gt;Often we need to bring up a small Aerospike cluster for either functional testing or for development purposes.&lt;br&gt;
There are zillion of tools available for deployment to production (helm+Kubernetes, docker swarm, docker-compose etc), but in some cases its not needed for a basic cluster running on an old mac book. Mine is a MacBook Pro (Retina, 15-inch, Late 2013, last one running in the office!)&lt;br&gt;
To quickly bring up a 2 nodes cluster running the latest Aerospike CE server you can execute these commands at a terminal:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Generate aerospike.conf files:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run --rm -tid --name aerospike1 -p 3000:3000 -p 3001:3001 -p 3002:3002 -p 3003:3003 aerospike/aerospike-server

mkdir aero1
mkdir aero2

docker cp aerospike1:/etc/aerospike/aerospike.conf aero1/
docker cp aerospike1:/etc/aerospike/aerospike.conf aero2/

docker stop aerospike1

sed -i'' -e 's/local/eth0/g' aero1/aerospike.conf
sed -i'' -e 's/local/eth0/g' aero2/aerospike.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  2. Start 2 Aerospike containers
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -tid -v $(pwd)/aero1:/etc/aerospike/ --name aerospike1 -p 3000:3000 -p 3001:3001 -p 3002:3002 -p 3003:3003 aerospike/aerospike-server

docker run -tid -v $(pwd)/aero2:/etc/aerospike/ --name aerospike2 -p 6000:3000 -p 6001:3001 -p 6002:3002 -p 6003:3003 aerospike/aerospike-server

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  3. Get IP address of each node:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker exec -ti aerospike1 asinfo -v service
docker exec -ti aerospike2 asinfo -v service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  4. Run an asinfo -v tip command to form cluster:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker exec -ti aerospike1 asinfo -v 'tip:host=&amp;lt;IP ADDRESS from aerospike2&amp;gt;;port=3002'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;(replace ' with double quotes on Windows environments!)&lt;/p&gt;

&lt;p&gt;I guess we could get fancy and automate the last line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker exec -e "AEROSPIKE2=$(docker exec -ti aerospike2 asinfo -v service|cut -d ':' -f1)" -ti aerospike1 asinfo -v 'tip:host=$AEROSPIKE2;port=3002'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's keep it simple for now!&lt;br&gt;
Executing above command lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ docker run --rm -tid --name aerospike1 -p 3000:3000 -p 3001:3001 -p 3002:3002 -p 3003:3003 aerospike/aerospike-server
0d595a1f6d1363ec61ddb987006c21634e27b7026e94fc91a3cb384b5e23f498

$ docker cp aerospike1:/etc/aerospike/aerospike.conf aero1/
$ docker cp aerospike1:/etc/aerospike/aerospike.conf aero2/
$ docker stop aerospike1
aerospike1
$ sed -i'' -e 's/local/eth0/g' aero1/aerospike.conf
$ sed -i'' -e 's/local/eth0/g' aero2/aerospike.conf
$ docker run -tid -v $(pwd)/aero1:/etc/aerospike/ --name aerospike1 -p 3000:3000 -p 3001:3001 -p 3002:3002 -p 3003:3003 aerospike/aerospike-server
3a7bf955ba7066205afae5dade547b99a20b29a507f51dc8aa24f9fcd8a6d981
$ docker run -tid -v $(pwd)/aero2:/etc/aerospike/ --name aerospike2 -p 6000:3000 -p 6001:3001 -p 6002:3002 -p 6003:3003 aerospike/aerospike-server
78a958a5143eda598caa45fd54cc8ba479af78cf92d4f6263c4e9a9b36e14457

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let us verify that we have a cluster running using asadm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/Development/test.docker $ docker exec -ti aerospike1 asadm
Seed:        [('127.0.0.1', 3000, None)]
Config_file: /root/.aerospike/astools.conf, /etc/aerospike/astools.conf
Aerospike Interactive Shell, version 0.3.3
Found 2 nodes
Online:  172.17.0.3:3000, 172.17.0.2:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let us confirm containerized app connection using aerospike-tools container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;~/Development/test.docker $ docker run --rm -ti --name aerospike-tools aerospike/aerospike-tools aql -h 172.17.0.3
Seed:         172.17.0.3
User:         None
Config File:  /etc/aerospike/astools.conf /root/.aerospike/astools.conf 
Aerospike Query Client
Version 3.23.0
C Client Version 4.6.9
Copyright 2012-2019 Aerospike. All rights reserved.
aql&amp;gt; INSERT INTO test.demo (PK, foo, bar) VALUES ('key1', 123, 'abc')
OK, 1 record affected.
aql&amp;gt; select * from test.demo
+-----+-------+
| foo | bar   |
+-----+-------+
| 123 | "abc" |
+-----+-------+
1 row in set (0.147 secs)
OK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that is it! we have a 2 nodes cluster running and accessible by other docker containers running on that machine.&lt;/p&gt;




</description>
    </item>
  </channel>
</rss>
