MySQL MGR 部署说明
本文说明如何使用 mgr.yml 部署 MySQL Group Replication。
1. 适用范围
- 目标架构:3 到 9 节点 MGR
- 数据库版本:MySQL
8.0.x、8.4.x或9.7.x - 主机组:
[dbbot_mysql] - 自动验收:默认检查 MySQL 实例、MGR 成员数量、成员状态和 primary 数量
建议在新环境执行。
mgr.yml会先安装 MySQL 实例,然后配置 Group Replication。MySQL
9.7.x使用glibc2.28包,不支持 CentOS/RHEL 7 系列;这类系统请使用 MySQL8.4.x。
2. inventory
[dbbot_mysql]
192.0.2.131 ansible_user=root ansible_ssh_pass="'密码'"
192.0.2.132 ansible_user=root ansible_ssh_pass="'密码'"
192.0.2.133 ansible_user=root ansible_ssh_pass="'密码'"
3. 关键变量
编辑 mysql_ansible/playbooks/common_config.yml:
db_type: mysql
mysql_version: "8.4.9"
mysql_port: 3306
fcs_allow_dbbot_default_passwd: true
编辑 mysql_ansible/playbooks/vars/var_mgr.yml:
mysql_binlog_format: row
mysql_mgr_port: "{{ (mysql_port | int) * 10 + 1 }}"
sub_nets: "192.0.2.%"
mysql_mgr_hosts:
- "192.0.2.131"
- "192.0.2.132"
- "192.0.2.133"
说明:
mysql_mgr_hosts必须与[dbbot_mysql]中的主机一致。mysql_mgr_hosts支持 3 到 9 个节点。sub_nets是 MGR 复制账号允许连接的来源网段。mysql_mgr_port默认按mysql_port * 10 + 1计算,例如3306对应33061。
4. 执行部署
cd /usr/local/dbbot/mysql_ansible/playbooks
ansible-playbook mgr.yml
执行过程中按提示输入 confirm。若在脚本中非交互执行,可追加:
python3 /usr/local/dbbot/portable-ansible/ansible-playbook mgr.yml -e dbbot_confirmation_input=confirm
5. 部署后验收
mgr.yml 默认会在 post_tasks 阶段自动执行 MGR 验收。也可以手工查看:
mysql -uadmin -h127.0.0.1 -P3306 -pDbbot_admin@8888 \
-e "SELECT MEMBER_HOST, MEMBER_STATE, MEMBER_ROLE FROM performance_schema.replication_group_members ORDER BY MEMBER_HOST;"
验收要点:
- 成员数量与
mysql_mgr_hosts一致。 - 所有成员
MEMBER_STATE为ONLINE。 - 只有一个成员为
PRIMARY。
6. 启动保护与重启
mgr.yml 为 MGR 节点生成以下启动策略:
super_read_only=ON
group_replication_start_on_boot=ON
group_replication_bootstrap_group=OFF
首次部署期间,剧本会临时解除只读以创建管理账号、复制账号并安装 Group Replication 插件。建组成功后,Group Replication 负责运行时角色状态:primary 可写,secondary 保持 super_read_only=ON。
单个成员 crash 或主机重启后,mysqld 会自动启动 Group Replication 并尝试重新加入现有多数派。在本机 MEMBER_STATE 变为 ONLINE 之前,不应将它加入业务流量;上游负载均衡也应以实时组成员状态判活,不能只检查端口、SELECT 1 或 @@read_only。
group_replication_start_on_boot=ON 不会自动安全恢复所有成员同时停止的完整故障。完整停机后必须比较各成员的 gtid_executed 和已认证事务,选择事务最完整的成员进行一次安全 bootstrap,再让其他成员加入。group_replication_bootstrap_group 必须始终保持静态配置为 OFF,不能为了自动恢复而持久设为 ON。
7. 卸载
卸载会读取当前 common_config.yml / advanced_config.yml 的生效端口和目录配置。确认 mysql_port 指向要删除的实例后执行:
cd /usr/local/dbbot/mysql_ansible/playbooks
ansible-playbook unsafe_uninstall.yml
执行过程中按提示输入 confirm。该入口只删除目标 MySQL 实例的数据、日志和运行目录,不删除 MySQL 软件基目录、Linux 用户或 my.cnf。