mysql
mysql
Для быстрой развертки кластера MySQL.
Поддерживаются следующие режимы кластера:
- Репликация Master-Slave на основе GTID
- По умолчанию включена полусинхронная повышенная репликация
- Репликация Master-Slave на основе архитектуры MHA
- Одномастевая модель MGR (по умолчанию)
- Многомастевая модель MGR
- ReplicaSet репликация
Поддерживаемые версии MySQL:
- Официальный сервер MySQL Community от Oracle MySQL Community Server
- Open Source проект GreatSQL
- Percona Server for MySQL
Требования к окружению
- Centos 7+
- Ansible 2.9+
- MySQL 8.0+
Переменные
Имя переменной | Тип | Значение по умолчанию | Описание переменной |
---|---|---|---|
mysql_version | строка | 8.0.23 | Версия MySQL |
mysql_upgrade | булев | false | Нужно ли выполнять операцию обновления версии |
mysql_download_url | строка | URL для скачивания без установки | |
mysql_inventory_group | строка | mysql | Название группы в инвентаре Ansible, по умолчанию mysql |
mysql_basedir | строка | /usr/local/mysql | Директория установки |
mysql_datadir | строка | /data/mysql | Директория для хранения данных |
mysql_logdir | строка | /var/log/mysqld | Директория для хранения логов |
mysql_pidfile | строка | /var/run/mysqld/mysqld.pid | Путь к файлу PID |
mysql_socket | строка | /var/run/mysqld/mysqld.sock | Путь к файлу сокета |
mysql_port | целое | 3306 | Порт для прослушивания |
mysql_bind_address | строка | 0.0.0.0 | Адрес для прослушивания |
mysql_interface | строка | "" | Указать сетевой интерфейс, по умолчанию используется первый интерфейс, кроме lo |
mysql_default_time_zone | строка | +8:00 | Указать часовой пояс |
mysql_character_set_server | строка | utf8mb4 | Стандартная кодировка |
mysql_collation_server | строка | utf8mb4_general_ci | Стандартная сортировка |
mysql_max_connections | целое | 1005 | Максимальное количество подключений |
mysql_max_user_connections | целое | 1000 | Максимальное количество подключений для пользователя, должно быть меньше mysql_max_connections |
mysql_interactive_timeout | целое | 28800 | Время в секундах до закрытия интерактивного подключения |
mysql_wait_timeout | целое | 28800 | Время в секундах до закрытия неинтерактивного подключения |
mysql_max_connect_errors | целое | 200 | Максимальное количество ошибок соединения |
mysql_root_password | строка | "" | Пароль для учетной записи root |
mysql_cluster_type | строка | mgr | Тип кластера (по умолчанию mgr) можно выбрать mgr (Mysql Group Replication)/ms (Master-Slave) |
mysql_cluster_name | строка | default | Имя кластера, подходит для InnodbCluster/ReplicaSet |
mysql_mha_enabled | булев | false | Включить высокую доступность на основе MHA |
mysql_mha_config_dir | строка | /etc/mha | Директория для конфигурационных файлов MHA |
mysql_mha_manager_workdir | строка | /var/log/mha | Рабочая директория MHA, где хранятся логи и информация о состоянии |
mysql_mha_user | строка | mha | Учетная запись для управления MySQL, требуется ALL права |
mysql_mha_password | строка | "" | Пароль для управления MySQL |
mysql_mha_repl_user | строка | repl | Учетная запись для репликации MySQL |
mysql_mha_repl_password | строка | "" | Пароль для репликации MySQL |
mysql_mha_ssh_user | строка | root | Учетная запись SSH для связи между узлами |
mysql_mha_ssh_port | целое | 22 | Порт SSH для связи между узлами |
mysql_mha_ping_interval | целое | 2 | Интервал пинга статуса узла master |
mysql_mha_vip | строка | "" | VIP для привязки к узлу master |
mysql_mha_wechat_token | строка | "" | Ключ бота WeChat для отправки уведомлений |
mysql_mha_proxy | строка | "" | Прокси для использования в скрипте отправки уведомлений (send_report) |
mysql_repl_user | строка | repl | Учетная запись для Master-Slave/Gruop репликации |
mysql_repl_password | строка | Пароль учетной записи для Master-Slave/Gruop репликации | |
mysql_group_replication_name | uuid | "" | Имя кластера групповой репликации, в MySQL используется SELECT UUID() или uuidgen в shell |
mysql_group_replication_single_primary_mode | булев | true | Является ли кластер MGR однопрофильным |
mysql_innodb_cluster_enable | булев | true | Активировать Innodb Cluster |
mysql_innodb_cluster_username | строка | ic | Учетная запись для создания и управления Innodb Cluster, требуется ALL WITH GRANT OPTION права |
mysql_innodb_cluster_password | строка | "" | Пароль для управления |
mysql_proxysql_config | булев | false | Использовать ли proxysql в качестве прокси |
mysql_proxysql_monitor_username | строка | monitor | Учетная запись для мониторинга состояния mgr с помощью proxysql |
mysql_proxysql_monitor_password | строка | "" | Пароль для мониторинга состояния mgr с помощью proxysql |
mysql_databases | массив | [] | Бизнес-базы данных, которые нужно создать |
mysql_users | массив | [] | Пользователи, которых нужно создать |
Зависимости
коллекции:
Пример
Установка
ansible-galaxy collection install -r requirements.yml
Применение
- hosts: servers
roles:
- { role: mysql, mysql_version: 8.0.20 }
Известные проблемы
- Модуль mysql_user для версий MySQL выше 8.0 имеет проблемы с идемпотентностью при назначении пользователю привилегий
ALL
Idempotence all grant
Задачи на будущее
- Поддержка полусинхронной репликации в мастер-слейв режиме
- Завершить тестирование побочных эффектов в MHA
- Поддержка обновления версий
- Поддержка восстановления узлов
- В экстремальных ситуациях в кластере MGR, когда все узлы падают, необходимо найти экземпляр с максимальным gtid для повторной инициализации кластера в качестве основного узла.
Восстановление после аномалий кластера
Восстановление после асинхронного сбоя кластера MGR
Необходимо взять объединение: select RECEIVED_TRANSACTION_SET from performance_schema.replication_connection_status + show variables like 'gtid_executed', затем выбрать основной узел с максимальным значением, чтобы сделать его основным.
Установить
ansible-galaxy install daixijun/ansible-role-mysql
Лицензия
mit
Загрузки
219
Владелец