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:
parent
44d36dee6a
commit
6c2e9f8ce4
15
docker/redis/Dockerfile.j2
Normal file
15
docker/redis/Dockerfile.j2
Normal file
@ -0,0 +1,15 @@
|
||||
FROM {{ image_spec("base-tools") }}
|
||||
MAINTAINER {{ maintainer }}
|
||||
|
||||
COPY redis_sudoers /etc/sudoers.d/redis_sudoers
|
||||
COPY {{ render('sources.list.debian.j2') }} /etc/apt/sources.list.d/redis.list
|
||||
|
||||
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 {{ redis_version }} \
|
||||
&& apt-get clean
|
||||
|
||||
USER redis
|
2
docker/redis/redis_sudoers
Normal file
2
docker/redis/redis_sudoers
Normal 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
|
1
docker/redis/sources.list.debian.j2
Normal file
1
docker/redis/sources.list.debian.j2
Normal file
@ -0,0 +1 @@
|
||||
deb {{ url.redis.debian.repo }} jessie-backports main
|
10
docker/zmq-proxy/Dockerfile.j2
Normal file
10
docker/zmq-proxy/Dockerfile.j2
Normal 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/ccp/zmq && chown -R zmq-proxy /etc/ccp/zmq
|
||||
|
||||
USER zmq-proxy
|
1
docker/zmq-proxy/zmq_sudoers
Normal file
1
docker/zmq-proxy/zmq_sudoers
Normal file
@ -0,0 +1 @@
|
||||
%microservices ALL=(root) NOPASSWD: /bin/chown -R zmq-proxy /var/log/ccp/zmq
|
28
exports/oslo_messaging.j2
Normal file
28
exports/oslo_messaging.j2
Normal 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 zmq.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 %}
|
30
service/files/defaults.yaml
Normal file
30
service/files/defaults.yaml
Normal file
@ -0,0 +1,30 @@
|
||||
configs:
|
||||
messaging:
|
||||
dependencies:
|
||||
zmq: zmq-proxy
|
||||
zmq:
|
||||
matchmaker: redis
|
||||
proxy:
|
||||
ports:
|
||||
frontend:
|
||||
cont: 50001
|
||||
backend:
|
||||
cont: 50002
|
||||
publisher:
|
||||
cont: 50003
|
||||
redis:
|
||||
deployment: single
|
||||
ports:
|
||||
server:
|
||||
cont: 6379
|
||||
password: password
|
||||
|
||||
versions:
|
||||
redis_version: ">=3.2.3"
|
||||
|
||||
url:
|
||||
redis:
|
||||
debian:
|
||||
repo: http://ftp.debian.org/debian
|
||||
keyserver: keyserver.ubuntu.com
|
||||
keys: "7638D0442B90D010 8B48AD6246925553"
|
54
service/files/redis.conf.j2
Normal file
54
service/files/redis.conf.j2
Normal 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
|
19
service/files/zmq-proxy.conf.j2
Normal file
19
service/files/zmq-proxy.conf.j2
Normal file
@ -0,0 +1,19 @@
|
||||
[zmq_proxy_opts]
|
||||
host={{ network_topology["private"]["address"] }}
|
||||
frontend-port={{ zmq.proxy.ports.frontend.cont }}
|
||||
backend-port={{ zmq.proxy.ports.backend.cont }}
|
||||
publisher-port={{ zmq.proxy.ports.publisher.cont }}
|
||||
|
||||
{% if zmq.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
29
service/redis.yaml
Normal 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: host
|
||||
readOnly: False
|
||||
files:
|
||||
redis-conf:
|
||||
path: /etc/redis/redis.conf
|
||||
content: redis.conf.j2
|
28
service/zmq-proxy.yaml
Normal file
28
service/zmq-proxy.yaml
Normal file
@ -0,0 +1,28 @@
|
||||
dsl_version: 0.2.0
|
||||
service:
|
||||
name: zmq-proxy
|
||||
ports:
|
||||
- {{ zmq.proxy.ports.frontend }}
|
||||
- {{ zmq.proxy.ports.backend }}
|
||||
- {{ zmq.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/ccp/zmq/zmq-proxy.conf
|
||||
dependencies:
|
||||
- {{ zmq.matchmaker }}
|
||||
volumes:
|
||||
- name: zmq-logs
|
||||
path: "/var/log/ccp/zmq"
|
||||
type: host
|
||||
readOnly: False
|
||||
files:
|
||||
zmq-conf:
|
||||
path: /etc/ccp/zmq/zmq-proxy.conf
|
||||
content: zmq-proxy.conf.j2
|
5
tools/yamllint.sh
Executable file
5
tools/yamllint.sh
Executable 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
21
tools/yamllint.yaml
Normal 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
17
tox.ini
Normal 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}
|
Loading…
Reference in New Issue
Block a user