MySQL Innodb Cluster搭建与初探
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,-------------------------------------------------------------------------------------------------正文-
千家信息网最后更新 2025年02月01日MySQL Innodb Cluster搭建与初探-------------------------------------------------------------------------------------------------正文---------------------------------------------------------------------------------------------------------------
场景:
有些空余时间了, 想要测试一下Group Replication与MySQL Router~\(≧▽≦)/~
结论:
可用性方面不错;
性能方面其实还不错, 不过写入能力还是老问题, 读多写少的业务可以关注一下Innodb Cluster;
测试环境:
MySQL 8.0.3-rc
MySQL Router 8.0
MySQL shell
sysbench 1.0 (以后再补一篇测试数据......)
虚拟机:
4C24G, 2.00GHz x 5 (MySQL 8.0.3-rc)
4C24G, 2.40GHz x 4 (MySQL 8.0.3-rc)
8C24G, 2.40GHz x 1 (MySQL Router)
搭建过程:
1. 官方源直接安装MySQL相关的所有包, apt-get/yum
2. MySQL的配置, 除了常规配置以外, 推荐加上如下的部分, loose开头的参数表示如果不存在group_replication插件, 则忽略这些配置
PS: 测试中, 全程使用innodb_flush_log_at_trx_commit = 2 和 sync_binlog = 0 的设置, 双1的性能实在是弱......_(:з」∠)_
3. 启动所有的MySQL实例, 并安装插件
4. 在mysql中创建用户temp, 测试图方便, 用ALL on *.*就行, 在官方文档中, 有列出这个用户需要的具体权限, 如下
还有一个需要注意的是: 官方推荐修改/etc/hosts, 实测中, 把localhost指向内网IP, 或者是创建temp@localhost的同权限用户也行, 官方的工具会用到@localhost的登录方式;
PS: with grant option很重要, 因为工具会新建一个mysql_route_xxxx用户, 以及存储meta的新数据库;
4. 在Group Primary的机器上启动MySQL shell, 这个很重要, 因为第3点中提到的: 官方的工具会用到@localhost的登录方式
PS: 推荐用mysqlsh --log-level=DEBUG3来启动mysql shell, 且不要关闭wizard;
5. 进入MySQL shell以后, 可以选择使用javascript还是python, 这里比较习惯python, 就用python的方式, 和js基本没区别;
6. dba.help()命令能看到支持的所有命令, 搭建过程中主要用到的主要有这几个:
check_instance_configuration : 检查实例的参数配置是否符合搭建Group的要求
configure_local_instance : 持久化实例的配置参数到配置文件
create_cluster : 创建innodb cluster
get_cluster : 获取这个实例所属innodb cluster的信息
\connect 用户名@ip:port: 登录到某个实例, 一般为本机
7. 使用dba.check_instance_configuration('temp@192.168.0.100:3306')来检测配置参数, 按照第一步设置之后, 应该是直接返回OK的, 如果还有缺失的话, 就手动补上吧
PS: 这个工具可以自动把参数修改成符合要求的设置, 有兴趣可以研究一下, 这里就不唠叨了ㄟ( ▔, ▔ )ㄏ
8. 接下来就是使用create_cluster来创建innodb cluster了, 这里放上比较常用的一些设置信息
简单说明部分参数:
multiMaster : 如果要创建多主集群, 就需要单独指定这个参数, 否则默认创建单主集群(类似于一主多从的复制架构);
adoptFromGR : 如果已经手动把Group搭建起来了, 需要在这个Group上创建新的innodb cluster, 那就需要显式指定这个参数, 且关闭wizard模式, 关掉wizard模式之后, 需要再额外添加创建集群的用户名和密码作为参数, 推荐开启wizard, 并全程使用MySQL shell搭建innodb cluster;
ipWhitelist : 在测试的时候, 可能是工具没有管理seed这个参数, 所以在创建的时候即便指定了白名单, 也无法向Group里面添加新实例;
PS: 在python模式下, 如果需要添加参数, 就这么写
9. 开启wizard的情况下(本文默认开启), 使用如下命令创建Cluster:
10. 集群创建成功以后, 用add_instance命令把所有的实例都添加到群组就好了, 在官方的宣讲中, 暂时不支持超过9个实例组成一个Group, 实际上, 不超过7个比较好, auto_increament的默认设置是7;
11. 这时候登录数据库, 就会看到多出来一个库, 叫做mysql_innodb_cluster_metadata, 里面有cluster的一些信息, 有兴趣可以看看;
12. 在其他的虚拟机上安装MySQL Router, 然后用bootstrap来自动生成配置;
PS : stop.sh可能会关不掉mysqlrouter, 留意一下, 脚本的问题
13. 读写默认使用6446, 只读使用6447, 这时候就可以随意进行测试了;
14. 如果要创建多主模式, 需要调整两个参数
PPS: MySQLRouter会根据meta的数据来动态调整读写和只读连接, 比如说Primary挂掉了, meta发生了变化, MySQLRouter会在很短的时间内发现并把流量切换到新的Primary;
PPPPPS: 性能测试数据待整理
场景:
有些空余时间了, 想要测试一下Group Replication与MySQL Router~\(≧▽≦)/~
结论:
可用性方面不错;
性能方面其实还不错, 不过写入能力还是老问题, 读多写少的业务可以关注一下Innodb Cluster;
测试环境:
MySQL 8.0.3-rc
MySQL Router 8.0
MySQL shell
sysbench 1.0 (以后再补一篇测试数据......)
虚拟机:
4C24G, 2.00GHz x 5 (MySQL 8.0.3-rc)
4C24G, 2.40GHz x 4 (MySQL 8.0.3-rc)
8C24G, 2.40GHz x 1 (MySQL Router)
搭建过程:
1. 官方源直接安装MySQL相关的所有包, apt-get/yum
2. MySQL的配置, 除了常规配置以外, 推荐加上如下的部分, loose开头的参数表示如果不存在group_replication插件, 则忽略这些配置
点击(此处)折叠或打开
- report_host = 192.168.0.100 ##GR插件会用这个report_host来标记Group中的每个MySQL实例, 确保每个MySQL实例的hostname不一样, 或者这个report_host不一样
- log_bin = /home/mysql/mysql-binlog ##必须开启
- log_slave_updates = ON ##必须开启
- master_info_repository = TABLE ##必须使用Table
- relay_log_info_repository = TABLE ##必须使用Table
- gtid_mode = ON ##必须开启GTID
- enforce_gtid_consistency = ON ##必须开启
- slave_preserve_commit_order = ON ##确保GR_applier按照一致的顺序复现事务
- binlog_checksum = NONE ##必须设置为NONE
- transaction_write_set_extraction=XXHASH64 ##必须设置为XXHASH64
- #group_replication = ON ##开启Group Replication插件, 安装插件之后再开启
- loose-group_replication_start_on_boot=off ##默认关闭, 防止重启后自动创建新的Group
- loose-group_replication_local_address= "192.168.0.100:13306" ##官方工具会默认使用13306端口作为插件的端口, 设置为13306方便测试
- loose-group_replication_group_seeds= "192.168.0.100:13306,192.168.1.100:13306" ##官方工具貌似不会主动管理这个参数, 手动加上
- loose-group_replication_bootstrap_group=off ##默认关闭, 防止自动创建新的Group
- loose-group_replication_ip_whitelist = '192.168.0.0/24,192.168.1.0/24' ##推荐在初始化前手工加上, 控制哪些ip的机器可以加入Group
PS: 测试中, 全程使用innodb_flush_log_at_trx_commit = 2 和 sync_binlog = 0 的设置, 双1的性能实在是弱......_(:з」∠)_
3. 启动所有的MySQL实例, 并安装插件
点击(此处)折叠或打开
- INSTALL PLUGIN group_replication SONAME 'group_replication.so'
4. 在mysql中创建用户temp, 测试图方便, 用ALL on *.*就行, 在官方文档中, 有列出这个用户需要的具体权限, 如下
点击(此处)折叠或打开
- GRANT ALL PRIVILEGES ON mysql_innodb_cluster_metadata.* TO your_user@'%' WITH GRANT OPTION;
- GRANT RELOAD, SHUTDOWN, PROCESS, FILE, SUPER, REPLICATION SLAVE, REPLICATION CLIENT, \
- CREATE USER ON *.* TO your_user@'%' WITH GRANT OPTION;
- GRANT SELECT ON performance_schema.* TO your_user@'%' WITH GRANT OPTION;
- GRANT SELECT ON *.* TO your_user@'%' WITH GRANT OPTION;
- GRANT SELECT, INSERT, UPDATE, DELETE ON mysql.* TO your_user@'%' WITH GRANT OPTION
还有一个需要注意的是: 官方推荐修改/etc/hosts, 实测中, 把localhost指向内网IP, 或者是创建temp@localhost的同权限用户也行, 官方的工具会用到@localhost的登录方式;
PS: with grant option很重要, 因为工具会新建一个mysql_route_xxxx用户, 以及存储meta的新数据库;
4. 在Group Primary的机器上启动MySQL shell, 这个很重要, 因为第3点中提到的: 官方的工具会用到@localhost的登录方式
PS: 推荐用mysqlsh --log-level=DEBUG3来启动mysql shell, 且不要关闭wizard;
5. 进入MySQL shell以后, 可以选择使用javascript还是python, 这里比较习惯python, 就用python的方式, 和js基本没区别;
6. dba.help()命令能看到支持的所有命令, 搭建过程中主要用到的主要有这几个:
check_instance_configuration : 检查实例的参数配置是否符合搭建Group的要求
configure_local_instance : 持久化实例的配置参数到配置文件
create_cluster : 创建innodb cluster
get_cluster : 获取这个实例所属innodb cluster的信息
\connect 用户名@ip:port: 登录到某个实例, 一般为本机
7. 使用dba.check_instance_configuration('temp@192.168.0.100:3306')来检测配置参数, 按照第一步设置之后, 应该是直接返回OK的, 如果还有缺失的话, 就手动补上吧
PS: 这个工具可以自动把参数修改成符合要求的设置, 有兴趣可以研究一下, 这里就不唠叨了ㄟ( ▔, ▔ )ㄏ
8. 接下来就是使用create_cluster来创建innodb cluster了, 这里放上比较常用的一些设置信息
简单说明部分参数:
multiMaster : 如果要创建多主集群, 就需要单独指定这个参数, 否则默认创建单主集群(类似于一主多从的复制架构);
adoptFromGR : 如果已经手动把Group搭建起来了, 需要在这个Group上创建新的innodb cluster, 那就需要显式指定这个参数, 且关闭wizard模式, 关掉wizard模式之后, 需要再额外添加创建集群的用户名和密码作为参数, 推荐开启wizard, 并全程使用MySQL shell搭建innodb cluster;
ipWhitelist : 在测试的时候, 可能是工具没有管理seed这个参数, 所以在创建的时候即便指定了白名单, 也无法向Group里面添加新实例;
PS: 在python模式下, 如果需要添加参数, 就这么写
点击(此处)折叠或打开
- cluster = cluster.create_cluster('temp@192.168.0.100:3306', {'multiMaster':1,'adoptFromGR':1})
9. 开启wizard的情况下(本文默认开启), 使用如下命令创建Cluster:
点击(此处)折叠或打开
- cluster = dba.create_cluster('testCluster')
10. 集群创建成功以后, 用add_instance命令把所有的实例都添加到群组就好了, 在官方的宣讲中, 暂时不支持超过9个实例组成一个Group, 实际上, 不超过7个比较好, auto_increament的默认设置是7;
11. 这时候登录数据库, 就会看到多出来一个库, 叫做mysql_innodb_cluster_metadata, 里面有cluster的一些信息, 有兴趣可以看看;
12. 在其他的虚拟机上安装MySQL Router, 然后用bootstrap来自动生成配置;
点击(此处)折叠或打开
- mysqlrouter --bootstrap temp@192.168.0.100:3306 --directory /home/mysqlrouter/ --user=mysqlrouter
PS : stop.sh可能会关不掉mysqlrouter, 留意一下, 脚本的问题
13. 读写默认使用6446, 只读使用6447, 这时候就可以随意进行测试了;
14. 如果要创建多主模式, 需要调整两个参数
点击(此处)折叠或打开
- group_replication_single_primary_mode = OFF
- group_replication_enforce_update_everywhere_checks = ON
PPS: MySQLRouter会根据meta的数据来动态调整读写和只读连接, 比如说Primary挂掉了, meta发生了变化, MySQLRouter会在很短的时间内发现并把流量切换到新的Primary;
PPPPPS: 性能测试数据待整理
参数
实例
测试
官方
配置
工具
插件
用户
数据
推荐
信息
命令
模式
集群
登录
性能
手动
方式
问题
不错
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库系统包括那五部分
性价比最高的服务器是什么
软件开发的东北人多吗
网络安全修改信息
数据库查询按时间升序
软件开发完整项目
大华摄像机时钟服务器
试用期软件开发
安卓软件开发发展前景
服务器硬盘为什么厚
宁夏世纪友信网络技术有限公司
qq网络安全修复
联想服务器web管理界面
简单数据库设计方法
用友 找不到数据库
传达网络安全宣传周精神
软件开发量化管理
广州睿达互联网科技
湖南项目软件开发公司
数据库表名和别名相同
大学生如何做好网络安全
北京广厦网络技术公司
软件开发知识产权和所有权
数据库模糊查询学生姓名
自建下载服务器软件
卫生院网络安全承诺书
网络安全法 部门统筹
华为网站无法连接到服务器怎么办
服务器的阀值管理
数据库创建引索