Initial commit

The repository will be consist of:

[+] The redis service definition.The redis used by zmq driver as matchmaker
    (servers discovering).
[+] The zmq-proxy service - the central proxy which perform a message
    redirection to endpoints to avoid direct connections
    between openstack services (n^2 connections).

To allow an OpenStack service configuration and dependencies
switching between ZMQ and RabbitMQ back-ends can be used next
config section (rabbitmq is default):

  messaging:
    backend:
      rpc: zmq
      notifications: rabbitmq

Because there is cases when back-end name is not actually
name of depended service, like `zmq` backend name !=
`zmq-proxy` and `redis`, there is special section of
dependencies definiton:

  messaging:
    dependencies:
       zmq: zmq-proxy

Services, which uses oslo.messaging can specify messaging
dependency by generic way:

  dependencies:
    - {{ messaging.dependencies[messaging.backend.rpc] }}
    - {{ messaging.dependencies[messaging.backend.notifications] }}

Change-Id: I63cd5d008eb8e97903e303f37ac8a90616d4c4a2
This commit is contained in:
kbespalov 2016-11-30 19:52:52 +03:00 committed by Kirill Bespalov
parent 44d36dee6a
commit 8f47dac76a
13 changed files with 254 additions and 0 deletions

View File

@ -0,0 +1,14 @@
FROM {{ image_spec("base-tools") }}
MAINTAINER {{ maintainer }}
COPY redis_sudoers /etc/sudoers.d/redis_sudoers
RUN chmod 750 /etc/sudoers.d \
&& chmod 440 /etc/sudoers.d/redis_sudoers \
&& useradd redis -G microservices \
&& apt-key adv --keyserver {{ url.redis.debian.keyserver }} --recv-keys {{ url.redis.debian.keys }} \
&& apt-get update \
&& apt-get install --no-install-recommends -y -t jessie-backports redis-server \
&& apt-get clean
USER redis

View File

@ -0,0 +1,2 @@
%microservices ALL=(root) NOPASSWD: /bin/chown -R redis\: /var/lib/redis /var/log/ccp/redis
%microservices ALL=(root) NOPASSWD: /bin/chown -R redis\: /var/log/ccp/redis

View File

@ -0,0 +1,10 @@
FROM {{ image_spec("openstack-base") }}
MAINTAINER {{ maintainer }}
COPY zmq_sudoers /etc/sudoers.d/zmq_sudoers
RUN chmod 750 /etc/sudoers.d && \
chmod 440 /etc/sudoers.d/zmq_sudoers && \
useradd zmq-proxy -G microservices -s /bin/false && \
mkdir -p /etc/zmq && chown -R zmq-proxy /etc/zmq
USER zmq-proxy

View File

@ -0,0 +1 @@
%microservices ALL=(root) NOPASSWD: /bin/chown -R zmq-proxy /var/log/ccp/zmq

28
exports/oslo_messaging.j2 Normal file
View File

@ -0,0 +1,28 @@
{% macro zmq(cfg_type) %}
{% if cfg_type == 'rpc_config' -%}
[DEFAULT]
{%- elif cfg_type == 'notifications_config' -%}
[oslo_messaging_notifications]
{%- endif %}
transport_url=zmq://
[oslo_messaging_zmq]
rpc_zmq_host={{ network_topology["private"]["address"] }}
use_router_proxy=true
rpc_use_acks=true
{% if zeromq.matchmaker == 'redis' %}
[oslo_messaging_zmq]
rpc_zmq_matchmaker=redis
[matchmaker_redis]
password={{ redis.password }}
{% if redis.deployment == 'single' %}
host={{ address('redis') }}
port={{ redis.ports.server.cont }}
{% endif %}
{% endif %}
{% endmacro %}

View File

@ -0,0 +1,26 @@
configs:
messaging:
dependencies:
zmq: zmq-proxy
zeromq:
matchmaker: redis
proxy:
ports:
frontend:
cont: 50001
backend:
cont: 50002
publisher:
cont: 50003
redis:
deployment: single
ports:
server:
cont: 6379
password: password
url:
redis:
debian:
keyserver: keyserver.ubuntu.com
keys: "7638D0442B90D010 8B48AD6246925553"

View File

@ -0,0 +1,54 @@
pidfile /var/run/redis/redis-server.pid
logfile /var/log/ccp/redis/redis.log
dir /var/lib/redis
bind {{ network_topology["private"]["address"] }}
port {{ redis.ports.server.cont }}
requirepass {{ redis.password }}
masterauth {{ redis.password }}
protected-mode no
timeout 0
tcp-keepalive 300
loglevel notice
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

View File

@ -0,0 +1,19 @@
[zmq_proxy_opts]
host={{ network_topology["private"]["address"] }}
frontend-port={{ zeromq.proxy.ports.frontend.cont }}
backend-port={{ zeromq.proxy.ports.backend.cont }}
publisher-port={{ zeromq.proxy.ports.publisher.cont }}
{% if zeromq.matchmaker == 'redis' %}
[oslo_messaging_zmq]
rpc_zmq_matchmaker=redis
[matchmaker_redis]
password={{ redis.password }}
{% if redis.deployment == 'single' %}
host={{ address('redis') }}
port={{ redis.ports.server.cont }}
{% endif %}
{% endif %}

29
service/redis.yaml Normal file
View File

@ -0,0 +1,29 @@
dsl_version: 0.2.0
service:
name: redis
antiAffinity: local
ports:
- {{ redis.ports.server }}
containers:
- name: redis
image: redis
pre:
- name: chown-logs-dir
command: "sudo /bin/chown -R redis: /var/lib/redis /var/log/ccp/redis"
daemon:
files:
- redis-conf
command: redis-server /etc/redis/redis.conf
volumes:
- name: redis-logs
path: "/var/log/ccp/redis"
type: host
readOnly: False
- name: redis-data
path: "/var/lib/redis"
type: empty-dir
readOnly: False
files:
redis-conf:
path: /etc/redis/redis.conf
content: redis.conf.j2

28
service/zmq-proxy.yaml Normal file
View File

@ -0,0 +1,28 @@
dsl_version: 0.2.0
service:
name: zmq-proxy
ports:
- {{ zeromq.proxy.ports.frontend }}
- {{ zeromq.proxy.ports.backend }}
- {{ zeromq.proxy.ports.publisher }}
containers:
- name: zmq-proxy
image: zmq-proxy
pre:
- name: chown-logs-dir
command: "sudo /bin/chown -R zmq-proxy /var/log/ccp/zmq"
daemon:
files:
- zmq-conf
command: oslo-messaging-zmq-proxy --config-file /etc/zmq/zmq-proxy.conf
dependencies:
- {{ zeromq.matchmaker }}
volumes:
- name: zmq-logs
path: "/var/log/ccp/zmq"
type: host
readOnly: False
files:
zmq-conf:
path: /etc/zmq/zmq-proxy.conf
content: zmq-proxy.conf.j2

5
tools/yamllint.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/bash
set -ex
workdir=$(dirname $0)
yamllint -c $workdir/yamllint.yaml $(find . -not -path '*/\.*' -type f -name '*.yaml')

21
tools/yamllint.yaml Normal file
View File

@ -0,0 +1,21 @@
extends: default
rules:
braces:
max-spaces-inside: 1
comments:
level: error
comments-indentation:
level: warning
document-end:
present: no
document-start:
level: error
present: no
empty-lines:
max: 1
max-start: 0
max-end: 0
line-length:
level: warning
max: 120

17
tox.ini Normal file
View File

@ -0,0 +1,17 @@
[tox]
minversion = 1.6
envlist = linters,bashate
skipsdist = True
[testenv:linters]
deps = yamllint
commands =
{toxinidir}/tools/yamllint.sh
[testenv:bashate]
deps = bashate>=0.2
whitelist_externals = bash
commands = bash -c "find {toxinidir} -type f -name '*.sh' -not -path '*/.tox/*' -print0 | xargs -0 bashate -v"
[testenv:venv]
commands = {posargs}