XtraDB-Cluster
Ansible роль ansible-role-XtraDB-Cluster
Ansible роль для установки кластера Percona XtraDB. Она выполняет следующие задачи:
- установка пакетов
- обеспечение безопасных соединений
- инициализация кластера
Требования
Отсутствуют специальные требования.
Переменные роли
БАЗОВЫЕ
Переменная | По умолчанию | Комментарии (тип) |
---|---|---|
xtradb_bind_address |
- | IP для прослушивания |
xtradb_bind_interface |
eth0 |
Интерфейс, используемый кластером |
xtradb_cluster_name |
foo |
Имя кластера |
xtradb_configured |
xtradb_datadir /configured |
Уникальный идентификатор для идемпотентности |
xtradb_datadir |
/var/lib/mysql |
Директория данных |
xtradb_master_node |
groups[xtradb_nodes_group][0] |
Выбранный узел для роли мастера |
xtradb_mysql_user |
mysql |
Пользователь для запуска galera |
xtradb_nodes_group |
xtradb-cluster-nodes |
Группа узлов, где будет установлен кластер |
xtradb_root_password |
root |
Пароль для пользователя root |
xtradb_root_user |
root |
Пользователь root |
xtradb_secured |
xtradb_datadir /secured |
Уникальный идентификатор для идемпотентности |
xtradb_service |
mysql |
Имя службы Linux |
xtradb_sst_password |
sstpassword |
Пароль для xtradb_sst_user |
xtradb_sst_user |
sstuser |
Пользователь для передачи состояния снимка |
xtradb_swappiness |
0 |
Значение "swappiness". По умолчанию 60. Значение 0 означает, что замена процессов избегается. |
xtradb_databases |
[] | Список имен баз данных для добавления |
xtradb_users |
[] | Список словарей с указанием пользователей для добавления. Смотрите ниже для подробностей. |
xtradb_version |
57 |
Версия пакета XtraDB |
Часть MySQL
Для более подробной информации о значениях, читайте документацию по системным переменным сервера MariaDB.
Переменная | По умолчанию | Комментарии (тип) |
---|---|---|
xtradb_binlog_format |
ROW |
Формат бинарного логирования |
xtradb_character_set_server |
utf |
Набор символов |
xtradb_collation_server |
utf8_general_ci |
Коллация |
xtradb_default_storage_engine |
InnoDB |
Установка движка хранения |
xtradb_innodb_autoinc_lock_mode |
2 |
Существует три возможных значения для параметра конфигурации innodb_autoinc_lock_mode: 0, 1, или 2, соответственно для «традиционного», «последовательного» и «смешанного» режима блокировки. |
xtradb_innodb_buffer_pool_instances |
|
Чтобы включить несколько экземпляров буфера, укажите значение больше 1 (по умолчанию 8) до 64 (максимум). Эта опция применяется только при установке размера innodb_buffer_pool_size на 1 ГБ или более. Общий размер делится между всеми пулами буферов. |
xtradb_innodb_buffer_pool_size |
|
Хорошее значение - 70%-80% от доступной памяти. |
xtradb_innodb_file_format |
|
|
xtradb_innodb_file_format_check |
|
|
xtradb_innodb_file_per_table |
|
|
xtradb_innodb_flush_log_at_trx_commit |
|
При значении innodb_flush_log_at_trx_commit=1 буфер логов сбрасывается при каждом выполнении транзакции на лог-файл и обеспечивает максимальную целостность данных, но также может повлиять на производительность. Значение 2 означает, что буфер логов сбрасывается в файл ОС на каждом завершении транзакции. |
xtradb_innodb_log_buffer_size |
|
Innodb записывает измененные данные в буфер логов, который хранится в памяти, тем самым уменьшая количество операций записи на диск для крупных транзакций. 4 МБ – 8 МБ – хорошее начальное значение. |
xtradb_innodb_log_file_size |
|
Значение по умолчанию было изменено в MySQL 5.6 на 50 МБ из 5 МБ (старое значение), но это все еще слишком маленький размер для многих рабочих нагрузок. |
xtradb_innodb_file_per_table |
on |
innodb_file_per_table включен по умолчанию с MySQL 5.6. Это обычно рекомендуется, поскольку позволяет избежать создания огромного общего пространства таблиц и позволяет освобождать место при удалении или обрезке таблицы. Отдельное пространство таблицы также помогает для схемы частичного резервного копирования Xtrabackup. |
xtradb_innodb_strict_mode |
on |
|
xtradb_join_buffer_size |
|
|
xtradb_log_warnings |
|
|
xtradb_long_query_time |
|
|
xtradb_max_allowed_packet |
|
|
xtradb_max_connections |
4096 |
|
xtradb_max_heap_table_size |
|
|
xtradb_max_user_connections |
|
|
xtradb_pxc_strict_mode |
ENFORCING |
Режим строгой проверки PXC предназначен для избежания использования экспериментальных и неподдерживаемых функций в кластере Percona XtraDB. |
xtradb_query_cache_size |
|
|
xtradb_read_buffer_size |
|
|
xtradb_read_rnd_buffer_size |
|
|
xtradb_skip_name_resolve |
1 |
Использовать только IP-адреса. Установите в 0 для разрешения имен хостов. |
xtradb_slow_query_log |
0 |
Установите в 1, чтобы включить лог медленных запросов. |
xtradb_socket |
|
|
xtradb_sort_buffer_size |
|
|
xtradb_table_definition_cache |
|
|
xtradb_table_open_cache |
|
|
xtradb_table_open_cache_instances |
|
|
xtradb_tmp_table_size |
|
Добавление баз данных
Базы данных определены словарем, содержащим поля name:
(обязательно) и init_script:
(необязательно).
Скрипт инициализации – это SQL-файл, который выполняется при создании базы данных для инициализации таблиц и заполнения значениями.
xtradb_databases:
- name: keystone
- name: mydb
init_script: files/init_mydb.sql
Добавление пользователей
Пользователи определены словарем, содержащим поля name:
, password:
, priv:
и, возможно, host:
.
Пароль указан в открытом виде, а priv:
определяет привилегии для этого пользователя, как описано в документации Ansible.
Пример:
xtradb_users:
- name: keystone
password: KEYSTONE_DBPASS
priv: 'keystone.*:SUPER'
- name: cdelgehier
password: yolo
priv: 'mydb.*:ALL'
host: '192.168.1.%'
Зависимости
Зависимостей нет.
Пример плейбука
- hosts: db
gather_facts: true
become: true
roles:
- role: ansible-role-XtraDB-Cluster
xtradb_cluster_name: "prod-customer"
xtradb_sst_user: sstuser
xtradb_sst_password: s3cr3t
xtradb_root_password: yolo
xtradb_nodes_group: "db"
xtradb_bind_interface: eth0
- hosts: db
gather_facts: true
become: true
roles:
- role: ansible-role-XtraDB-Cluster
xtradb_cluster_name: "prod-customer"
xtradb_sst_user: sstuser
xtradb_sst_password: s3cr3t
xtradb_root_password: yolo
xtradb_bind_address: "{{ ansible_default_ipv4.address }}"
xtradb_wsrep_cluster_address: "gcomm://{{ groups['db'] | map('extract', hostvars, ['ansible_default_ipv4', 'address']) | join(',') }}"
xtradb_master_node: "{{ hostvars[ groups['db'][0] ].ansible_default_ipv4.address }}"
- hosts: db
gather_facts: true
become: true
roles:
- role: ansible-role-XtraDB-Cluster
xtradb_cluster_name: "prod-customer"
xtradb_sst_password: s3cr3t
xtradb_root_password: yolo
xtradb_nodes_group: "db"
xtradb_bind_interface: eth0
xtradb_databases:
- name: keystone
xtradb_users:
- name: keystone
password: PASSWD
priv: 'keystone.*:GRANT,ALL'
xtradb_innodb_buffer_pool_instances: 8
xtradb_innodb_buffer_pool_size: "384M"
xtradb_innodb_file_format: "Barracuda"
xtradb_innodb_file_format_check: "1"
xtradb_innodb_file_per_table: "on"
xtradb_innodb_flush_log_at_trx_commit: "1"
xtradb_innodb_log_buffer_size: "16M"
xtradb_innodb_log_file_size: "50M"
xtradb_innodb_strict_mode: "on"
xtradb_join_buffer_size: "128K"
xtradb_log_warnings: "1"
xtradb_long_query_time: "10"
xtradb_max_allowed_packet: "16M"
xtradb_max_connections: "505"
xtradb_max_heap_table_size: "16M"
xtradb_max_user_connections: "500"
xtradb_query_cache_size: "0" # отключить
xtradb_read_buffer_size: "128K"
xtradb_read_rnd_buffer_size: "256k"
xtradb_skip_name_resolve: "1"
xtradb_slow_query_log: "1"
xtradb_sort_buffer_size: "2M"
xtradb_table_definition_cache: "1400"
xtradb_table_open_cache: "2000"
xtradb_table_open_cache_instances: "8"
xtradb_tmp_table_size: "16M"
[db]
node1 ansible_host=192.168.1.173
node2 ansible_host=192.168.1.156
node3 ansible_host=192.168.1.154
Тестирование
Доступны два типа тестовых окружений. Одно на основе Vagrant, другое на Docker. Последнее подходит для запуска автоматических тестов на Travis-CI. Тестовый код хранится в отдельных ветках. Для получения информации о том, как настроить эти тестовые окружения на своем компьютере, смотрите файлы README в соответствующих ветках:
- Docker: docker-tests
Удаление
Чтобы удалить все следы и начать новую установку
ansible db -m shell -a 'rm -rf /var/lib/mysql /var/log/mysqld.log /etc/percona-xtradb-cluster.conf.d ; yum remove Percona* -y'
Участие
Вопросы, запросы на функции и идеи приветствуются и могут быть размещены в разделе "Issues".
Пулл-реквесты также очень приветствуются. Лучший способ отправить PR - сначала создать форк этого проекта на Github, затем создать тематическую ветку для предложенных изменений и отправить ее в свой форк. Github затем может легко создать PR на основе этой ветки.
Лицензия
Лицензия BSD с двумя пунктами, см. LICENSE.md
Участники
- Седрик Дельгейер (соперicipant)
ansible-galaxy install cdelgehier/ansible-role-XtraDB-Cluster