From 5136160186fbc0b18a94222ad2fbc21162bcdf6d Mon Sep 17 00:00:00 2001 From: Michael Gugino Date: Wed, 4 May 2016 11:26:04 -0400 Subject: [PATCH] Implement Xenial Support This commit implements support for Ubuntu 16.04 Xenial. Changes include renaming several variables from galera_* to percona_* for clarity. The reason for this change is that 16.04 will be using distribution provided packages for percona-xtrabackup. Mariadb 10.0 packages are available for Ubuntu 16.04, so those packages and installations procedures will remain unchanged. Depends-On: Iab5485529cf14933fd7f37430d234a5c41185c18 Change-Id: I4baeb2eddf137619ffedba2f9efd61b7bd142f92 --- defaults/main.yml | 26 +++---- files/policy-rc.d | 3 +- handlers/main.yml | 3 +- ...ement-xenial-support-0de6444c53337d46.yaml | 12 +++ tasks/galera_bootstrap.yml | 10 +++ tasks/galera_install_apt.yml | 8 +- tasks/galera_pre_install.yml | 28 +++++-- vars/ubuntu-14.04.yml | 16 ++++ vars/ubuntu-16.04.yml | 73 +++++++++++++++++++ 9 files changed, 148 insertions(+), 31 deletions(-) create mode 100644 releasenotes/notes/implement-xenial-support-0de6444c53337d46.yaml create mode 100644 vars/ubuntu-16.04.yml diff --git a/defaults/main.yml b/defaults/main.yml index 56261bd0..0da9c2ae 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -68,17 +68,6 @@ galera_wsrep_sst_auth_password: "{{ galera_root_password }}" # xtrabackup parallel/compression/sync threads galera_xtrabackup_threads: 4 -# Galera GPG Keys -galera_gpg_keys: - - key_name: 'mariadb' - keyserver: 'hkp://keyserver.ubuntu.com:80' - fallback_keyserver: 'hkp://p80.pool.sks-keyservers.net:80' - hash_id: '0xcbcb082a1bb943db' - - key_name: 'percona-xtrabackup' - keyserver: 'hkp://keyserver.ubuntu.com:80' - fallback_keyserver: 'hkp://p80.pool.sks-keyservers.net:80' - hash_id: '0x1c4cbdcdcd2efd2a' - # Repositories galera_apt_repo_url: "https://mirror.rackspace.com/mariadb/repo/10.0/ubuntu" galera_apt_repo: @@ -90,15 +79,20 @@ galera_apt_percona_xtrabackup_repo: repo: "deb {{ galera_apt_percona_xtrabackup_url }} {{ ansible_distribution_release }} main" state: "present" -galera_package_url: "https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.2.13/binary/debian/trusty/x86_64/percona-xtrabackup-22_2.2.13-1.trusty_amd64.deb" -galera_package_sha256: "2f58eedefa905583f0650f77bb2b149139c4066c7fb690202124fe5c7ac83e9e" -galera_package_path: "/opt/{{ galera_package_url | basename }}" +percona_package_path: "/opt/{{ percona_package_url | basename }}" galera_apt_pinned_packages: [{ package: "*", release: MariaDB, priority: "1001" }] -# Validate SSL certificates when downloading the galera deb above +# Validate SSL certificates when downloading the percona deb above # May be set to "no" when proxy server is intercepting the certificates. -galera_package_download_validate_certs: "yes" +percona_package_download_validate_certs: "yes" + +#There is no package currently provided for Xenial, but vivid uses the +#same libraries and installs without issue. +qpress_deb_url: https://repo.percona.com/apt/pool/main/q/qpress/qpress_11-1.vivid_amd64.deb +qpress_package_download_validate_certs: yes +qpress_package_sha256: "54c02ae825b5c08bfae0792b23390b1577d7a26cadfb321384377bde31465959" +qpress_package_path: "/opt/{{ qpress_deb_url | basename }}" galera_pip_packages: - MySQL-python diff --git a/files/policy-rc.d b/files/policy-rc.d index ec21cabf..fb976ad1 100644 --- a/files/policy-rc.d +++ b/files/policy-rc.d @@ -1,3 +1,2 @@ -#!/bin/sh -echo "All runlevel operations denied by policy" >&2 +#!/bin/bash exit 101 diff --git a/handlers/main.yml b/handlers/main.yml index af0241a8..f80f8242 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -22,7 +22,8 @@ args: "{{ (not galera_existing_cluster | bool and inventory_hostname == galera_server_bootstrap_node) or (galera_cluster_members | length == 1) | ternary('--wsrep-new-cluster', '') }}" environment: MYSQLD_STARTUP_TIMEOUT: 180 - when: not galera_running_and_bootstrapped | bool + when: + - not galera_running_and_bootstrapped | bool register: galera_restart until: galera_restart | success retries: 3 diff --git a/releasenotes/notes/implement-xenial-support-0de6444c53337d46.yaml b/releasenotes/notes/implement-xenial-support-0de6444c53337d46.yaml new file mode 100644 index 00000000..c26241fb --- /dev/null +++ b/releasenotes/notes/implement-xenial-support-0de6444c53337d46.yaml @@ -0,0 +1,12 @@ +--- +features: + - Implemented support for Ubuntu 16.04 Xenial. percona-xtrabackup + packages will be installed from distro repositories, instead of + upstream percona repositories due to lack of available packages + upstream at the time of implementing this feature. +deprecations: + - galera_package_url changed to percona_package_url for clarity + - galera_package_sha256 changed to percona_package_sha256 for clarity + - galera_package_path changed to percona_package_path for clarity + - galera_package_download_validate_certs changed to + percona_package_download_validate_certs for clarity diff --git a/tasks/galera_bootstrap.yml b/tasks/galera_bootstrap.yml index f32d666f..ab771fe4 100644 --- a/tasks/galera_bootstrap.yml +++ b/tasks/galera_bootstrap.yml @@ -24,11 +24,21 @@ state: restarted args: "--wsrep-new-cluster" when: + - not using_mysql_init | bool - inventory_hostname == galera_server_bootstrap_node - mysql_running.rc != 0 tags: - galera-bootstrap +- name: Start cluster with wsrep init + shell: "/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 diff --git a/tasks/galera_install_apt.yml b/tasks/galera_install_apt.yml index f4d39d1c..b8e050b5 100644 --- a/tasks/galera_install_apt.yml +++ b/tasks/galera_install_apt.yml @@ -70,11 +70,11 @@ - percona-xtrabackup - xtrabackup tags: - - galera-apt-packages + - percona-apt-packages -- name: Install galera package +- name: Install percona packages upstream apt: - deb: "{{ galera_package_path }}" + deb: "{{ percona_package_path }}" force: yes tags: - - galera-apt-packages \ No newline at end of file + - galera-apt-packages diff --git a/tasks/galera_pre_install.yml b/tasks/galera_pre_install.yml index 65bcba0a..7002663f 100644 --- a/tasks/galera_pre_install.yml +++ b/tasks/galera_pre_install.yml @@ -73,7 +73,7 @@ tags: - galera-apt-keys -- name: Add galera repo(s) +- name: Add galera repo apt_repository: repo: "{{ item.repo }}" state: "{{ item.state }}" @@ -83,23 +83,35 @@ delay: 2 with_items: - "{{ galera_apt_repo }}" - - "{{ galera_apt_percona_xtrabackup_repo }}" tags: - galera-repos -- name: Download the galera package +- name: Add percona repo + apt_repository: + repo: "{{ item.repo }}" + state: "{{ item.state }}" + register: add_repos + until: add_repos|success + retries: 5 + delay: 2 + with_items: + - "{{ galera_apt_percona_xtrabackup_repo }}" + tags: + - percona-repos + +- name: Download the percona package get_url: - url: "{{ galera_package_url }}" - dest: "{{ galera_package_path }}" + url: "{{ percona_package_url }}" + dest: "{{ percona_package_path }}" mode: "0644" - sha256sum: "{{ galera_package_sha256 }}" - validate_certs: "{{ galera_package_download_validate_certs }}" + sha256sum: "{{ percona_package_sha256 }}" + validate_certs: "{{ percona_package_download_validate_certs }}" register: package_download retries: 3 delay: 10 until: package_download|success tags: - - galera-apt-packages + - percona-apt-packages - name: Prevent galera from starting on install copy: diff --git a/vars/ubuntu-14.04.yml b/vars/ubuntu-14.04.yml index 1cf3e4a0..2e022bc5 100644 --- a/vars/ubuntu-14.04.yml +++ b/vars/ubuntu-14.04.yml @@ -13,6 +13,17 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Galera GPG Keys +galera_gpg_keys: + - key_name: 'mariadb' + keyserver: 'hkp://keyserver.ubuntu.com:80' + fallback_keyserver: 'hkp://p80.pool.sks-keyservers.net:80' + hash_id: '0xcbcb082a1bb943db' + - key_name: 'percona-xtrabackup' + keyserver: 'hkp://keyserver.ubuntu.com:80' + fallback_keyserver: 'hkp://p80.pool.sks-keyservers.net:80' + hash_id: '0x1c4cbdcdcd2efd2a' + galera_pre_apt_packages: - apt-transport-https - debconf-utils @@ -50,3 +61,8 @@ galera_debconf_items: name: "{{ galera_mariadb_server_package }}" value: "{{ galera_root_password }}" vtype: "string" + +using_mysql_init: no + +percona_package_url: "https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.2.13/binary/debian/trusty/x86_64/percona-xtrabackup-22_2.2.13-1.trusty_amd64.deb" +percona_package_sha256: "2f58eedefa905583f0650f77bb2b149139c4066c7fb690202124fe5c7ac83e9e" diff --git a/vars/ubuntu-16.04.yml b/vars/ubuntu-16.04.yml new file mode 100644 index 00000000..087afd0c --- /dev/null +++ b/vars/ubuntu-16.04.yml @@ -0,0 +1,73 @@ +--- +# 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 GPG Keys +galera_gpg_keys: + - key_name: 'mariadb' + keyserver: 'hkp://keyserver.ubuntu.com:80' + fallback_keyserver: 'hkp://p80.pool.sks-keyservers.net:80' + hash_id: '0xF1656F24C74CD1D8' + - key_name: 'percona-xtrabackup' + keyserver: 'hkp://keyserver.ubuntu.com:80' + fallback_keyserver: 'hkp://p80.pool.sks-keyservers.net:80' + hash_id: '0x1c4cbdcdcd2efd2a' + +galera_pre_apt_packages: + - apt-transport-https + - debconf-utils + - libaio1 + - libc6 + - libdbd-mysql-perl + - libgcc1 + - libgcrypt20 + - libstdc++6 + - python-software-properties + - software-properties-common + +# 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_server_package: "mariadb-galera-server-10.0" + +# NB This is specifically galera_packages as these packages only get installed +# during the galera play - this is because of the preseed task and the service +# startup control used when installing mariadb-galera-server and galera. +galera_apt_packages: + - mariadb-client + - "{{ galera_mariadb_server_package }}" + - galera-3 + - rsync + - socat + - qpress + +galera_debconf_items: + - question: "mysql-server/root_password" + name: "{{ galera_mariadb_server_package }}" + value: "{{ galera_root_password }}" + vtype: "string" + - question: "mysql-server/root_password_again" + name: "{{ galera_mariadb_server_package }}" + value: "{{ galera_root_password }}" + vtype: "string" + +using_mysql_init: yes + +percona_package_url: "https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.2.13/binary/debian/vivid/x86_64/percona-xtrabackup-22_2.2.13-1.vivid_amd64.deb" +percona_package_sha256: "3e3b15b2b261da004f7c4419ae427af9ec5707b40be1effe22a0142311c51856" + +# TODO: update this to xenial if the repo ever gets created. +galera_apt_percona_xtrabackup_repo: + repo: "deb {{ galera_apt_percona_xtrabackup_url }} vivid main" + state: "present"