Commit 4f0a41c0 authored by Alain Takoudjou's avatar Alain Takoudjou

repman: when restart mariadb/proxy update config first, option to autorejoin standalone node

parent 13e42be9
...@@ -18,11 +18,11 @@ md5sum = da50540b1c0fc69ffbf8f6e345a3baad ...@@ -18,11 +18,11 @@ md5sum = da50540b1c0fc69ffbf8f6e345a3baad
[instance-repman.cfg] [instance-repman.cfg]
_update_hash_filename_ = instance-repman.cfg.jinja2.in _update_hash_filename_ = instance-repman.cfg.jinja2.in
md5sum = 3b858324e8940a08379956bf76fb88bd md5sum = 3d8199bbae01915267a441f47f25ef0d
[config-toml.in] [config-toml.in]
_update_hash_filename_ = templates/config.toml.in _update_hash_filename_ = templates/config.toml.in
md5sum = 3adc842de5c0e8c94e90ac5f41ecab6c md5sum = 5cfa75ca5a0048a050c0041dfe541f3d
[config-cluster-toml.in] [config-cluster-toml.in]
_update_hash_filename_ = templates/cluster-config.toml.in _update_hash_filename_ = templates/cluster-config.toml.in
...@@ -34,7 +34,7 @@ md5sum = 0eeb24c6aa0760f0d33c4cc2828ddf30 ...@@ -34,7 +34,7 @@ md5sum = 0eeb24c6aa0760f0d33c4cc2828ddf30
[template-mariadb.cfg] [template-mariadb.cfg]
_update_hash_filename_ = instance-mariadb.cfg.jinja2.in _update_hash_filename_ = instance-mariadb.cfg.jinja2.in
md5sum = 0c6e9a3220cf6e8b096e523d0d1f407a md5sum = 7049767810d8b8a6a16668512672f5a3
[template-my-cnf] [template-my-cnf]
_update_hash_filename_ = templates/my.cnf.in _update_hash_filename_ = templates/my.cnf.in
...@@ -62,8 +62,8 @@ md5sum = d623a4c684578602b9d8ee49034aebfa ...@@ -62,8 +62,8 @@ md5sum = d623a4c684578602b9d8ee49034aebfa
[mysqld-need-start.sh.in] [mysqld-need-start.sh.in]
_update_hash_filename_ = templates/mysqld-need-start.sh.in _update_hash_filename_ = templates/mysqld-need-start.sh.in
md5sum = 76b984ef5e37248bc3a8010a74b24de5 md5sum = e9bcee5dc1318fe3acda2663472214f5
[proxy-need-start-stop.sh.in] [proxy-need-start-stop.sh.in]
_update_hash_filename_ = templates/proxy-need-start-stop.sh.in _update_hash_filename_ = templates/proxy-need-start-stop.sh.in
md5sum = 1ee3d69f0866605b33eac7ea596b21c3 md5sum = 455aaf369bf5141758dc57f2c0e67b08
...@@ -275,10 +275,8 @@ command = ${dbjobs-executable:rendered} ...@@ -275,10 +275,8 @@ command = ${dbjobs-executable:rendered}
< = jinja2-template-executable < = jinja2-template-executable
rendered = ${directory:bin}/mysqld_restart rendered = ${directory:bin}/mysqld_restart
template = inline:#!/bin/sh template = inline:#!/bin/sh
${mariadb-controller-bin:wrapper-path} status # This script is disabled on SlapOS
${mariadb-controller-bin:wrapper-path} restart mariadb echo "RESTART FROM dbjbos WAS DISABLED"
sleep 1
${mariadb-controller-bin:wrapper-path} status
[{{ section('mariadb-need-start') }}] [{{ section('mariadb-need-start') }}]
recipe = slapos.cookbook:cron.d recipe = slapos.cookbook:cron.d
...@@ -293,6 +291,7 @@ rendered = ${directory:bin}/mysqld_need_start ...@@ -293,6 +291,7 @@ rendered = ${directory:bin}/mysqld_need_start
template = {{ parameter_dict['template-mysqld-need-start'] }} template = {{ parameter_dict['template-mysqld-need-start'] }}
context = context =
key mariadb_controller mariadb-controller-bin:wrapper-path key mariadb_controller mariadb-controller-bin:wrapper-path
key update_config mysql-get-config:rendered
raw username {{ slapparameter_dict['repman-user'] }} raw username {{ slapparameter_dict['repman-user'] }}
raw repman_url {{ slapparameter_dict['repman-url'] }} raw repman_url {{ slapparameter_dict['repman-url'] }}
raw jq_bin {{ jq_bin }} raw jq_bin {{ jq_bin }}
...@@ -303,21 +302,25 @@ context = ...@@ -303,21 +302,25 @@ context =
raw curl_bin {{ curl_bin }} raw curl_bin {{ curl_bin }}
# Donwnload mariadb configuration from repman # Donwnload mariadb configuration from repman
[{{ section('install-mysql-config') }}] [mysql-get-config]
recipe = plone.recipe.command < = jinja2-template-executable
stop-on-error = true rendered = ${directory:bin}/mysqld-update-config
cluster = {{ slapparameter_dict['cluster'] }} cluster = {{ slapparameter_dict['cluster'] }}
config = ${directory:etc}/mysql/my.cnf template = inline:#!{{ bash_bin }}
command =
cd ${directory:config-tmp} && cd ${directory:config-tmp} &&
{{ curl_bin }} -o config.tar.gz {{ slapparameter_dict['repman-url'] }}/api/clusters/${:cluster}/servers/{{ host }}/{{ port }}/config && {{ curl_bin }} -o config.tar.gz {{ slapparameter_dict['repman-url'] }}/api/clusters/${:cluster}/servers/{{ host }}/{{ port }}/config
tar -xzf config.tar.gz && tar -xzf config.tar.gz
cp -r data/.system ${directory:mysql} && cp -r data/.system ${directory:mysql}
rm -rf ${directory:etc}/mysql && rm -rf ${directory:etc}/mysql
cp -r etc/mysql ${directory:etc} && cp -r etc/mysql ${directory:etc}
ln -sf ${directory:mysql}/.system ${directory:var}/system && ln -sf ${directory:mysql}/.system ${directory:var}/system
ln -sf ${my-cnf:rendered} ${directory:etc}/mysql/custom/01_mariadb.cnf ln -sf ${my-cnf:rendered} ${directory:etc}/mysql/custom/01_mariadb.cnf
[{{ section('install-mysql-config') }}]
recipe = plone.recipe.command
stop-on-error = true
config = ${directory:etc}/mysql/my.cnf
command = ${mysql-get-config:rendered}
update-command = ${:command} update-command = ${:command}
[dash] [dash]
......
...@@ -101,6 +101,18 @@ ...@@ -101,6 +101,18 @@
"type": "integer", "type": "integer",
"default": 4 "default": 4
}, },
"autorejoin": {
"title": "Automatic rejoin a failed master",
"description": "Automatic rejoin a failed master (default true)",
"type": "boolean",
"default": true
},
"autoseed": {
"title": "Automatic join a standalone node",
"description": "Automatic join a standalone node",
"type": "boolean",
"default": true
},
"repman-cluster-dict": { "repman-cluster-dict": {
"title": "Replication Manager clusters definition", "title": "Replication Manager clusters definition",
"description": "Replication Manager clusters definition", "description": "Replication Manager clusters definition",
...@@ -166,13 +178,13 @@ ...@@ -166,13 +178,13 @@
"title": "Mysqldump backup cron definition.", "title": "Mysqldump backup cron definition.",
"description": "Logical backup cron expression represents a set of times, using cron format.", "description": "Logical backup cron expression represents a set of times, using cron format.",
"type": "string", "type": "string",
"default": "0 1 * * 6" "default": "0 21 * * *"
}, },
"physical-backup-cron": { "physical-backup-cron": {
"title": "Mariabackup cron definition", "title": "Mariabackup cron definition",
"description": "Physical backup cron expression represents a set of times, using cron format.", "description": "Physical backup cron expression represents a set of times, using cron format.",
"type": "string", "type": "string",
"default": "0 0 * * *" "default": "0 1 * * *"
}, },
"proxy-cpu-cores": { "proxy-cpu-cores": {
"title": "Proxy Cpu cores", "title": "Proxy Cpu cores",
......
...@@ -39,11 +39,28 @@ cert-file = ${slap-connection:cert-file} ...@@ -39,11 +39,28 @@ cert-file = ${slap-connection:cert-file}
computer-id = ${slap-connection:computer-id} computer-id = ${slap-connection:computer-id}
partition-id = ${slap-connection:partition-id} partition-id = ${slap-connection:partition-id}
[download-proxy-config]
recipe = slapos.recipe.template:jinja2
template = inline:#!{{ bash_bin }}
NAME=$1
HOST=$2
PORT=$3
CONFIG=$4
if [ -z "$CONFIG" ]; then
CONFIG="${repman:proxies}/proxysql-$NAME.cnf"
fi
mkdir -p ${repman:config-tmp}/proxies
cd ${repman:config-tmp}/proxies
{{ curl_bin }} -o proxies-$NAME.tar.gz ${nginx-parameter:repman-url}/api/clusters/$NAME/servers/$HOST/$PORT/config
tar -xzf proxies-$NAME.tar.gz
cp conf/proxysql.cnf $CONFIG
rendered = ${directory:bin}/update-proxysql-config
mode = 755
{% do mariadb_dict.__setitem__('computer-memory-percent-threshold', 80) -%} {% do mariadb_dict.__setitem__('computer-memory-percent-threshold', 80) -%}
{% set default_parameter_dict = {"cluster1": {"name": "cluster1", "db-prefered-master": "", {% set default_parameter_dict = {"cluster1": {"name": "cluster1", "db-prefered-master": "",
"database-amount": 2, "proxysql-user": "external", "proxy-tags": "pkg,masterslave,linux,noreadwritesplit", "database-amount": 2, "proxysql-user": "external", "proxy-tags": "pkg,masterslave,linux,noreadwritesplit",
"logical-backup-cron": "0 1 * * 6", "physical-backup-cron": "0 0 * * *"}} -%} "logical-backup-cron": "0 21 * * *", "physical-backup-cron": "0 1 * * *"}} -%}
{% 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)) -%}
...@@ -164,12 +181,8 @@ stop-on-error = false ...@@ -164,12 +181,8 @@ stop-on-error = false
config = ${repman:proxies}/proxysql-{{ name }}.cnf config = ${repman:proxies}/proxysql-{{ name }}.cnf
data = ${repman:proxy-data}/{{ name }} data = ${repman:proxy-data}/{{ name }}
command = command =
mkdir -p ${repman:config-tmp}/proxies &&
mkdir -p ${:data} && mkdir -p ${:data} &&
cd ${repman:config-tmp}/proxies && ${download-proxy-config:rendered} {{ name }} {{ ipv4 }} {{ '${' ~ name ~ '-cluster-parameter:proxy-admin-port}' }} ${:config}
{{ curl_bin }} -o proxies.tar.gz ${nginx-parameter:repman-url}/api/clusters/{{ name }}/servers/{{ ipv4 }}/{{ '${' ~ name ~ '-cluster-parameter:proxy-admin-port}' }}/config &&
tar -xzf proxies.tar.gz &&
cp conf/proxysql.cnf ${:config}
update-command = ${:command} update-command = ${:command}
[proxysql-{{ name }}-wrapper] [proxysql-{{ name }}-wrapper]
...@@ -183,6 +196,23 @@ command-line = ...@@ -183,6 +196,23 @@ command-line =
wrapper-path = ${directory:controller}/proxysql-{{ name }} wrapper-path = ${directory:controller}/proxysql-{{ name }}
wait-for-files = wait-for-files =
${repman:bootstrap}/{{ name }}_bootstrapped ${repman:bootstrap}/{{ name }}_bootstrapped
depends =
{{ '${proxysql-' ~ name ~ '-admin-promise:recipe}' }}
{{ '${proxysql-' ~ name ~ '-promise:recipe}' }}
[proxysql-{{ name }}-admin-promise]
<= monitor-promise-base
module = check_port_listening
name = proxysql-{{ name }}-admin-port-listening
config-hostname= {{ ipv4 }}
config-port = {{ '${' ~ name ~ '-cluster-parameter:proxy-admin-port}' }}
[proxysql-{{ name }}-promise]
<= monitor-promise-base
module = check_port_listening
name = proxysql-{{ name }}-port-listening
config-hostname= {{ ipv4 }}
config-port = {{ '${' ~ name ~ '-cluster-parameter:proxy-port}' }}
{% set service_name = "proxysql-" ~ name -%} {% set service_name = "proxysql-" ~ name -%}
{% set proxysql_dict = {"name": service_name, "command": "${" ~ service_name ~ "-wrapper:wrapper-path}", {% set proxysql_dict = {"name": service_name, "command": "${" ~ service_name ~ "-wrapper:wrapper-path}",
...@@ -256,6 +286,8 @@ ipv4 = ${instance-parameter:ipv4-random} ...@@ -256,6 +286,8 @@ ipv4 = ${instance-parameter:ipv4-random}
username = admin username = admin
password = ${publish-early:repman-password} password = ${publish-early:repman-password}
cluster-d = ${repman:clusters} cluster-d = ${repman:clusters}
autorejoin = {{ slapparameter_dict.get("autorejoin", True) }}
autoseed = {{ slapparameter_dict.get("autoseed", True) }}
mysql-bin-dir = {{ mariadb_location }}/bin mysql-bin-dir = {{ mariadb_location }}/bin
mysqlbinlog-path = {{ mariadb_location }}/bin/mysqlbinlog mysqlbinlog-path = {{ mariadb_location }}/bin/mysqlbinlog
mysqlclient-path = {{ mariadb_location }}/bin/mysql mysqlclient-path = {{ mariadb_location }}/bin/mysql
...@@ -455,6 +487,7 @@ cluster-list = !py![{{ cluster_list | join(', ') }}] ...@@ -455,6 +487,7 @@ cluster-list = !py![{{ cluster_list | join(', ') }}]
context = context =
key proxysql_controller {{proxysql_controller}}-bin:wrapper-path key proxysql_controller {{proxysql_controller}}-bin:wrapper-path
key repman_url nginx-parameter:backend-url key repman_url nginx-parameter:backend-url
key get_proxy_config download-proxy-config:rendered
key cluster_list :cluster-list key cluster_list :cluster-list
raw jq_bin {{ jq_bin }} raw jq_bin {{ jq_bin }}
raw bash_bin {{ bash_bin }} raw bash_bin {{ bash_bin }}
......
{% macro setbool(value) -%}
{% if value in ['true', 'True'] %} true {% else %} false {% endif -%}
{% endmacro -%}
[Default] [Default]
api-bind = "{{ parameter_dict['ipv4'] }}" api-bind = "{{ parameter_dict['ipv4'] }}"
http-bind-address = "{{ parameter_dict['ipv4'] }}" http-bind-address = "{{ parameter_dict['ipv4'] }}"
...@@ -8,7 +11,11 @@ monitoring-save-config = false ...@@ -8,7 +11,11 @@ monitoring-save-config = false
api-https-bind = true api-https-bind = true
api-credentials = "{{ parameter_dict['username'] }}:{{ parameter_dict['password'] }}" api-credentials = "{{ parameter_dict['username'] }}:{{ parameter_dict['password'] }}"
include = "{{ parameter_dict['cluster-d'] }}" include = "{{ parameter_dict['cluster-d'] }}"
autorejoin = true autorejoin = {{ setbool(parameter_dict['autorejoin']) }}
autoseed = {{ setbool(parameter_dict['autoseed']) }}
{% if parameter_dict['autoseed'] in ['true', 'True'] -%}
autorejoin-logical-backup = true
{% endif -%}
db-servers-binary-path = "{{ parameter_dict['mysql-bin-dir'] }}" db-servers-binary-path = "{{ parameter_dict['mysql-bin-dir'] }}"
# Database list of hosts to ignore in election # Database list of hosts to ignore in election
#db-servers-ignored-hosts = #db-servers-ignored-hosts =
......
...@@ -11,6 +11,9 @@ curl () { ...@@ -11,6 +11,9 @@ curl () {
CODE=$(curl -o /dev/null -w "%{http_code}" {{ repman_url }}/api/clusters/{{ cluster }}/servers/{{ db_host }}/{{ db_port }}/need-start) CODE=$(curl -o /dev/null -w "%{http_code}" {{ repman_url }}/api/clusters/{{ cluster }}/servers/{{ db_host }}/{{ db_port }}/need-start)
if [ $CODE -eq 200 ]; then if [ $CODE -eq 200 ]; then
echo "$CODE: Updating mysql configuration..."
# update mysql configuration
{{ update_config }}
echo "$CODE: Starting mariadb service..." echo "$CODE: Starting mariadb service..."
# print current status, can be useful for debug... # print current status, can be useful for debug...
{{ mariadb_controller }} status mariadb {{ mariadb_controller }} status mariadb
......
...@@ -28,6 +28,8 @@ check_stop_cluster () { ...@@ -28,6 +28,8 @@ check_stop_cluster () {
CODE=$(curl -o /dev/null -w "%{http_code}" {{ repman_url }}/api/clusters/$NAME/servers/$HOST/$PORT/need-stop) CODE=$(curl -o /dev/null -w "%{http_code}" {{ repman_url }}/api/clusters/$NAME/servers/$HOST/$PORT/need-stop)
if [ $CODE -eq 200 ]; then if [ $CODE -eq 200 ]; then
echo "$CODE: updating proxysql config $HOST:$PORT..."
{{ get_proxy_config }} $NAME $HOST $PORT
echo "$CODE: Stoping proxysql $HOST:$PORT..." echo "$CODE: Stoping proxysql $HOST:$PORT..."
{{ proxysql_controller }} stop proxysql-$NAME {{ proxysql_controller }} stop proxysql-$NAME
sleep 1 sleep 1
......
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