213 Commits

Author SHA1 Message Date
Michal Arbet
4838591c6c Add loadbalancer-config role and wrap haproxy-config role inside
This patch adds loadbalancer-config role
which is "wrapper" around haproxy-config
and proxysql-config role which will be added
in follow-up patches.

Change-Id: I64d41507317081e1860a94b9481a85c8d400797d
2022-08-09 12:15:49 +02:00
Michal Arbet
baad47ac61 Edit services roles to support database sharding
Depends-On: https://review.opendev.org/c/openstack/kolla/+/769385
Depends-On: https://review.opendev.org/c/openstack/kolla/+/765781

Change-Id: I3c4182a6556dafd2c936eaab109a068674058fca
2022-08-09 12:15:26 +02:00
Michal Arbet
de973b81fa Add proxysql support for database
Kolla environment currently uses haproxy
to fullfill HA in mariadb. This patch
is switching haproxy to proxysql if enabled.

This patch is also replacing mariadb's user
'haproxy' with user 'monitor'. This replacement
has two reasons:
  - Use better name to "monitor" galera claster
    as there are two services using this user
    (HAProxy, ProxySQL)
  - Set password for monitor user as it's
    always better to use password then not use.
    Previous haproxy user didn't use password
    as it was historically not possible with
    haproxy and mariadb-clustercheck wasn't
    implemented.

Depends-On: https://review.opendev.org/c/openstack/kolla/+/769385
Depends-On: https://review.opendev.org/c/openstack/kolla/+/765781
Depends-On: https://review.opendev.org/c/openstack/kolla/+/850656

Change-Id: I0edae33d982c2e3f3b5f34b3d5ad07a431162844
2022-07-29 15:05:21 +02:00
Michal Nasiadka
f940e6aa31 clustercheck: move from xinetd to socat
Needed for CentOS Stream 9 and Rocky Linux 9.

Change-Id: I614e64e227304fdc50c08bd16d67ccf03586b92c
2022-07-26 07:13:34 +00:00
Michal Nasiadka
dcf5a8b65f Fix var-spacing
ansible-lint introduced var-spacing - let's fix our code.

Change-Id: I0d8aaf3c522a5a6a5495032f6dbed8a2be0251f0
2022-07-25 22:15:15 +02:00
Zuul
7ed26c8a46 Merge "Improve MariaDB restore procedure" 2022-05-31 10:18:37 +00:00
Radosław Piliszek
3e75a33ad4 Use the new image naming scheme
Change-Id: Ib4b15ed4feac82d8492b1c0f0238a752eac668e6
2022-05-23 06:37:25 +00:00
Marcin Juszkiewicz
1620ab5be9 drop install_type from image names
We have only one value for install_type now and it gets removed from
image names.

Change-Id: I8bf95fd7aa9dd26b80d618ca0fcb097003b4cb0a
2022-04-20 12:29:12 +02:00
Piotr Parczewski
377b6b4251 Improve MariaDB restore procedure
Change-Id: Id05122cb564f3e7475b2b76da8c111e2c72601b8
2022-01-11 21:47:21 +01:00
Pierre Riteau
56fc74f231 Move project_name and kolla_role_name to role vars
Role vars have a higher precedence than role defaults. This allows to
import default vars from another role via vars_files without overriding
project_name (see related bug for details).

Change-Id: I3d919736e53d6f3e1a70d1267cf42c8d2c0ad221
Related-Bug: #1951785
2021-12-31 09:26:25 +00:00
Zuul
ed5ad62a09 Merge "mariadb: use add_host to include inactive hosts in shard grouping" 2021-11-04 11:02:41 +00:00
Seena Fallah
68cd2a0553 mariadb: use add_host to include inactive hosts in shard grouping
In case of running mariadb role with --limit the group_by module will only include the limited hosts and other hosts that are not limited by ansible will not be included.
Using add_host will add all hosts in mariadb group to their shards group

Signed-off-by: Seena Fallah <seenafallah@gmail.com>
Change-Id: I1331698e313bd714a16fc35f38fb579d75b56370
Closes-Bug: #1947589
2021-10-28 16:29:05 +00:00
Zuul
e217fcb650 Merge "[mariadb] Drop some old workaround" 2021-10-28 07:20:24 +00:00
Zuul
7b8332e1aa Merge "mariadb: Remove wsrep-notify.sh" 2021-10-20 11:27:05 +00:00
Michal Nasiadka
b6b7401c0d mariadb: Remove wsrep-notify.sh
Closes-Bug: #1947534

Change-Id: I08be074c3633cc4fb0a0bc6c9cb8d03eb5226d89
2021-10-20 05:37:57 +00:00
Radosław Piliszek
c94cc4a61a [mariadb] Start new nodes serially
There seems to be a bug in Galera that causes
TASK [mariadb : Check MariaDB service WSREP sync status]
to fail.
One (in case of 3-node cluster) or more (possible with
more-than-3-node clusters) nodes may "lose the race" and get stuck
in the "initialized" state of WSREP.
This is entirely random as is the case with most race issues.
MariaDB service restart on that node will fix the situation but
it's unwieldy.
The above may happen because Kolla Ansible starts and waits for
all new nodes at once.
This did not bother the old galera (galera 3) which figured out
the ordering for itself and let each node join the cluster properly.
The proposed workaround is to start and wait for nodes serially.

Change-Id: I449d4c2073d4e3953e9f09725577d2e1c9d563c9
Closes-Bug: #1947485
2021-10-17 07:58:46 +00:00
Radosław Piliszek
c7c14e1c43 Fix privileges for MariaDB 10.5
"BINLOG MONITOR" and "SLAVE MONITOR" replace
"REPLICATION CLIENT" (which is now an alias for "BINLOG MONITOR").
The validation in Ansible MySQL collection is too simple to
understand aliases and breaks. Hence, let's use the canonical
names and adapt per service according to its needs.

Change-Id: I1175e4846384accd19942620dc155d0c5728e64b
2021-10-07 09:24:31 +00:00
Zuul
bd6ca6b286 Merge "Do not enable mariadb-clustercheck when not needed" 2021-10-05 10:03:53 +00:00
Radosław Piliszek
27dd69a7f6 [mariadb] Drop some old workaround
innodb_lock_schedule_algorithm setting is removed in MariaDB 10.6.

Change-Id: I1ff06162569c46c51847b4c31933861549787c65
Depends-On: https://review.opendev.org/c/openstack/kolla/+/811014
2021-09-28 12:59:24 +00:00
Mark Goddard
6dc8b56390 Use mariadb_tag as default for all mariadb tags
This allows one variable to specify the tag for all MariaDB images.

Change-Id: I164cdd41787f8bd52d8e08cb380d42625a8bbd84
TrivialFix
2021-09-21 06:50:41 +00:00
Radosław Piliszek
2cf9ae2cf5 Do not enable mariadb-clustercheck when not needed
Closes-Bug: #1944114
Change-Id: Idd525fda7ff94f70794f4c582cd74470c7f40fae
2021-09-20 09:58:56 +00:00
Radosław Piliszek
9ff2ecb031 Refactor and optimise image pulling
We get a nice optimisation by using a filtered loop instead
of task skipping per service with 'when'.

Partially-Implements: blueprint performance-improvements
Change-Id: I8f68100870ab90cb2d6b68a66a4c97df9ea4ff52
2021-08-10 11:57:54 +00:00
Mark Goddard
ade5bfa302 Use ansible_facts to reference facts
By default, Ansible injects a variable for every fact, prefixed with
ansible_. This can result in a large number of variables for each host,
which at scale can incur a performance penalty. Ansible provides a
configuration option [0] that can be set to False to prevent this
injection of facts. In this case, facts should be referenced via
ansible_facts.<fact>.

This change updates all references to Ansible facts within Kolla Ansible
from using individual fact variables to using the items in the
ansible_facts dictionary. This allows users to disable fact variable
injection in their Ansible configuration, which may provide some
performance improvement.

This change disables fact variable injection in the ansible
configuration used in CI, to catch any attempts to use the injected
variables.

[0] https://docs.ansible.com/ansible/latest/reference_appendices/config.html#inject-facts-as-vars

Change-Id: I7e9d5c9b8b9164d4aee3abb4e37c8f28d98ff5d1
Partially-Implements: blueprint performance-improvements
2021-06-23 10:38:06 +01:00
Pierre Riteau
bb56861cc5 Use mariadb-server image for mariabackup
The mariadb image was removed in Wallaby, leading to database backup
failures.

Change-Id: I90986e7521779997df2782767bb95efcbd8ef232
Closes-Bug: #1928129
2021-05-28 13:24:11 +02:00
Zuul
f86a810b72 Merge "Fix "Restart mariadb-clustercheck container" during config gen" 2021-05-10 18:50:41 +00:00
Zuul
980dd33721 Merge "mariadb: Deprecate wsrep-notify.sh" 2021-04-21 09:50:44 +00:00
Michał Nasiadka
451844ac67 mariadb: Deprecate wsrep-notify.sh
Change-Id: I14376dac46809f8bb466ec41f279be8d323d459d
2021-04-15 08:12:31 +00:00
Michal Arbet
5d17100118 Additional small changes in role/mariadb
- Replace hardcoded haproxy monitor user with variable.
 - Rename mariadb_backup variable to mariadb_backup_possible.
 - Drop creation of monitor user in handlers as this is
   now handled in register.yml for good reason.

Change-Id: I255a79d36ae18ca42d0befd00b235ca509197db3
2021-04-14 16:10:30 +02:00
Michał Nasiadka
d7a9be84d4 mariadb: Disable wsrep-notify script if clustercheck enabled
Change-Id: Id16ec7d7b57630ae20430675c4a196e63ca8d4a5
2021-04-14 09:46:20 +00:00
Michal Arbet
09b3c6ca07 Refactor mariadb to support shards
Kolla-ansible is currently installing mariadb
cluster on hosts defined in group['mariadb']
and render haproxy configuration for this hosts.

This is not enough if user want to have several
service databases in several mariadb clusters (shards).

Spread service databases to multiple clusters (shards)
is usefull especially for databases with high load
(neutron,nova).

How it works ?

It works exactly same as now, but group reference 'mariadb'
is now used as group where all mariadb clusters (shards)
are located, and mariadb clusters are installed to
dynamic groups created by group_by and host variable
'mariadb_shard_id'.

It also adding special user 'shard_X' which will be used
for creating users and databases, but only if haproxy
is not used as load-balance solution.

This patch will not affect user which has all databases
on same db cluster on hosts in group 'mariadb', host
variable 'mariadb_shard_id' is set to 0 if not defined.

Mariadb's task in loadbalancer.yml (haproxy) is configuring
mariadb default shard hosts as haproxy backends. If mariadb
role is used to install several clusters (shards), only
default one is loadbalanced via haproxy.

Mariadb's backup is working only for default shard (cluster)
when using haproxy as mariadb loadbalancer, if proxysql
is used, all shards are backuped.

After this patch will be merged, there will be way for proxysql
patches which will implement L7 SQL balancing based on
users and schemas.

Example of inventory:

[mariadb]
server1
server2
server3 mariadb_shard_id=1
server4 mariadb_shard_id=1
server5 mariadb_shard_id=2
server6 mariadb_shard_id=3

Extra:
wait_for_loadbalancer is removed instead of modified as its role
is served by check already. The relevant refactor is applied as
well.

Change-Id: I933067f22ecabc03247ea42baf04f19100dffd08
Co-Authored-By: Radosław Piliszek <radoslaw.piliszek@gmail.com>
2021-04-07 23:19:42 +02:00
Michal Arbet
209dc1e9dc Set changed_when to false for group_by tasks
This trivial patch is just turning off ansible
changed report for group_by tasks as it could
be confusing for user.

Change-Id: I7512af573782359a6f01290a55291ac7eb0de867
2021-03-13 13:59:23 +00:00
Zuul
db3f0fa08f Merge "Negative seqno need to be considered when comparing seqno" 2021-02-01 12:30:59 +00:00
Zuul
454db5657e Merge "Fix invalid mariadb log options" 2021-01-31 18:08:38 +00:00
fudunwei
068f3fea50 Negative seqno need to be considered when comparing seqno
Need to consider Negative seqno to compare in some cases,
but the task does not support to do that, we need to make it work.

1.we use mariabackup to restore datas on control1, delete the
mariadb data on control2 and control3, and then use cluster recovery,
 as a result that the seqno of the other two nodes will be '-1'.

2. add one more control node into our existing mariadb cluster,
and then use cluster recovery, the seqno of the new node will be '-1'.

Change-Id: Ic1ac8656f28c3835e091637014f075ac5479d390
2021-01-29 13:46:37 +08:00
Zuul
01c0c39fb0 Merge "remove the unused variable in mariabackup" 2021-01-25 14:37:29 +00:00
fudunwei
27f8403ad5 remove the unused variable in mariabackup
Remove the unused variable "mariadb_backup_database_address"

Change-Id: If30b166160136c32dd0b892e4093b1798662e872
2021-01-25 14:32:21 +08:00
fudunwei
aec42f0f5f Correct spell error
correct spell 'Cheching' to 'Checking'

Change-Id: I3ceb6960c3b38f371d0d4163ee37d4b34e61f401
2021-01-25 09:58:12 +08:00
Will Szumski
ce012bcb09 Fix "Restart mariadb-clustercheck container" during config gen
The handler was firing even when we were only generating config.
This is an issue because the services may not have been deployed.

TrivialFix

Change-Id: I2f832d73138b4c9f29e3c71e2463293eab71483a
2021-01-21 12:07:21 +00:00
Zuul
cb6ffa25e8 Merge "Fix mariadb_recovery when mariadb container is missing" 2020-12-16 09:36:54 +00:00
Zuul
860c32de76 Merge "Revert "Performance: Use import_tasks in the main plays"" 2020-12-15 19:52:24 +00:00
Mark Goddard
db4fc85c33 Revert "Performance: Use import_tasks in the main plays"
This reverts commit 9cae59be51e8d2d798830042a5fd448a4aa5e7dc.

Reason for revert: This patch was found to introduce issues with fluentd customisation. The underlying issue is not currently fully understood, but could be a sign of other obscure issues.

Change-Id: Ia4859c23d85699621a3b734d6cedb70225576dfc
Closes-Bug: #1906288
2020-12-14 10:36:55 +00:00
Mark Goddard
f903d774af Fix mariadb_recovery when mariadb container is missing
Mariadb recovery fails if a cluster has previously been deployed, but any of
the mariadb containers do not exist.

Steps to reproduce
==================

* Deploy a mariadb galera cluster
* Remove the mariadb container from at least one host (docker rm -f mariadb)
* Run kolla-ansible mariadb_recovery

Expected results
================

The cluster is recovered, and a new container deployed where necessary.

Actual results
==============

The task 'Stop MariaDB containers' fails on any host where the container does
not exist.

Solution
========

This change fixes the issue by using the 'ignore_missing' flag for kolla_docker
with the stop_container action. This means the task does not fail when the
container does not exist. It is also necessary to swap some 'docker cp'
commands for 'cp' on the host, using the path to the volume.

Closes-Bug: #1907658

Change-Id: Ibd4a6adeb8443e12c45cbab65f501392ffb16fc7
2020-12-10 12:27:25 +00:00
Zuul
172bc6eccd Merge "Performance: Use import_tasks in the main plays" 2020-11-24 15:47:35 +00:00
Radosław Piliszek
f2b2b9cf5e Remove a CentOS IPv6 FIXME meant for Ussuri
CentOS 8 should work fine without the workaround.

This change adds the missing CentOS 8 IPv6 CI job as well.

Change-Id: I58af7a09b5ae09a10b9efc33c1f30c2efc6613f7
2020-11-08 09:37:35 +01:00
Radosław Piliszek
9cae59be51 Performance: Use import_tasks in the main plays
Main plays are action-redirect-stubs, ideal for import_tasks.

This avoids 'include' penalty and makes logs/ara look nicer.

Fixes haproxy and rabbitmq not to check the host group as well.

Change-Id: I46136fc40b815e341befff80b54a91ef431eabc0
Partially-Implements: blueprint performance-improvements
2020-10-27 19:09:32 +01:00
Radosław Piliszek
3411b9e420 Performance: optimize genconfig
Config plays do not need to check containers. This avoids skipping
tasks during the genconfig action.

Ironic and Glance rolling upgrades are handled specially.

Swift and Bifrost do not use the handlers at all.

Partially-Implements: blueprint performance-improvements
Change-Id: I140bf71d62e8f0932c96270d1f08940a5ba4542a
2020-10-12 19:30:06 +02:00
Isaac Prior
414677a6b5 Fix invalid mariadb log options
Trivial: log-error & log-bin are both invalid mariadb config options.
The appropriate options are log_error & log_bin.
Note - this change mostly unnecessary as log_error is provided via cli 
and log_bin value is the default.
Change-Id: If7051f7139a68864e599cccffaf17c21855fc4a8
2020-09-29 15:27:23 +00:00
Michal Nasiadka
a7941e2498 Change mariadb image to mariadb-server
Since change [1] merged we have two mariadb images (mariadb and mariadb-server)
Let's use mariadb-server in kolla-ansible, so we can deprecate mariadb image.

[1]: https://review.opendev.org/#/c/710217/

Change-Id: I4ae2ccaaba8fb516f469f4ce8628e8c61de03f0d
2020-09-17 10:42:21 +00:00
Mark Goddard
b685ac44e0 Performance: replace unconditional include_tasks with import_tasks
Including tasks has a performance penalty when compared with importing
tasks. If the include has a condition associated with it, then the
overhead of the include may be lower than the overhead of skipping all
imported tasks. For unconditionally included tasks, switching to
import_tasks provides a clear benefit.

Benchmarking of include vs. import is available at [1].

This change switches from include_tasks to import_tasks where there is
no condition applied to the include.

[1] https://github.com/stackhpc/ansible-scaling/blob/master/doc/include-and-import.md#task-include-and-import

Partially-Implements: blueprint performance-improvements

Change-Id: Ia45af4a198e422773d9f009c7f7b2e32ce9e3b97
2020-08-28 16:12:03 +00:00
Mark Goddard
146b00efa7 Mount /etc/timezone based on host OS
Previously we mounted /etc/timezone if the kolla_base_distro is debian
or ubuntu. This would fail prechecks if debian or ubuntu images were
deployed on CentOS. While this is not a supported combination, for
correctness we should fix the condition to reference the host OS rather
than the container OS, since that is where the /etc/timezone file is
located.

Change-Id: Ifc252ae793e6974356fcdca810b373f362d24ba5
Closes-Bug: #1882553
2020-08-10 10:14:18 +01:00