Optimize CentOS Erlang installation

This patch optimizes the Erlang/RabbitMQ installation on CentOS. It
includes:

  * Installing RabbitMQ from RabbitMQ's repository
  * Installing Erlang all-in-one from RabbitMQ's repository
  * Remove old versionlocks before applying new ones (fixes bug)

The erlang-solutions repository is hosted in eastern Europe and has
high latency to the USA and western Europe. Installing from that
repository brings in over 80 individual packages, which causes
additional delays in the role.

The Erlang all-in-one package from RabbitMQ's repository contains
only the Erlang bits that RabbitMQ needs. Also, it has HiPE enabled
by default, which is recommended by RabbitMQ developers for
better performance.

Closes-Bug: 1712596
Change-Id: I1bfcc96f353bd27b0004d93e250bb041eee48bdb
(cherry picked from commit 05370b0394)
This commit is contained in:
Major Hayden 2017-09-12 09:59:47 -06:00
parent e148ca4fe3
commit d7ae447f5e
6 changed files with 48 additions and 43 deletions

View File

@ -54,7 +54,7 @@ rabbitmq_erlang_repo_url: "{{ _rabbitmq_erlang_repo_url }}"
rabbitmq_erlang_repo: "{{ _rabbitmq_erlang_repo }}"
# Choose file, distro, external_repo for rabbitmq_install_method.
rabbitmq_install_method: "file"
rabbitmq_install_method: "{{ _rabbitmq_install_method }}"
# Name of the rabbitmq cluster
rabbitmq_cluster_name: rabbitmq_cluster1

View File

@ -0,0 +1,15 @@
---
features:
- |
The installation of Erlang and is now optimized for CentOS.
Erlang 19.x is now installed via a single package that is maintained by
RabbitMQ developers and it provides the minimal features required for
RabbitMQ to function. It also includes HiPE support for increased
performance.
The version of Erlang is kept constant using yum's versionlock plugin.
- |
RabbitMQ is now installed via an RPM repository provided by RabbitMQ
developers. The version is kept constant via yum's versionlock plugin.
This allows the tasks to lock the RabbitMQ version to a particular
revision and prevent changes to that version.

View File

@ -54,7 +54,7 @@
sslverify: "{{ rabbitmq_repo.sslverify | default(omit) }}"
sslcacert: "{{ rabbitmq_repo.sslcacert | default(omit) }}"
when:
- rabbitmq_install_method != 'file'
- rabbitmq_install_method == 'external_repo'
tags:
- rabbitmq-repos
@ -70,6 +70,8 @@
gpgkey: "{{ rabbitmq_erlang_repo.gpgkey | default(omit) }}"
sslverify: "{{ rabbitmq_erlang_repo.sslverify | default(omit) }}"
sslcacert: "{{ rabbitmq_erlang_repo.sslcacert | default(omit) }}"
when:
- rabbitmq_install_method == 'external_repo'
tags:
- rabbitmq-repos
@ -80,6 +82,8 @@
--setopt="{{ item.name }}.priority={{ item.priority }}"
changed_when: false
with_items:
- name: "{{ rabbitmq_repo.name }}"
priority: 40
- name: "{{ rabbitmq_erlang_repo.name }}"
priority: 40
tags:
@ -92,41 +96,34 @@
tags:
- rabbitmq-yum-packages
- name: Lock version of erlang packages
command: yum versionlock add erlang*19.3*
register: yum_versionlock_erlang
changed_when: "yum_versionlock_erlang.stdout.find('versionlock added: 0') == -1"
- name: Gather a list of the currently locked versions
command: yum versionlock list
register: yum_versionlock_list
tags:
- rabbitmq-yum-packages
- name: Install RabbitMQ package dependencies
package:
pkg: "{{ rabbitmq_dependencies }}"
state: "{{ rabbitmq_package_state }}"
register: install_packages
until: install_packages|success
retries: 5
delay: 2
- name: Lock package versions
shell: |
yum versionlock delete {{ item.pkg_name }}
yum versionlock add {{ item.pkg_spec }}
args:
warn: no
when:
- item.pkg_spec not in yum_versionlock_list.stdout
with_items:
- { 'pkg_name': 'erlang', 'pkg_spec': "erlang-19*" }
- { 'pkg_name': 'rabbitmq-server', 'pkg_spec': "rabbitmq-server-{{ rabbitmq_release_version }}*" }
tags:
- rabbitmq-yum-packages
# NOTE(mhayden): With the version locks applied, this step will install
# the correct version of RabbitMQ along with the correct version of the
# all-in-one erlang package.
- name: Install RabbitMQ packages
package:
name: "{{ (rabbitmq_install_method == 'file') | ternary(rabbitmq_package_path, rabbitmq_distro_packages) }}"
name: "{{ rabbitmq_distro_packages }}"
state: "{{ rabbitmq_package_state }}"
register: install_rabbitmq
tags:
- rabbitmq-package-rpm
- rabbitmq-yum-packages
- name: Install RabbitMQ package dependencies for external_repo usage
package:
pkg: "{{ rabbitmq_mirror_dependencies }}"
state: "{{ rabbitmq_package_state }}"
register: install_packages
until: install_packages|success
retries: 5
delay: 2
when:
- rabbitmq_install_method != 'file'
tags:
- rabbitmq-yum-packages

View File

@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
_rabbitmq_install_method: file
_rabbitmq_package_url: "http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server_3.6.9-1_all.deb"
_rabbitmq_package_version: "{{ rabbitmq_package_url.split('/')[-1].split('_')[1] }}"
_rabbitmq_release_version: "{{ rabbitmq_package_version.split('-')[0] }}"

View File

@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
_rabbitmq_install_method: external_repo
_rabbitmq_package_url: "http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-3.6.9-1.el7.noarch.rpm"
_rabbitmq_package_version: "{{ rabbitmq_package_url.split('/')[-1].rsplit('.', 1)[0] }}"
_rabbitmq_release_version: "{{ rabbitmq_package_version.split('-')[2] }}"
@ -22,15 +23,14 @@ _rabbitmq_package_path: "/opt/rabbitmq-server.rpm"
_rabbitmq_gpg_keys:
- key_name: 'rabbitmq-release-signing-key.asc'
keyserver: 'https://www.rabbitmq.com'
- key_name: 'erlang_solutions.asc'
keyserver: 'https://packages.erlang-solutions.com/ubuntu'
- key_name: 'gpgkey'
keyserver: 'https://packagecloud.io/rabbitmq/rabbitmq-server/'
_rabbitmq_repo_url: "https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearch"
_rabbitmq_repo:
name: rabbitmq_rabbitmq-server
description: "RabbitMQ Server Rolling Repository"
baseurl: "{{ rabbitmq_repo_url }}"
repo_gpgcheck: yes
state: "present"
gpgkey: "https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey"
filename: RabbitMQ
@ -38,23 +38,14 @@ _rabbitmq_repo:
#sslverify: no
#sslcacert: /etc/pki/tls/certs/ca-bundle.crt
_rabbitmq_erlang_repo_url: "https://packages.erlang-solutions.com/rpm/centos/$releasever/$basearch"
_rabbitmq_erlang_repo_url: "https://dl.bintray.com/rabbitmq/rpm/erlang/19/el/7"
_rabbitmq_erlang_repo:
name: rabbitmq_els-erlang
description: "Erlang Solutions Erlang"
description: "RabbitMQ Erlang Packages from Bintray"
baseurl: "{{ rabbitmq_erlang_repo_url }}"
repo_gpgcheck: no
state: "present"
filename: els-erlang
rabbitmq_dependencies:
- erlang-hipe
- openssl
- socat
rabbitmq_mirror_dependencies:
- pygpgme
- yum-utils
rabbitmq_distro_packages:
- openssl
- rabbitmq-server

View File

@ -16,6 +16,7 @@
# Even though we install the rabbitmq-server from the openSUSE repositories
# (the Ocata OBS project) we still add these here in case we use them in the
# future.
_rabbitmq_install_method: file
_rabbitmq_package_url: "http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-3.6.9-1.suse.noarch.rpm"
_rabbitmq_package_version: "{{ rabbitmq_package_url.split('/')[-1].rsplit('.', 1)[0] }}"
_rabbitmq_release_version: "{{ rabbitmq_package_version.split('-')[2] }}"