Prevent latest mariadb version

Latest mariadb version has a bug that prevents clustering from
behaving properly in bootstrap.

For openSUSE, we need to switch from OBS to MariaDB upstream repo.
It therefore needs a backport from a previous patch:
"Switch to upstream MariaDB repository". We also need to configure
PrivateDevices before starting the service which is based on the
588b9cead7 backport and
baa97f1df2 master commit. This also
removes the SUSE specific cases from the tasks and handlers since they
are no longer necessary when using the upstream packages.

(manually cherry picked from commit a37bfcca09)
(manually cherry picked from commit c54e9a68bc)

Change-Id: I21e96dbe7fd9acaedb7eee7cba2ae226fa0644d5
This commit is contained in:
Jean-Philippe Evrard 2018-02-08 08:23:14 +00:00 committed by Markos Chandras
parent ab7e13824f
commit 04f8347852
10 changed files with 138 additions and 86 deletions

View File

@ -45,6 +45,7 @@ galera_mariadb_server_package: "{{ _galera_mariadb_server_package }}"
# The major version used to select the repo URL path
galera_major_version: 10.1
galera_minor_version: 30
# Set the URL for the MariaDB repository
galera_repo_url: "{{ _galera_repo_url }}"
@ -173,6 +174,11 @@ galera_server_distro_package_pins:
- package: mariadb-server
version: 10.1.27+maria-1~xenial
priority: -1
# TODO(evrardjp): Remove pin when clustering issue is figured out
# Clustering issue
- package: mariadb-server
version: 10.1.31+maria-1~xenial
priority: -1
# Galera Server SSL functionality.

View File

@ -28,7 +28,6 @@
MYSQLD_STARTUP_TIMEOUT: 180
when:
- not galera_running_and_bootstrapped | bool
- ansible_pkg_mgr != "zypper"
- not galera_external_restart_handlers | bool
register: galera_restart
until: galera_restart | success
@ -60,50 +59,6 @@
retries: 3
delay: 5
- name: "Set wsrep-new-cluster"
lineinfile:
line: 'wsrep-new-cluster'
insertafter: 'wsrep_cluster_name'
state: present
dest: "{{ galera_etc_include_dir }}/cluster.cnf"
listen: "Restart all mysql"
when:
- not galera_running_and_bootstrapped | bool
- not galera_existing_cluster | bool and inventory_hostname == galera_server_bootstrap_node
- ansible_pkg_mgr == "zypper"
- not galera_external_restart_handlers | bool
- name: "Ensure node is not in bootstrap mode"
lineinfile:
line: 'wsrep-new-cluster'
state: absent
dest: "{{ galera_etc_include_dir }}/cluster.cnf"
listen: "Restart all mysql"
when:
- not galera_running_and_bootstrapped | bool
- (not galera_existing_cluster | bool) or (not inventory_hostname == galera_server_bootstrap_node)
- ansible_pkg_mgr == "zypper"
- not galera_external_restart_handlers | bool
- name: Restart mysql on SUSE
service:
name: mysql
state: restarted
when:
- not galera_running_and_bootstrapped | bool
- ansible_pkg_mgr == "zypper"
- not galera_external_restart_handlers | bool
register: galera_restart
until: galera_restart | success
retries: 3
delay: 5
# notifies are only fired when status is "changed"
changed_when: galera_restart | failed
failed_when: false
notify:
- "Remove stale .sst"
listen: "Restart all mysql"
- name: Restart xinetd
service:
name: xinetd

View File

@ -40,8 +40,6 @@
- ansible_service_mgr == 'systemd'
- mysql_running.rc != 0
- mysql_started | failed
# galera_new_cluster is not applicable for SUSE
- ansible_pkg_mgr != 'zypper'
register: start_cluster
failed_when: false
tags:
@ -55,7 +53,6 @@
- mysql_started | failed
- start_cluster | failed
- mysql_running.rc != 0
- ansible_pkg_mgr != 'zypper'
tags:
- galera-bootstrap
@ -74,8 +71,6 @@
when:
- mysql_running.rc != 0
- mysql_started | failed
# galera_new_cluster is not applicable for SUSE
- ansible_pkg_mgr == 'zypper'
- name: Wait for operational state
command: mysql --silent --skip-column-names -e 'SHOW STATUS LIKE "wsrep_evs_state"'

View File

@ -13,16 +13,54 @@
# See the License for the specific language governing permissions and
# limitations under the License.
- name: Update the local file system CRUD
file:
src: "{{ item.src|default(omit) }}"
path: "{{ item.path }}"
state: "{{ item.state }}"
force: "{{ item.force|default(omit) }}"
with_items:
- { path: "/etc/mysql", state: "directory" }
- { path: "/etc/mysql/conf.d", state: "directory" }
- { src: "/etc/mysql/conf.d", path: "/etc/my.cnf.d", state: "link", force: true }
- { src: "/etc/mysql/my.cnf", path: "/etc/my.cnf", state: "link", force: true }
- name: Add galera gpg-keys
block:
- name: Add keys (primary keyserver)
rpm_key:
state: present
key: "{{ item.keyserver }}/{{ item.key_name }}"
register: add_keys
until: add_keys|success
retries: 5
delay: 2
with_items: "{{ galera_gpg_keys }}"
rescue:
- name: Add keys (fallback keyserver)
rpm_key:
state: present
key: "{{ item.fallback_keyserver }}/{{ item.key_name }}"
register: add_keys
until: add_keys|success
retries: 5
delay: 2
with_items: "{{ galera_gpg_keys }}"
when: item.fallback_keyserver is defined
- name: Add galera repo
zypper_repository:
refresh: yes
name: "{{ item.name }}"
repo: "{{ item.uri }}"
auto_import_keys: yes
register: zypper_repository_added
with_items: "{{ galera_repo }}"
tags:
- galera-repos
name: "{{ galera_repo.name }}"
description: "{{ galera_repo.description }}"
repo: "{{ galera_repo.baseurl }}"
autorefresh: yes
auto_import_keys: no
enabled: yes
register: add_repos
until: add_repos | success
retries: 5
delay: 2
- name: Install galera_server role remote packages (zypper)
zypper:
@ -37,4 +75,34 @@
- galera_server-config
- galera-enable
- name: Create mariadb systemd service config dir
file:
path: "/etc/systemd/system/{{ galera_mariadb_service_name }}.service.d/"
state: "directory"
group: "root"
owner: "root"
mode: "0755"
# See comments above 'galera_disable_privatedevices' in defaults/main.yml for
# links to relevant bugs and discussion.
- name: Remove PrivateDevices systemd options when in container
template:
src: without-privatedevices.conf.j2
dest: "/etc/systemd/system/{{ galera_mariadb_service_name }}.service.d/without-privatedevices.conf"
register: mariadb_private_devices
when:
- ansible_pkg_mgr == 'zypper'
notify:
- Reload the systemd daemon
- Restart mysql
tags:
- galera-config
# TODO: remove name argument when we upgrade to ansible 2.4
- name: Reload the systemd daemon
systemd:
daemon_reload: yes
name: "{{ galera_mariadb_service_name }}"
when: mariadb_private_devices|changed
- include: galera_secure_mysql.yml mysql_securely_configured='/etc/my.cnf.d/suse_configured'

View File

@ -82,7 +82,6 @@
insertafter: '^export HOME=/etc/mysql/'
line: '[ -r /etc/default/mariadb ] && . /etc/default/mariadb'
backup: yes
when: ansible_pkg_mgr != 'zypper'
tags:
- galera-config
@ -91,7 +90,6 @@
src: "mysql_defaults.j2"
dest: "/etc/default/mariadb"
mode: "0644"
when: ansible_pkg_mgr != 'zypper'
notify:
- Restart all mysql
- Reload the systemd daemon

View File

@ -35,8 +35,6 @@
- name: Stop mysql
command: /etc/init.d/mysql stop
changed_when: false
# SUSE always uses the systemd service
when: ansible_pkg_mgr != "zypper"
tags:
- galera-upgrade

View File

@ -51,7 +51,8 @@ galera_server_upgrade_packages_remove:
galera_mariadb_service_name: "mariadb"
_galera_repo_url: "http://yum.mariadb.org/{{ galera_major_version }}/centos/7/x86_64"
# TODO(evrardjp): Unfreeze version to 10.1 branch when clustering issue is solved.
_galera_repo_url: "https://downloads.mariadb.com/MariaDB/mariadb-{{ galera_major_version }}.{{ galera_minor_version }}/yum/centos7-amd64"
_galera_repo:
name: MariaDB
description: "MariaDB Repo"

View File

@ -13,42 +13,66 @@
# See the License for the specific language governing permissions and
# limitations under the License.
_galera_repo:
- name: "OBS:server_database"
uri: "http://download.opensuse.org/repositories/server:/database/openSUSE_Leap_{{ ansible_distribution_version }}"
# Galera GPG Keys
_galera_gpg_keys:
- key_name: 'RPM-GPG-KEY-MariaDB'
keyserver: 'https://yum.mariadb.org'
fallback_keyserver: 'https://yum.mariadb.org'
# Default private device setting
_galera_disable_privatedevices: yes
galera_server_required_distro_packages:
- galera-3
- galera
- gpg2
- libaio-devel
- libstdc++-devel
- libgcrypt-devel
- libmysqlclient-devel
- mariadb-client
- qpress
- MariaDB-client
- MariaDB-devel
- xinetd
galera_etc_conf_file: "/etc/my.cnf"
galera_etc_include_dir: "/etc/my.cnf.d"
galera_var_run_socket: "/var/run/mysql/mysql.sock"
galera_etc_conf_file: "/etc/mysql/my.cnf"
galera_etc_include_dir: "/etc/mysql/conf.d"
galera_var_run_socket: "/var/lib/mysql/mysql.sock"
_galera_mariadb_server_package: "mariadb"
galera_server_upgrade_packages_remove:
- "{{ galera_mariadb_server_package }}"
- galera-3
galera_mariadb_service_name: "mysql"
_galera_mariadb_server_package: "MariaDB-server"
galera_server_mariadb_distro_packages:
- which
- "{{ galera_mariadb_server_package }}"
- mariadb-galera
- percona-toolkit
- MariaDB-shared
- rsync
- socat
galera_wsrep_provider: "/usr/lib64/galera-3/libgalera_smm.so"
# Conflicting packages with those from the MariaDB repository
galera_server_mariadb_distro_packages_remove:
- libmariadb-devel
- mariadb
- mariadb-client
- mariadb-tools
# The packages to uninstall during an upgrade from a previous version
galera_server_upgrade_packages_remove:
- MariaDB-Galera-server
- MariaDB-server
galera_mariadb_service_name: "mariadb"
# TODO(evrardjp): Unfreeze version to 10.1 branch when clustering issue is solved.
_galera_repo_url: "https://downloads.mariadb.com/MariaDB/mariadb-{{ galera_major_version }}.{{ galera_minor_version }}/yum/opensuse42-amd64"
_galera_repo:
name: MariaDB
description: "MariaDB Repo"
baseurl: "{{ galera_repo_url }}"
gpgkey: "https://yum.mariadb.org/RPM-GPG-KEY-MariaDB"
galera_server_percona_distro_packages:
- qpress
- percona-toolkit
- percona-xtrabackup
galera_wsrep_provider: "/usr/lib64/galera/libgalera_smm.so"
_use_percona_upstream: yes
# NOTE(hwoarang): The default one provided in vars/main.yml depends on

View File

@ -107,7 +107,8 @@ _galera_percona_xtrabackup_repo:
state: "present"
filename: "Percona"
_galera_repo_url: "http://mirror.rackspace.com/mariadb/repo/{{ galera_major_version }}/ubuntu"
# TODO(evrardjp): Unfreeze version to 10.1 branch when clustering issue is solved.
_galera_repo_url: "https://downloads.mariadb.com/MariaDB/mariadb-{{ galera_major_version }}.{{ galera_minor_version }}/repo/ubuntu"
_galera_repo:
repo: "deb {{ galera_repo_url }} {{ ansible_distribution_release }} main"
state: "present"

View File

@ -19,11 +19,17 @@
- openstack-ansible-functional-centos-7
- openstack-ansible-functional-opensuse-423
- openstack-ansible-functional-ubuntu-xenial
- openstack-ansible-upgrade-ubuntu-xenial
# TODO(evrardjp): Reinstate this when all the 10.1.31
# issues patches have been merged in galera_server
# and galera_client
# - openstack-ansible-upgrade-ubuntu-xenial
gate:
jobs:
- openstack-ansible-linters
- openstack-ansible-functional-centos-7
- openstack-ansible-functional-opensuse-423
- openstack-ansible-functional-ubuntu-xenial
- openstack-ansible-upgrade-ubuntu-xenial
# TODO(evrardjp): Reinstate this when all the 10.1.31
# issues patches have been merged in galera_server
# and galera_client
# - openstack-ansible-upgrade-ubuntu-xenial