daixijun.mysql

mysql

构建状态 Ansible Galaxy GitHub标签(最新版本)

用于快速部署 MySQL 集群。

支持以下几种集群模式:

  • 基于 GTID 的主从复制
  • 默认开启半同步增强(Semi-Sync)
  • 基于 MHA 架构的主从复制
  • MGR 单主模式(默认)
  • MGR 多主模式
  • ReplicaSet 复制集

支持的 MySQL 发行版本:

环境要求

  • CentOS 7+
  • Ansible 2.9+
  • MySQL 8.0+

变量

变量名 类型 默认值 变量说明
mysql_version 字符串 8.0.23 MySQL 版本
mysql_upgrade 布尔值 false 是否需要执行版本升级操作
mysql_download_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 Socket 文件位置
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(主从模式)
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 字符串 "" 用于绑定到 master 节点的 VIP
mysql_mha_wechat_token 字符串 "" 企业微信机器人的 Key,用于发送报警通知
mysql_mha_proxy 字符串 "" 用于发送报警通知(send_report)脚本使用的代理
mysql_repl_user 字符串 repl 用于主从/组复制的账号
mysql_repl_password 字符串 用于主从/组复制账号的密码
mysql_group_replication_name uuid "" 组复制集群名,在 MySQL 中使用 SELECT UUID() 或 shell 中使用 uuidgen 生成
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 proxysql 监控 MGR 状态的账号
mysql_proxysql_monitor_password 字符串 "" proxysql 监控 MGR 状态的密码
mysql_databases 数组 [] 需要创建的业务数据库
mysql_users 数组 [] 需要创建的用户

依赖

collections:

示例

安装

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 最大的实例作为 primary 节点重新引导集群

集群异常修复

MGR 集群异步宕机后恢复

取并集,执行 select RECEIVED_TRANSACTION_SET from performance_schema.replication_connection_status + show variables like 'gtid_executed',然后选择主节点最大者,作为 primary。

关于项目

安装mysql,并配置主从或MGR集群

安装
ansible-galaxy install daixijun.mysql
许可证
mit
下载
238
拥有者