Install MariaDB 10.1 server

Update repos and packages to install the server for MariaDB 10.1, the
current stable release.

Several improvements have been made to improve the upgrade process and
an upgrade from 10.0 has been included in the test playbooks.

Make use of the yum_repository module for installing on yum based
systems and give the apt repository files consistent names, 'MariaDB'
and 'Percona' for easier maintenance and handling of upgrades going
forward.

Depends-On: I8939703f26e5d8adc393b984266f4cad7a6e0b4c
Change-Id: Ib6409f1fcf4a664b65dbe01372a19509d02d70a4
This commit is contained in:
Jimmy McCrory 2016-11-23 00:38:54 -08:00
parent 0113603034
commit fdaf169e1e
19 changed files with 162 additions and 99 deletions

View File

@ -42,6 +42,8 @@ galera_force_change_cluster_name: False
galera_server_distro_package_pins: []
galera_debconf_items: []
galera_server_percona_distro_packages: []
galera_mariadb_server_package: "{{ _galera_mariadb_server_package }}"
galera_repo_url: "{{ _galera_repo_url }}"
galera_existing_cluster: true
@ -101,5 +103,3 @@ galera_debian_cnf_overrides: {}
# the cluster will be used which is something to note if deploying galera on different
# hardware.
# galera_max_connections: 500
using_mysql_init: no

View File

@ -18,7 +18,7 @@ galaxy_info:
description: Installation galera server
company: Rackspace
license: Apache2
min_ansible_version: 1.9
min_ansible_version: 2.1
platforms:
- name: Ubuntu
versions:

View File

@ -0,0 +1,10 @@
---
upgrade:
- The galera_server role now installs MariaDB server version 10.1.
- For systems using the APT package manager, the sources files for
the MariaDB and Percona repos now have consistent names,
'MariaDB.list' and 'Percona.list'.
- The ``galera_mariadb_apt_server_package`` and ``galera_mariadb_yum_server_package``
variables have been renamed to ``galera_mariadb_server_package``.
- The ``galera_apt_repo_url`` and ``galera_yum_repo_url`` variables have been renamed
to ``galera_repo_url``.

View File

@ -18,27 +18,40 @@
num_retries: 1
wait_delay: 3
- name: Start galera cluster
command: galera_new_cluster
when:
- ansible_service_mgr == 'systemd'
- inventory_hostname == galera_server_bootstrap_node
- mysql_running.rc != 0
register: start_cluster
failed_when: false
tags:
- galera-bootstrap
# TODO: Remove this task after 10.0 is removed from upgrade path
- name: Start cluster with wsrep init fallback
command: "/etc/init.d/mysql bootstrap"
when:
- ansible_service_mgr == 'systemd'
- start_cluster | failed
- inventory_hostname == galera_server_bootstrap_node
- mysql_running.rc != 0
tags:
- galera-bootstrap
- name: Start cluster with wsrep
service:
name: mysql
state: restarted
arguments: "--wsrep-new-cluster"
when:
- not using_mysql_init | bool
- ansible_service_mgr != 'systemd'
- inventory_hostname == galera_server_bootstrap_node
- mysql_running.rc != 0
tags:
- galera-bootstrap
- name: Start cluster with wsrep init
command: "/etc/init.d/mysql bootstrap"
when:
- inventory_hostname == galera_server_bootstrap_node
- mysql_running.rc != 0
- using_mysql_init | bool
tags:
- galera-bootstrap
- name: Wait for operational state
command: mysql --silent --skip-column-names -e 'SHOW STATUS LIKE "wsrep_evs_state"'
register: galera_check_wait
@ -62,3 +75,8 @@
tags:
- galera-operational
- galera-bootstrap
- include: galera_upgrade_post.yml
static: no
when:
- galera_upgrade | bool

View File

@ -58,29 +58,39 @@
tags:
- galera-apt-keys
- name: Remove old repos
lineinfile:
dest: "/etc/apt/sources.list.d/{{ item.name }}.list"
regexp: "^((?!{{ item.repo }}).*)$"
state: absent
with_items:
- { name: "MariaDB", repo: "{{ galera_repo.repo }}" }
- { name: "Percona", repo: "{{ galera_percona_xtrabackup_repo.repo }}" }
tags:
- galera-client-repos
- percona-repos
- name: Add galera repo
apt_repository:
repo: "{{ item.repo }}"
state: "{{ item.state }}"
repo: "{{ galera_repo.repo }}"
filename: MariaDB
state: "{{ galera_repo.state }}"
register: add_repos
until: add_repos|success
retries: 5
delay: 2
with_items:
- "{{ galera_repo }}"
tags:
- galera-repos
- name: Add percona repo
apt_repository:
repo: "{{ item.repo }}"
state: "{{ item.state }}"
repo: "{{ galera_percona_xtrabackup_repo.repo }}"
filename: Percona
state: "{{ galera_percona_xtrabackup_repo.state }}"
register: add_repos
until: add_repos|success
retries: 5
delay: 2
with_items:
- "{{ galera_percona_xtrabackup_repo }}"
when: use_percona_upstream | bool
tags:
- percona-repos

View File

@ -54,26 +54,18 @@
tags:
- galera-gpg-keys
#TODO(cloudnull) Remove this task once we move to Ansible 2.1
# where we can leverage the `yum_repository` module:
# https://docs.ansible.com/ansible/yum_repository_module.html
- name: Add galera repo
copy:
content: |
[{{ item.name }}]
name={{ item.name }}
description={{ item.description }}
baseurl={{ item.baseurl }}
gpgkey={{ item.gpgkey }}
gpgcheck=1
enabled=1
dest: "/etc/yum.repos.d/{{ item.file }}.repo"
yum_repository:
name: "{{ galera_repo.name }}"
description: "{{ galera_repo.description }}"
baseurl: "{{ galera_repo.baseurl }}"
gpgkey: "{{ galera_repo.gpgkey }}"
gpgcheck: yes
enabled: yes
register: add_repos
until: add_repos|success
retries: 5
delay: 2
with_items:
- "{{ galera_repo }}"
tags:
- galera-repos

View File

@ -63,20 +63,16 @@
dest: /etc/init.d/mysql
state: present
insertafter: '^export HOME=/etc/mysql/'
line: '[ -r /etc/default/mysql ] && . /etc/default/mysql'
line: '[ -r /etc/default/mariadb ] && . /etc/default/mariadb'
backup: yes
tags:
- galera-config
# NOTE: (mancdaz) REMOVE "/etc/default/mysql" when running MariaDB 10.1
- name: Apply service defaults
template:
src: "mysql_defaults.j2"
dest: "{{ item }}"
dest: "/etc/default/mariadb"
mode: "0644"
with_items:
- /etc/default/mysql
- /etc/default/mariadb
notify:
- Restart mysql
- Reload the systemd daemon
@ -104,11 +100,14 @@
when:
- ansible_service_mgr == 'systemd'
- name: Apply resource limits (systemd)
- name: Apply systemd options
template:
src: "systemd.limits.conf.j2"
dest: "/etc/systemd/system/mariadb.service.d/limits.conf"
src: "{{ item.src }}"
dest: "/etc/systemd/system/mariadb.service.d/{{ item.dest }}"
mode: "0644"
with_items:
- { src: "systemd.limits.conf.j2", dest: "limits.conf" }
- { src: "systemd.timeout.conf.j2", dest: "timeout.conf" }
when:
- ansible_service_mgr == 'systemd'
notify:
@ -123,8 +122,3 @@
state: absent
tags:
- galera-config
- include: galera_upgrade_post.yml
static: no
when:
- galera_upgrade | bool

View File

@ -14,7 +14,7 @@
# limitations under the License.
- name: Check major galera install version
command: "dpkg -s {{ galera_mariadb_apt_server_package }}"
command: "dpkg -s {{ galera_mariadb_server_package }}"
failed_when: false
register: installed_galera_specific
when:

View File

@ -14,7 +14,7 @@
# limitations under the License.
- name: Check major galera install version
command: "rpm -qi '{{ galera_mariadb_yum_server_package }}'"
command: "rpm -qi '{{ galera_mariadb_server_package }}'"
failed_when: false
register: installed_galera_specific
when:
@ -27,7 +27,7 @@
- name: Check for any galera install version
shell: |
rpm -qa | grep -i "{{ galera_mariadb_yum_server_package }}"
rpm -qa | grep -i "{{ galera_mariadb_server_package }}"
failed_when: false
register: installed_galera_any
when:

View File

@ -13,22 +13,10 @@
# See the License for the specific language governing permissions and
# limitations under the License.
# This is starting MySQL as it may be required to restart the service more than
# once to get it to clean up old service files from the previous version.
# If the service fails to start after 3 attempts the shell command will be failed.
- name: Start MySQL
shell: |
for i in {1..3}; do
/etc/init.d/mysql start || true
if pgrep mysqld; then
exit 0
else
sleep 2
fi
done
echo "Service failed to start"
exit 1
changed_when: false
service:
name: mysql
state: started
tags:
- galera-upgrade

View File

@ -30,10 +30,22 @@
tags:
- galera-upgrade
# Stop through the init script in case the service
# was initially started outside of systemctl.
- name: Stop mysql
command: /etc/init.d/mysql stop
changed_when: false
tags:
- galera-upgrade
# TODO: Remove the following three tasks in Pike
# They're only required during upgrades transitioning to a
# statically named apt sources file.
- name: Find old sources
command: >
grep -rnil maria /etc/apt/sources.list.d/*
grep -rnil maria /etc/apt/sources.list.d/ --exclude MariaDB.list
changed_when: false
failed_when: false
register: old_sources
tags:
- galera-upgrade
@ -45,8 +57,8 @@
state: absent
with_items: "{{ old_sources.stdout_lines | default([]) }}"
tags:
- galera-upgrade
- galera-apt-packages
- galera-upgrade
- galera-apt-packages
- name: Update apt sources (Forced)
apt:
@ -63,11 +75,15 @@
- galera-apt-packages
- name: UN-Install galera-server package
apt:
pkg: "mariadb-galera-server*"
package:
name: "{{ item }}"
state: absent
when:
- ansible_pkg_mgr == 'apt'
with_items:
- "mariadb-galera-server*"
- "mariadb-server*"
- MariaDB-Galera-server
- MariaDB-server
- mysql-common
tags:
- galera-upgrade
- galera-apt-packages

View File

@ -1,6 +1,8 @@
# {{ ansible_managed }}
[mysqld]
wsrep_on = ON
# Path to Galera library
wsrep_provider = /usr/lib/galera/libgalera_smm.so
{% if galera_wsrep_provider_options is defined %}

View File

@ -7,7 +7,7 @@
{%- set calculated_min_connections = all_calculated_max_connections | min %}
{%- set calculated_max_connections = galera_max_connections | default(calculated_min_connections) %}
# How long to wait for successfull mysql startup
# How long to wait for successful mysql startup
# Startup can take a while if it requires a galera state transfer.
MYSQLD_STARTUP_TIMEOUT=1800

View File

@ -0,0 +1,6 @@
# {{ ansible_managed }}
[Service]
# How long to wait for successful mysql startup
# Startup can take a while if it requires a galera state transfer.
TimeoutStartSec=1800

View File

@ -0,0 +1,22 @@
---
# Copyright 2016, Rackspace US, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
galera_server_old_package:
debian:
galera_mariadb_server_package: "mariadb-galera-server-10.0"
galera_repo_url: "http://mirror.rackspace.com/mariadb/repo/10.0/ubuntu"
redhat:
galera_mariadb_server_package: "MariaDB-Galera-server"
galera_repo_url: "http://yum.mariadb.org/10.0/centos/7/x86_64"

View File

@ -19,8 +19,19 @@
# Prepare the containers
- include: common/test-prepare-containers.yml
# Install Galera server
# Install previous version Galera server
- include: common/test-install-galera.yml
vars:
galera_mariadb_server_package: "{{ galera_server_old_package[ansible_os_family | lower]['galera_mariadb_server_package'] }}"
galera_repo_url: "{{ galera_server_old_package[ansible_os_family | lower]['galera_repo_url'] }}"
# Run functional tests
- include: test-galera-server-functional.yml
# Install current version Galera server
- include: common/test-install-galera.yml
vars:
galera_upgrade: true
# Re-run functional tests
- include: test-galera-server-functional.yml

View File

@ -28,24 +28,22 @@ galera_server_required_distro_packages:
- MariaDB-client
- MariaDB-devel
galera_mariadb_yum_server_package: "MariaDB-Galera-server"
_galera_mariadb_server_package: "MariaDB-server"
galera_server_mariadb_distro_packages:
- which
- "{{ galera_mariadb_yum_server_package }}"
- "{{ galera_mariadb_server_package }}"
- MariaDB-shared
- percona-xtrabackup
- percona-toolkit
- rsync
- socat
galera_yum_repo_url: "http://yum.mariadb.org/10.0/centos/7/x86_64"
_galera_repo_url: "http://yum.mariadb.org/10.1/centos/7/x86_64"
galera_repo:
state: "present"
name: MariaDB
description: "MariaDB Repo"
file: MariaDB
baseurl: "{{ galera_yum_repo_url }}"
baseurl: "{{ galera_repo_url }}"
gpgkey: "https://yum.mariadb.org/RPM-GPG-KEY-MariaDB"
galera_percona_xtrabackup_repo:
@ -79,4 +77,3 @@ qpress_arch_sha256:
x86_64: "d6b6b7ca3a5ad4baea34975743106ac54ac746b3e6497d59bce55765d604b697"
use_percona_upstream: yes
using_mysql_init: yes

View File

@ -44,7 +44,7 @@ galera_server_required_distro_packages:
# The package name for mariaDB is set as a variable
# so that it can be used in debconf later in the
# "galera_common" role.
galera_mariadb_apt_server_package: "mariadb-galera-server-10.0"
_galera_mariadb_server_package: "mariadb-server-10.1"
# NB This is specifically galera_server_mariadb_distro_packages as these
# packages only get installed during the galera play - this is because of
@ -53,18 +53,18 @@ galera_mariadb_apt_server_package: "mariadb-galera-server-10.0"
galera_server_mariadb_distro_packages:
- libmariadbclient-dev
- mariadb-client
- "{{ galera_mariadb_apt_server_package }}"
- "{{ galera_mariadb_server_package }}"
- galera-3
- rsync
- socat
galera_debconf_items:
- question: "mysql-server/root_password"
name: "{{ galera_mariadb_apt_server_package }}"
name: "{{ galera_mariadb_server_package }}"
value: "{{ galera_root_password }}"
vtype: "string"
- question: "mysql-server/root_password_again"
name: "{{ galera_mariadb_apt_server_package }}"
name: "{{ galera_mariadb_server_package }}"
value: "{{ galera_root_password }}"
vtype: "string"
@ -100,10 +100,9 @@ galera_percona_xtrabackup_repo:
repo: "deb {{ galera_percona_xtrabackup_repo_url }} {{ ansible_distribution_release }} main"
state: "present"
galera_apt_repo_url: "http://mirror.rackspace.com/mariadb/repo/10.0/ubuntu"
_galera_repo_url: "http://mirror.rackspace.com/mariadb/repo/10.1/ubuntu"
galera_repo:
repo: "deb {{ galera_apt_repo_url }} {{ ansible_distribution_release }} main"
repo: "deb {{ galera_repo_url }} {{ ansible_distribution_release }} main"
state: "present"
use_percona_upstream: no
using_mysql_init: no

View File

@ -44,7 +44,7 @@ galera_server_required_distro_packages:
# The package name for mariaDB is set as a variable
# so that it can be used in debconf later in the
# "galera_common" role.
galera_mariadb_apt_server_package: "mariadb-galera-server-10.0"
_galera_mariadb_server_package: "mariadb-server-10.1"
# NB This is specifically galera_server_mariadb_distro_packages as these
# packages only get installed during the galera play - this is because of
@ -53,18 +53,18 @@ galera_mariadb_apt_server_package: "mariadb-galera-server-10.0"
galera_server_mariadb_distro_packages:
- libmariadbclient-dev
- mariadb-client
- "{{ galera_mariadb_apt_server_package }}"
- "{{ galera_mariadb_server_package }}"
- galera-3
- rsync
- socat
galera_debconf_items:
- question: "mysql-server/root_password"
name: "{{ galera_mariadb_apt_server_package }}"
name: "{{ galera_mariadb_server_package }}"
value: "{{ galera_root_password }}"
vtype: "string"
- question: "mysql-server/root_password_again"
name: "{{ galera_mariadb_apt_server_package }}"
name: "{{ galera_mariadb_server_package }}"
value: "{{ galera_root_password }}"
vtype: "string"
@ -99,16 +99,14 @@ qpress_arch_sha256:
ppc64le: "a31d3e00dbcec9b3f98eae82b261d054d0b80a57f4a38967d0e953811cb082f3"
# Repositories
# TODO: update this to xenial if the repo ever gets created.
galera_percona_xtrabackup_repo_url: "http://repo.percona.com/apt"
galera_percona_xtrabackup_repo:
repo: "deb {{ galera_percona_xtrabackup_repo_url }} {{ ansible_distribution_release }} main"
state: "present"
galera_apt_repo_url: "http://mirror.rackspace.com/mariadb/repo/10.0/ubuntu"
_galera_repo_url: "http://mirror.rackspace.com/mariadb/repo/10.1/ubuntu"
galera_repo:
repo: "deb {{ galera_apt_repo_url }} {{ ansible_distribution_release }} main"
repo: "deb {{ galera_repo_url }} {{ ansible_distribution_release }} main"
state: "present"
use_percona_upstream: no
using_mysql_init: yes