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_server_distro_package_pins: []
galera_debconf_items: [] galera_debconf_items: []
galera_server_percona_distro_packages: [] galera_server_percona_distro_packages: []
galera_mariadb_server_package: "{{ _galera_mariadb_server_package }}"
galera_repo_url: "{{ _galera_repo_url }}"
galera_existing_cluster: true 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 # the cluster will be used which is something to note if deploying galera on different
# hardware. # hardware.
# galera_max_connections: 500 # galera_max_connections: 500
using_mysql_init: no

View File

@ -18,7 +18,7 @@ galaxy_info:
description: Installation galera server description: Installation galera server
company: Rackspace company: Rackspace
license: Apache2 license: Apache2
min_ansible_version: 1.9 min_ansible_version: 2.1
platforms: platforms:
- name: Ubuntu - name: Ubuntu
versions: 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 num_retries: 1
wait_delay: 3 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 - name: Start cluster with wsrep
service: service:
name: mysql name: mysql
state: restarted state: restarted
arguments: "--wsrep-new-cluster" arguments: "--wsrep-new-cluster"
when: when:
- not using_mysql_init | bool - ansible_service_mgr != 'systemd'
- inventory_hostname == galera_server_bootstrap_node - inventory_hostname == galera_server_bootstrap_node
- mysql_running.rc != 0 - mysql_running.rc != 0
tags: tags:
- galera-bootstrap - 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 - name: Wait for operational state
command: mysql --silent --skip-column-names -e 'SHOW STATUS LIKE "wsrep_evs_state"' command: mysql --silent --skip-column-names -e 'SHOW STATUS LIKE "wsrep_evs_state"'
register: galera_check_wait register: galera_check_wait
@ -62,3 +75,8 @@
tags: tags:
- galera-operational - galera-operational
- galera-bootstrap - galera-bootstrap
- include: galera_upgrade_post.yml
static: no
when:
- galera_upgrade | bool

View File

@ -58,29 +58,39 @@
tags: tags:
- galera-apt-keys - 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 - name: Add galera repo
apt_repository: apt_repository:
repo: "{{ item.repo }}" repo: "{{ galera_repo.repo }}"
state: "{{ item.state }}" filename: MariaDB
state: "{{ galera_repo.state }}"
register: add_repos register: add_repos
until: add_repos|success until: add_repos|success
retries: 5 retries: 5
delay: 2 delay: 2
with_items:
- "{{ galera_repo }}"
tags: tags:
- galera-repos - galera-repos
- name: Add percona repo - name: Add percona repo
apt_repository: apt_repository:
repo: "{{ item.repo }}" repo: "{{ galera_percona_xtrabackup_repo.repo }}"
state: "{{ item.state }}" filename: Percona
state: "{{ galera_percona_xtrabackup_repo.state }}"
register: add_repos register: add_repos
until: add_repos|success until: add_repos|success
retries: 5 retries: 5
delay: 2 delay: 2
with_items:
- "{{ galera_percona_xtrabackup_repo }}"
when: use_percona_upstream | bool when: use_percona_upstream | bool
tags: tags:
- percona-repos - percona-repos

View File

@ -54,26 +54,18 @@
tags: tags:
- galera-gpg-keys - 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 - name: Add galera repo
copy: yum_repository:
content: | name: "{{ galera_repo.name }}"
[{{ item.name }}] description: "{{ galera_repo.description }}"
name={{ item.name }} baseurl: "{{ galera_repo.baseurl }}"
description={{ item.description }} gpgkey: "{{ galera_repo.gpgkey }}"
baseurl={{ item.baseurl }} gpgcheck: yes
gpgkey={{ item.gpgkey }} enabled: yes
gpgcheck=1
enabled=1
dest: "/etc/yum.repos.d/{{ item.file }}.repo"
register: add_repos register: add_repos
until: add_repos|success until: add_repos|success
retries: 5 retries: 5
delay: 2 delay: 2
with_items:
- "{{ galera_repo }}"
tags: tags:
- galera-repos - galera-repos

View File

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

View File

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

View File

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

View File

@ -13,22 +13,10 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # 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 - name: Start MySQL
shell: | service:
for i in {1..3}; do name: mysql
/etc/init.d/mysql start || true state: started
if pgrep mysqld; then
exit 0
else
sleep 2
fi
done
echo "Service failed to start"
exit 1
changed_when: false
tags: tags:
- galera-upgrade - galera-upgrade

View File

@ -30,10 +30,22 @@
tags: tags:
- galera-upgrade - 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 - name: Find old sources
command: > command: >
grep -rnil maria /etc/apt/sources.list.d/* grep -rnil maria /etc/apt/sources.list.d/ --exclude MariaDB.list
changed_when: false changed_when: false
failed_when: false
register: old_sources register: old_sources
tags: tags:
- galera-upgrade - galera-upgrade
@ -63,11 +75,15 @@
- galera-apt-packages - galera-apt-packages
- name: UN-Install galera-server package - name: UN-Install galera-server package
apt: package:
pkg: "mariadb-galera-server*" name: "{{ item }}"
state: absent state: absent
when: with_items:
- ansible_pkg_mgr == 'apt' - "mariadb-galera-server*"
- "mariadb-server*"
- MariaDB-Galera-server
- MariaDB-server
- mysql-common
tags: tags:
- galera-upgrade - galera-upgrade
- galera-apt-packages - galera-apt-packages

View File

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

View File

@ -7,7 +7,7 @@
{%- set calculated_min_connections = all_calculated_max_connections | min %} {%- set calculated_min_connections = all_calculated_max_connections | min %}
{%- set calculated_max_connections = galera_max_connections | default(calculated_min_connections) %} {%- 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. # Startup can take a while if it requires a galera state transfer.
MYSQLD_STARTUP_TIMEOUT=1800 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 # Prepare the containers
- include: common/test-prepare-containers.yml - include: common/test-prepare-containers.yml
# Install Galera server # Install previous version Galera server
- include: common/test-install-galera.yml - 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 # Run functional tests
- include: test-galera-server-functional.yml - 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-client
- MariaDB-devel - MariaDB-devel
galera_mariadb_yum_server_package: "MariaDB-Galera-server" _galera_mariadb_server_package: "MariaDB-server"
galera_server_mariadb_distro_packages: galera_server_mariadb_distro_packages:
- which - which
- "{{ galera_mariadb_yum_server_package }}" - "{{ galera_mariadb_server_package }}"
- MariaDB-shared - MariaDB-shared
- percona-xtrabackup - percona-xtrabackup
- percona-toolkit - percona-toolkit
- rsync - rsync
- socat - 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: galera_repo:
state: "present"
name: MariaDB name: MariaDB
description: "MariaDB Repo" description: "MariaDB Repo"
file: MariaDB baseurl: "{{ galera_repo_url }}"
baseurl: "{{ galera_yum_repo_url }}"
gpgkey: "https://yum.mariadb.org/RPM-GPG-KEY-MariaDB" gpgkey: "https://yum.mariadb.org/RPM-GPG-KEY-MariaDB"
galera_percona_xtrabackup_repo: galera_percona_xtrabackup_repo:
@ -79,4 +77,3 @@ qpress_arch_sha256:
x86_64: "d6b6b7ca3a5ad4baea34975743106ac54ac746b3e6497d59bce55765d604b697" x86_64: "d6b6b7ca3a5ad4baea34975743106ac54ac746b3e6497d59bce55765d604b697"
use_percona_upstream: yes 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 # The package name for mariaDB is set as a variable
# so that it can be used in debconf later in the # so that it can be used in debconf later in the
# "galera_common" role. # "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 # NB This is specifically galera_server_mariadb_distro_packages as these
# packages only get installed during the galera play - this is because of # 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: galera_server_mariadb_distro_packages:
- libmariadbclient-dev - libmariadbclient-dev
- mariadb-client - mariadb-client
- "{{ galera_mariadb_apt_server_package }}" - "{{ galera_mariadb_server_package }}"
- galera-3 - galera-3
- rsync - rsync
- socat - socat
galera_debconf_items: galera_debconf_items:
- question: "mysql-server/root_password" - question: "mysql-server/root_password"
name: "{{ galera_mariadb_apt_server_package }}" name: "{{ galera_mariadb_server_package }}"
value: "{{ galera_root_password }}" value: "{{ galera_root_password }}"
vtype: "string" vtype: "string"
- question: "mysql-server/root_password_again" - question: "mysql-server/root_password_again"
name: "{{ galera_mariadb_apt_server_package }}" name: "{{ galera_mariadb_server_package }}"
value: "{{ galera_root_password }}" value: "{{ galera_root_password }}"
vtype: "string" vtype: "string"
@ -100,10 +100,9 @@ galera_percona_xtrabackup_repo:
repo: "deb {{ galera_percona_xtrabackup_repo_url }} {{ ansible_distribution_release }} main" repo: "deb {{ galera_percona_xtrabackup_repo_url }} {{ ansible_distribution_release }} main"
state: "present" 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: galera_repo:
repo: "deb {{ galera_apt_repo_url }} {{ ansible_distribution_release }} main" repo: "deb {{ galera_repo_url }} {{ ansible_distribution_release }} main"
state: "present" state: "present"
use_percona_upstream: no 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 # The package name for mariaDB is set as a variable
# so that it can be used in debconf later in the # so that it can be used in debconf later in the
# "galera_common" role. # "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 # NB This is specifically galera_server_mariadb_distro_packages as these
# packages only get installed during the galera play - this is because of # 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: galera_server_mariadb_distro_packages:
- libmariadbclient-dev - libmariadbclient-dev
- mariadb-client - mariadb-client
- "{{ galera_mariadb_apt_server_package }}" - "{{ galera_mariadb_server_package }}"
- galera-3 - galera-3
- rsync - rsync
- socat - socat
galera_debconf_items: galera_debconf_items:
- question: "mysql-server/root_password" - question: "mysql-server/root_password"
name: "{{ galera_mariadb_apt_server_package }}" name: "{{ galera_mariadb_server_package }}"
value: "{{ galera_root_password }}" value: "{{ galera_root_password }}"
vtype: "string" vtype: "string"
- question: "mysql-server/root_password_again" - question: "mysql-server/root_password_again"
name: "{{ galera_mariadb_apt_server_package }}" name: "{{ galera_mariadb_server_package }}"
value: "{{ galera_root_password }}" value: "{{ galera_root_password }}"
vtype: "string" vtype: "string"
@ -99,16 +99,14 @@ qpress_arch_sha256:
ppc64le: "a31d3e00dbcec9b3f98eae82b261d054d0b80a57f4a38967d0e953811cb082f3" ppc64le: "a31d3e00dbcec9b3f98eae82b261d054d0b80a57f4a38967d0e953811cb082f3"
# Repositories # 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_url: "http://repo.percona.com/apt"
galera_percona_xtrabackup_repo: galera_percona_xtrabackup_repo:
repo: "deb {{ galera_percona_xtrabackup_repo_url }} {{ ansible_distribution_release }} main" repo: "deb {{ galera_percona_xtrabackup_repo_url }} {{ ansible_distribution_release }} main"
state: "present" 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: galera_repo:
repo: "deb {{ galera_apt_repo_url }} {{ ansible_distribution_release }} main" repo: "deb {{ galera_repo_url }} {{ ansible_distribution_release }} main"
state: "present" state: "present"
use_percona_upstream: no use_percona_upstream: no
using_mysql_init: yes