Skip to content
This repository was archived by the owner on Jun 2, 2021. It is now read-only.

Commit d423818

Browse files
committed
Riak dockerfiles and support
- Has the ability to benchmark using basho_bench - Will install nrpa from source and start the plugin on all nodes - Ecosystem of clustering scripts in docker/riak/bin
1 parent e35ea07 commit d423818

8 files changed

+201
-0
lines changed

docker/riak/Dockerfile

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#
2+
# Riak Dockerfile copied mostly from https://github.com/hectcastro/docker-riak
3+
#
4+
5+
FROM nrpa/base
6+
7+
8+
# Environmental variables
9+
ENV DEBIAN_FRONTEND noninteractive
10+
ENV RIAK_VERSION 1.4.8
11+
ENV RIAK_SHORT_VERSION 1.4
12+
13+
# Maintain our own riak user and group
14+
RUN /usr/sbin/groupadd -r -g 108 riak
15+
RUN /usr/sbin/useradd -M -r -u 108 -g riak riak -d /var/lib/riak
16+
17+
RUN curl -s http://apt.basho.com/gpg/basho.apt.key | apt-key add --
18+
RUN echo "deb http://apt.basho.com precise main" > /etc/apt/sources.list.d/basho.list
19+
RUN apt-get update
20+
21+
RUN apt-get install -y riak erlang git
22+
RUN sed -i.bak 's/127.0.0.1/0.0.0.0/' /etc/riak/app.config
23+
RUN echo "ulimit -n 4096" >> /etc/default/riak
24+
25+
ADD bin/automatic_clustering.sh /etc/my_init.d/99_automatic_clustering.sh
26+
27+
# Tune Riak configuration settings for the container
28+
RUN sed -i.bak 's/127.0.0.1/0.0.0.0/' /etc/riak/app.config && \
29+
sed -i.bak 's/{anti_entropy_concurrency, 2}/{anti_entropy_concurrency, 1}/' /etc/riak/app.config && \
30+
sed -i.bak 's/{map_js_vm_count, 8 }/{map_js_vm_count, 0 }/' /etc/riak/app.config && \
31+
sed -i.bak 's/{reduce_js_vm_count, 6 }/{reduce_js_vm_count, 0 }/' /etc/riak/app.config && \
32+
sed -i.bak 's/{hook_js_vm_count, 2 }/{hook_js_vm_count, 0 }/' /etc/riak/app.config && \
33+
sed -i.bak "s/##+zdbbl/+zdbbl/" /etc/riak/vm.args
34+
35+
RUN mkdir /etc/service/riak
36+
ADD bin/riak.sh /etc/service/riak/run
37+
38+
ADD bin/newrelic-plugin-agent.sh /etc/service/newrelic-plugin-agent/run
39+
ADD newrelic-plugin-agent.cfg /etc/newrelic/newrelic-plugin-agent.cfg
40+
41+
RUN git clone https://github.com/basho/basho_bench.git /opt/basho_bench
42+
RUN cd /opt/basho_bench && make all
43+
44+
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
45+
46+
EXPOSE 8098 8087
+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#! /bin/sh
2+
3+
if env | grep -q "DOCKER_RIAK_AUTOMATIC_CLUSTERING=1"; then
4+
# Join node to the cluster
5+
(sleep 5; if env | grep -q "SEED_PORT_8098_TCP_ADDR"; then
6+
riak-admin cluster join "riak@${SEED_PORT_8098_TCP_ADDR}" > /dev/null 2>&1
7+
fi) &
8+
9+
# Are we the last node to join?
10+
(sleep 8; if riak-admin member-status | egrep "joining|valid" | wc -l | grep -q "${DOCKER_RIAK_CLUSTER_SIZE}"; then
11+
riak-admin cluster plan > /dev/null 2>&1 && riak-admin cluster commit > /dev/null 2>&1
12+
fi) &
13+
fi
+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/bin/sh
2+
# Replace the name of the node
3+
sed -i 's/REPLACE_WITH_REAL_KEY/'$NEWRELIC_KEY'/g' /etc/newrelic/newrelic-plugin-agent.cfg
4+
sed -i 's/RIAK_NAME/'$NODE_NAME'/g' /etc/newrelic/newrelic-plugin-agent.cfg
5+
cd /opt/source
6+
python setup.py install
7+
newrelic-plugin-agent -c /etc/newrelic/newrelic-plugin-agent.cfg -f

docker/riak/bin/riak.sh

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#! /bin/sh
2+
IP_ADDRESS=$(ip -o -4 addr list eth0 | awk '{print $4}' | cut -d/ -f1)
3+
4+
# Ensure correct ownership and permissions on volumes
5+
chown riak:riak /var/lib/riak /var/log/riak
6+
chmod 755 /var/lib/riak /var/log/riak
7+
8+
# Open file descriptor limit
9+
ulimit -n 4096
10+
11+
# Ensure the Erlang node name is set correctly
12+
sed -i.bak "s/127.0.0.1/${IP_ADDRESS}/" /etc/riak/vm.args
13+
14+
# Start Riak
15+
exec /sbin/setuser riak "$(ls -d /usr/lib/riak/erts*)/bin/run_erl" "/tmp/riak" \
16+
"/var/log/riak" "exec /usr/sbin/riak console"

docker/riak/bin/start-cluster.sh

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#! /bin/bash
2+
3+
set -e
4+
5+
if env | grep -q "DOCKER_RIAK_DEBUG"; then
6+
set -x
7+
fi
8+
9+
DOCKER_RIAK_CLUSTER_SIZE=${DOCKER_RIAK_CLUSTER_SIZE:-5}
10+
11+
if docker ps -a | grep "nrpa/riak" >/dev/null; then
12+
echo ""
13+
echo "It looks like you already have some Riak containers running."
14+
echo "Please take them down before attempting to bring up another"
15+
echo "cluster with the following command:"
16+
echo ""
17+
echo " make stop-cluster"
18+
echo ""
19+
20+
exit 1
21+
fi
22+
23+
echo
24+
echo "Bringing up cluster nodes:"
25+
echo
26+
27+
for index in $(seq -f "%02g" "1" "${DOCKER_RIAK_CLUSTER_SIZE}");
28+
do
29+
if [ "${index}" -gt "1" ] ; then
30+
docker run -e "DOCKER_RIAK_CLUSTER_SIZE=${DOCKER_RIAK_CLUSTER_SIZE}" \
31+
-e "DOCKER_RIAK_AUTOMATIC_CLUSTERING=${DOCKER_RIAK_AUTOMATIC_CLUSTERING}" \
32+
-e NEWRELIC_KEY=$NEWRELIC_KEY \
33+
-e NODE_name="riak${index}" \
34+
-P --name "riak${index}" \
35+
--link "riak01" \
36+
--volumes-from SOURCE \
37+
-d nrpa/riak > /dev/null 2>&1
38+
else
39+
docker run -e "DOCKER_RIAK_CLUSTER_SIZE=${DOCKER_RIAK_CLUSTER_SIZE}" \
40+
-e "DOCKER_RIAK_AUTOMATIC_CLUSTERING=${DOCKER_RIAK_AUTOMATIC_CLUSTERING}" \
41+
-e NEWRELIC_KEY=$NEWRELIC_KEY \
42+
-e NODE_name="riak${index}" \
43+
--volumes-from SOURCE \
44+
-P --name "riak${index}" \
45+
-d nrpa/riak > /dev/null 2>&1
46+
fi
47+
48+
CONTAINER_ID=$(docker ps | egrep "riak${index}[^/]" | cut -d" " -f1)
49+
CONTAINER_PORT=$(docker port "${CONTAINER_ID}" 8098 | cut -d ":" -f2)
50+
51+
until curl -s "http://127.0.0.1:${CONTAINER_PORT}/ping" | grep "OK" > /dev/null 2>&1;
52+
do
53+
sleep 3
54+
done
55+
56+
echo " Successfully brought up [riak${index}]"
57+
done
58+
59+
echo
60+
echo "Please wait approximately 30 seconds for the cluster to stabilize."
61+
echo

docker/riak/bin/stop-cluster.sh

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#! /bin/bash
2+
3+
set -e
4+
5+
if env | grep -q "DOCKER_RIAK_DEBUG"; then
6+
set -x
7+
fi
8+
9+
docker ps | egrep "nrpa/riak" | cut -d" " -f1 | xargs -I{} docker rm -f {} > /dev/null 2>&1
10+
11+
echo "Stopped the cluster and cleared all of the running containers."

docker/riak/bin/test-cluster.sh

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#! /bin/bash
2+
3+
set -e
4+
5+
if env | grep -q "DOCKER_RIAK_DEBUG"; then
6+
set -x
7+
fi
8+
9+
RANDOM_CONTAINER_ID=$(docker ps | egrep "nrpa/riak" | cut -d" " -f1 | perl -MList::Util=shuffle -e'print shuffle<>' | head -n1)
10+
CONTAINER_HTTP_PORT=$(docker port "${RANDOM_CONTAINER_ID}" 8098 | cut -d ":" -f2)
11+
12+
curl -s "http://127.0.0.1:${CONTAINER_HTTP_PORT}/stats" | python -mjson.tool

docker/riak/newrelic-plugin-agent.cfg

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
%YAML 1.2
2+
---
3+
Application:
4+
license_key: REPLACE_WITH_REAL_KEY
5+
wake_interval: 60
6+
7+
riak:
8+
name: RIAK_NAME
9+
host: localhost
10+
port: 8098
11+
12+
Daemon:
13+
user: newrelic
14+
pidfile: /var/run/newrelic/newrelic-plugin-agent.pid
15+
16+
Logging:
17+
formatters:
18+
verbose:
19+
format: '%(levelname) -10s %(asctime)s %(process)-6d %(processName) -15s %(threadName)-10s %(name) -45s %(funcName) -25s L%(lineno)-6d: %(message)s'
20+
handlers:
21+
file:
22+
class : logging.handlers.RotatingFileHandler
23+
formatter: verbose
24+
filename: /var/log/newrelic/newrelic-plugin-agent.log
25+
maxBytes: 10485760
26+
backupCount: 3
27+
loggers:
28+
newrelic_plugin_agent:
29+
level: INFO
30+
propagate: True
31+
handlers: [console, file]
32+
requests:
33+
level: ERROR
34+
propagate: True
35+
handlers: [console, file]

0 commit comments

Comments
 (0)