Commit 5869a6fe authored by Alain Takoudjou's avatar Alain Takoudjou

repman: requesting slave database can be done in a specific cluster

parent 07014f95
...@@ -18,7 +18,7 @@ md5sum = 55c7fd4dd6a39b31878889fbfb00f995 ...@@ -18,7 +18,7 @@ md5sum = 55c7fd4dd6a39b31878889fbfb00f995
[instance-repman.cfg] [instance-repman.cfg]
_update_hash_filename_ = instance-repman.cfg.jinja2.in _update_hash_filename_ = instance-repman.cfg.jinja2.in
md5sum = 884e14bc349a341ad7125e449029ee9c md5sum = 3c0c3a6ec74e997ae16a7425a56fe806
[config-toml.in] [config-toml.in]
_update_hash_filename_ = templates/config.toml.in _update_hash_filename_ = templates/config.toml.in
...@@ -46,7 +46,7 @@ md5sum = 47b76144e1b116580c8acf08274af976 ...@@ -46,7 +46,7 @@ md5sum = 47b76144e1b116580c8acf08274af976
[template-publish-slave-information] [template-publish-slave-information]
_update_hash_filename_ = publish-database-slave-parameters.cfg.in _update_hash_filename_ = publish-database-slave-parameters.cfg.in
md5sum = 9616477ff993c55c2b43bf8797db6994 md5sum = 2e9f3afde619e20f08803013a4225e94
[mariadb-init-root-sql] [mariadb-init-root-sql]
_update_hash_filename_ = templates/mariadb_init_root.sql.in _update_hash_filename_ = templates/mariadb_init_root.sql.in
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
], ],
"default": "" "default": ""
}, },
"cluster-id": { "cluster_id": {
"title": "Replication Manager Cluster Name", "title": "Replication Manager Cluster Name",
"description": "When a cluster Name is given, Try to request the slave in the specified cluster name. If the cluster is not found, the slave is requested in the first cluster.", "description": "When a cluster Name is given, Try to request the slave in the specified cluster name. If the cluster is not found, the slave is requested in the first cluster.",
"type": "string", "type": "string",
......
...@@ -9,8 +9,6 @@ ...@@ -9,8 +9,6 @@
"pfs", "linux", "readonly", "diskmonitor", "sqlerror", "compressbinlog", "bm4ci", "pfs", "linux", "readonly", "diskmonitor", "sqlerror", "compressbinlog", "bm4ci",
"mroonga", "utctime", "readcommitted", "nohandshake", "ssl"] -%} "mroonga", "utctime", "readcommitted", "nohandshake", "ssl"] -%}
{% set frontend_parameter_dict = slapparameter_dict.get('slave-frontend', {}) -%} {% set frontend_parameter_dict = slapparameter_dict.get('slave-frontend', {}) -%}
{% set database_slave_list = [] -%}
{% set db_name_list = [] -%}
{% set count = namespace(value=2) %} {% set count = namespace(value=2) %}
{% set caucase_bind = '[' ~ ip ~ ']:8890' -%} {% set caucase_bind = '[' ~ ip ~ ']:8890' -%}
{% set caucase_url = 'http://' ~ caucase_bind -%} {% set caucase_url = 'http://' ~ caucase_bind -%}
...@@ -18,6 +16,10 @@ ...@@ -18,6 +16,10 @@
{% set default_parameter_dict = {"cluster1": {"db-prefered-master": "", {% set default_parameter_dict = {"cluster1": {"db-prefered-master": "",
"database-amount": 2, "proxysql-user": "external", "database-amount": 2, "proxysql-user": "external",
"logical-backup-cron": "0 21 * * *", "physical-backup-cron": "0 1 * * *"}} -%} "logical-backup-cron": "0 21 * * *", "physical-backup-cron": "0 1 * * *"}} -%}
{% set cluster_name_list = slapparameter_dict.get('repman-cluster-dict', default_parameter_dict).keys() -%}
{% set database_slave_dict = {} -%}
{% set db_name_dict = {} -%}
{% set default_slave_cluster_id = list(cluster_name_list)[0] -%}
{% macro password(name) -%} {% macro password(name) -%}
[{{ name }}-password] [{{ name }}-password]
...@@ -49,8 +51,10 @@ recipe = slapos.cookbook:mkdirectory ...@@ -49,8 +51,10 @@ recipe = slapos.cookbook:mkdirectory
home = ${buildout:directory}/proxy home = ${buildout:directory}/proxy
config = ${directory:etc}/proxysql config = ${directory:etc}/proxysql
ssl = ${:config}/default-ssl ssl = ${:config}/default-ssl
{% for cluster in slapparameter_dict.get('repman-cluster-dict', default_parameter_dict).keys() -%} {% for cluster in cluster_name_list -%}
{{ cluster }} = ${:home}/{{ cluster }} {{ cluster }} = ${:home}/{{ cluster }}
{% do database_slave_dict.__setitem__(cluster, []) -%}
{% do db_name_dict.__setitem__(cluster, []) -%}
{% endfor -%} {% endfor -%}
{% import "supervisord_lib" as supervisord_lib with context %} {% import "supervisord_lib" as supervisord_lib with context %}
...@@ -95,6 +99,7 @@ inline = ...@@ -95,6 +99,7 @@ inline =
cp etc/proxysql/proxysql.cnf $CONFIG cp etc/proxysql/proxysql.cnf $CONFIG
output = ${directory:bin}/update-proxysql-config output = ${directory:bin}/update-proxysql-config
{% set slave_information_list = [] -%}
{% for instance_dict in slave_instance_list -%} {% for instance_dict in slave_instance_list -%}
{% set slave_dict = { {% set slave_dict = {
'name': 'db_%s' % instance_dict['slave_reference'].replace('-', '_').lower(), 'name': 'db_%s' % instance_dict['slave_reference'].replace('-', '_').lower(),
...@@ -102,23 +107,26 @@ output = ${directory:bin}/update-proxysql-config ...@@ -102,23 +107,26 @@ output = ${directory:bin}/update-proxysql-config
'password': instance_dict.get('db_password', '${' ~ instance_dict['slave_reference'] ~ '-password:passwd}'), 'password': instance_dict.get('db_password', '${' ~ instance_dict['slave_reference'] ~ '-password:passwd}'),
'slave_reference': instance_dict['slave_reference'], 'slave_reference': instance_dict['slave_reference'],
'charset': instance_dict.get('db_charset', ''), 'charset': instance_dict.get('db_charset', ''),
'cluster_id': instance_dict.get('cluster_id', default_slave_cluster_id),
'require_ssl': True 'require_ssl': True
} -%} } -%}
{% do database_slave_list.append(slave_dict) -%} {% do slave_information_list.append(slave_dict) -%}
{% do db_name_list.append([slave_dict['name'], slave_dict['user']]) -%} {% do database_slave_dict[slave_dict['cluster_id']].append(slave_dict) -%}
{% do db_name_dict[slave_dict['cluster_id']].append([slave_dict['name'], slave_dict['user']]) -%}
{{ password(instance_dict['slave_reference']) }} {{ password(instance_dict['slave_reference']) }}
{% endfor %} {% endfor %}
# set each database dict which will be used to publish slave information
[database-slave-information] [database-slave-information]
{% for slave_dict in database_slave_list -%} {% for slave_dict in slave_information_list -%}
{{ slave_dict['name'] }} = !py!{{ slave_dict }} {{ slave_dict['name'] }} = !py!{{ slave_dict }}
{% endfor %} {% endfor %}
{% set db_list = db_name_list -%}
{% do mariadb_dict.__setitem__('computer-memory-percent-threshold', 80) -%} {% do mariadb_dict.__setitem__('computer-memory-percent-threshold', 80) -%}
{% for name, parameter_dict in slapparameter_dict.get('repman-cluster-dict', default_parameter_dict).items() -%} {% for name, parameter_dict in slapparameter_dict.get('repman-cluster-dict', default_parameter_dict).items() -%}
{% do mariadb_dict.__setitem__('innodb-file-per-table', parameter_dict.get('innodb-file-per-table', 1)) -%} {% do mariadb_dict.__setitem__('innodb-file-per-table', parameter_dict.get('innodb-file-per-table', 1)) -%}
{% do mariadb_dict.__setitem__('use-ipv6', parameter_dict.get('use-ipv6', True)) -%} {% do mariadb_dict.__setitem__('use-ipv6', parameter_dict.get('use-ipv6', True)) -%}
{% set db_list = db_name_dict[name] -%}
# Request mariadb instances # Request mariadb instances
{% set db_amount = parameter_dict.get('database-amount', 2) -%} {% set db_amount = parameter_dict.get('database-amount', 2) -%}
...@@ -153,7 +161,7 @@ config-repman-url = ${nginx-parameter:backend-url} ...@@ -153,7 +161,7 @@ config-repman-url = ${nginx-parameter:backend-url}
config-repman-secure-url = ${nginx-parameter:backend-ssl-url} config-repman-secure-url = ${nginx-parameter:backend-ssl-url}
config-cluster = {{ name }} config-cluster = {{ name }}
config-name = {{ dbname }} config-name = {{ dbname }}
config-database-list = !py!{{ database_slave_list }} config-database-list = !py!{{ database_slave_dict[name] }}
config-database-name = {{ dumps(db_list) }} config-database-name = {{ dumps(db_list) }}
config-require-ssl = {{ dumps(slapparameter_dict.get('require-ssl', False)) }} config-require-ssl = {{ dumps(slapparameter_dict.get('require-ssl', False)) }}
return = return =
...@@ -328,6 +336,7 @@ context = ...@@ -328,6 +336,7 @@ context =
key proxy_port {{ name }}-cluster-parameter:proxy-port key proxy_port {{ name }}-cluster-parameter:proxy-port
raw eggs_directory {{ eggs_directory }} raw eggs_directory {{ eggs_directory }}
raw develop_eggs_directory {{ develop_eggs_directory }} raw develop_eggs_directory {{ develop_eggs_directory }}
raw cluster {{ name }}
raw ipv6 {{ ip }} raw ipv6 {{ ip }}
raw ipv4 {{ ipv4 }} raw ipv4 {{ ipv4 }}
section slave_dict database-slave-information section slave_dict database-slave-information
...@@ -624,7 +633,7 @@ recipe = slapos.cookbook:publish-early ...@@ -624,7 +633,7 @@ recipe = slapos.cookbook:publish-early
monitor-password monitor-htpasswd:passwd monitor-password monitor-htpasswd:passwd
db-root-password gen-root-password:passwd db-root-password gen-root-password:passwd
repman-password repman-password:passwd repman-password repman-password:passwd
database-list = {{ db_list }} database-dict = {{ db_name_dict }}
[publish-connection-parameter] [publish-connection-parameter]
<= monitor-publish <= monitor-publish
...@@ -633,7 +642,7 @@ recipe = slapos.cookbook:publish ...@@ -633,7 +642,7 @@ recipe = slapos.cookbook:publish
backend-url = ${nginx-parameter:backend-ssl-url} backend-url = ${nginx-parameter:backend-ssl-url}
url = ${repman-frontend:connection-secure_access} url = ${repman-frontend:connection-secure_access}
username = ${repman-parameter:username} username = ${repman-parameter:username}
database-list = {{ db_list }} database-dict = {{ db_name_dict }}
{% for name, value in publish_dict.items() -%} {% for name, value in publish_dict.items() -%}
{{ name }} = {{ value }} {{ name }} = {{ value }}
{% endfor %} {% endfor %}
......
...@@ -11,6 +11,7 @@ cert_file = ${slap-connection:cert-file} ...@@ -11,6 +11,7 @@ cert_file = ${slap-connection:cert-file}
{% for _, database in slave_dict.items() -%} {% for _, database in slave_dict.items() -%}
{% if database['cluster_id'] == cluster -%}
{% set slave_reference = database['slave_reference'] -%} {% set slave_reference = database['slave_reference'] -%}
{% do part_list.append('publish-slave-' ~ slave_reference) -%} {% do part_list.append('publish-slave-' ~ slave_reference) -%}
...@@ -24,6 +25,8 @@ url = {{ "mysql://" ~ database['user'] ~ ":" ~ database['password'] ~ "@[" ~ ipv ...@@ -24,6 +25,8 @@ url = {{ "mysql://" ~ database['user'] ~ ":" ~ database['password'] ~ "@[" ~ ipv
url = {{ "mysql://" ~ ipv4 ~ ":" ~ proxy_port ~ database['name'] }} url = {{ "mysql://" ~ ipv4 ~ ":" ~ proxy_port ~ database['name'] }}
url_v6 = {{ "mysql://[" ~ ip ~ "]:" ~ proxy_port ~ database['name'] }} url_v6 = {{ "mysql://[" ~ ip ~ "]:" ~ proxy_port ~ database['name'] }}
{% endif -%} {% endif -%}
cluster = {{ database['cluster_id'] }}
{% endif -%}
{% endfor %} {% endfor %}
[buildout] [buildout]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment