Merge "Install MariaDB 10.1 server"

This commit is contained in:
Jenkins 2016-12-08 22:52:39 +00:00 committed by Gerrit Code Review
commit 3a8ea7d81a
19 changed files with 162 additions and 99 deletions

@ -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

@ -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:

@ -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 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

@ -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

@ -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

@ -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

@ -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:

@ -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:

@ -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

@ -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
@ -45,8 +57,8 @@
state: absent state: absent
with_items: "{{ old_sources.stdout_lines | default([]) }}" with_items: "{{ old_sources.stdout_lines | default([]) }}"
tags: tags:
- galera-upgrade - galera-upgrade
- galera-apt-packages - galera-apt-packages
- name: Update apt sources (Forced) - name: Update apt sources (Forced)
apt: apt:
@ -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

@ -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 %}

@ -8,7 +8,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

@ -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

@ -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 # 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

@ -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

@ -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

@ -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