记录一下mysql8.0.x 官方推荐集群方案mgr,相关的重要参数设置
环境说明
- 版本 mysql 8.0.27
- 一主两从3台服务器做的mgr集群
- 主要设置 my.cnf中的参数
- linux 系统环境
重要参数
mysql8的全部参数的官方说明文档地址:
https://dev.mysql.com/doc/refman/8.0/en/server-system-variable-reference.html
在安装mysql,配置mgr集群之前,
请务必重点注意:所有服务器的 hostname 确保不一样 ,如果修改主机名称使用类似如下命令:
sudo hostnamectl set-hostname newhostnamehere
另外记得修改 /etc/hosts 文件中的内容,将本次所有的主机名称配置对应ip地址,特别注意第1、2两行127.0.0.1的对应关系
127.0.0.1 localhost 127.0.1.1 mgr-node1 192.168.30.222 mgr-master mgr-master 192.168.30.247 mgr-node1 mgr-node1 192.168.30.248 mgr-node2 mgr-node2
下面列举mgr集群主要关注的几个参数,
| 参数名称 | 默认数值 | 建议说明 |
|---|---|---|
| server-id | 1 | 唯一服务id,务必确保每一台服务器不一样 |
| port | 3306 | 客户端 和 服务端口 这两个可以不一样,建议所有服务器上端口一样 |
| admin_port | 33062 | 管理接口,独立管理通道 防止客户端无法登录 ,通常还需要配置 admin_address 来指定监听的 ip 地址 |
| mysqlx-port | 33060 | 用于 x 协议(mysql x protocol)所使用的 tcp 端口。x 协议是 mysql 8.0 (以及 5.7.12+) 引入的一种新的、现代化的客户端-服务器通信协议,旨在提供更丰富的功能和更好的性能,特别是在与 mysql shell、nosql 式访问 和 文档存储 功能结合使用时 |
| disabled_storage_engines | 空 | 需要禁止使用的存储引擎,mgr环境下禁止使用这种存储,一般可设置 myisam,blackhole,federated,archive,memory |
| transaction_isolation | repeatable-read | 事务提交模式,建议使用 read-committed |
| gtid_mode | off | mgr 强制依赖 gtid 进行事务跟踪 必须设置 on |
| log_bin & log_slave_updates | off | mgr 的基础 必须设置为 on |
| binlog_format | row | mgr 依赖行格式 必须设置为 row |
| transaction_write_set_extraction | xxhash64 | mgr 用它来识别事务中修改的行(写入集),用于冲突检测和应用,通常设置为 xxhash64。必须在所有成员上保持一致 |
| innodb_flush_log_at_trx_commit | 1 | 控制事务提交时 redo log 如何写入磁盘,强烈建议设置为 1,这保证了事务的 acid 特性(完全持久化) |
| sync_binlog | 1 | 控制 binlog 刷新到磁盘的频率,设置为 1 可确保每个事务提交后 binlog 都被同步到磁盘 |
| group_replication_transaction_size_limit | 150mb | 限制mgr中可以接受的事务大小上限,超过此大小的事务将被拒绝 |
| max_allowed_packet | 64mb | 定义服务器能够接收的最大网络包大小,建议小于上面参数值 |
| replica_pending_jobs_size_max | 128mb | 复制线程可以排队的最大事务大小 |
| innodb_log_file_size | 512mb | innodb重做日志文件大小,通常设置为512mb-1gb之间 |
| group_replication_group_name | 空 | 【必填】复制组的唯一标识符。在同一个mysql集群中的所有节点都必须使用相同的组名 |
| group_replication_start_on_boot | 空 | 【必填】表示mysql服务器启动时,group replication会自动启动并尝试加入复制组 |
| group_replication_bootstrap_group | 空 | 【必填】 这个参数通常在初始化复制组的第一个节点时设置为on,表示该节点将启动一个新的复制组。一旦组已经启动,其他节点加入时都应将其设置为off |
| group_replication_local_address | 空 | 【必填】当前mysql实例用于group replication通信的本地地址和端口 |
| group_replication_group_seeds | 空 | 【必填】 复制组中至少一个或多个已知成员的地址列表。当一个新节点启动或尝试重新加入组时,它会使用这些地址来发现并连接到复制组的其他成员。这是一个引导列表,不要求列出所有成员 |
| group_replication_ip_allowlist | 空 | 【必填】 定义了允许连接到group replication组的ip地址或ip地址范围。这有助于增强安全性,只允许来自指定网络的成员加入组,例如:“127.0.0.1,192.168.30.0/24” |
| report_host | 空 | 重要: 用于告知mysql服务器在将信息报告给监控工具,对应performance_schema.replication_group_members 表中member_host的值,如果不配置,则默认取当前主机的hostname作为该字段值 |
除了以上列出的参数值,一般时间,时区等各节点都需要保证一致性。
另外最重要的是:
你的应用程序中的事务要尽可能的小
例如 delete update 范围数据的时候,需要优化完善之前的程序保证每一次范围尽可能的小!
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论