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:
parent
0113603034
commit
fdaf169e1e
defaults
meta
releasenotes/notes
tasks
galera_bootstrap.ymlgalera_install_apt.ymlgalera_install_yum.ymlgalera_post_install.ymlgalera_upgrade_check_apt.ymlgalera_upgrade_check_yum.ymlgalera_upgrade_post.ymlgalera_upgrade_pre.yml
templates
tests
vars
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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``.
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 %}
|
||||
|
@ -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
|
||||
|
||||
|
6
templates/systemd.timeout.conf.j2
Normal file
6
templates/systemd.timeout.conf.j2
Normal 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
|
22
tests/galera_server-overrides.yml
Normal file
22
tests/galera_server-overrides.yml
Normal 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"
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user