Press "Enter" to skip to content

现网环境部署Mysql InnoDB Cluster和Mysql Router

3服务器节点,假设已经安装好mysql 5.7 mysql shell

1服务器安装好mysql router

Three MySQL servers are grouped together as a production InnoDB cluster. One of the servers is the primary instance, and the other two are secondary instances. The IP address for the primary server is 139.59.177.10, and the IP addresses for the two secondary instances are 139.59.177.11 and 139.59.177.12. MySQL Router connects a client application to the primary instance. The admin capability in MySQL Shell interacts directly with the production InnoDB cluster.

配置节点服务器上的hosts文件(可选):

在mysql命令行下检查主机名是否正常生效

 

配置权限:

首先需要配置各服务器同步通信所需要的用户的权限:

如果只是用于监控,权限可以限制的更严格点:

repl为要用于同步的用户名,也可以直接使用root.

 

打开mysql shell

使用dba.checkInstanceConfiguration(‘repl@mysqlg0s2:3306’)

repl 为同步所用用户名

 

mysqlg0s2为节点hostname

使用配置工具修改mysql系统配置:

按提示重启服务器后:

 

新建集群

进入mysql shell:

 

新建集群:

可以看到my.cnf文件其实是自动配置的,不需要手动修改,熟悉mysql shell命令就好。此外一定要关闭SElinux或修改相关配置。

 

好接下面就进入比较蒙圈的环节了,也就是加入不同节点和在节点上更新配置文件的问题,mysql 8.0 开始将配置直接存储到数据库,没有持久化配置的问题,这里主要指5.7版。

WARNING: On instance ‘mysqlg0s2:3306’ membership change cannot be persisted since MySQL version 5.7.23 does not support the SET PERSIST command (MySQL version >= 8.0.11 required). Please use the <Dba>.configureLocalInstance command locally to persist the changes. Adding Seed Instance…

这里已经指出。但要说明的是,无法使用mysql shell远程连接添加节点,需要在每个节点上添加节点到集群,而后刷新本地配置文件。

 

 

如果添加节点时遇到遇到数据同步的问题:

就这样解决:

 

测试一下集群是否正常工作:

如果正常可以看到节点上数据在自动进行同步:

 

使用Mysql Router得到一致的链接串,并实现节点的负载均衡

mysql router是这种集群方法的核心所在,这样客户端在部署时不用考虑集群环境的问题,可以使用与开发环境一样的固定链接串,方便部署。

mysqlrouter使用命令行读取集群信息自动生成配置文件:

 

节点状态说明:

  • * ONLINE – 节点状态正常。
  • * OFFLINE – 实例在运行,但没有加入任何Cluster。
  • * RECOVERING – 实例已加入Cluster,正在同步数据。
  • * ERROR – 同步数据发生异常。
  • * UNREACHABLE – 与其他节点通讯中断,可能是网络问题,可能是节点crash。
  • * MISSING 节点已加入集群,但未启动

集群状态说明

  • * OK – 所有节点处于online状态,有冗余节点。
  • * OK_PARTIAL – 有节点不可用,但仍有冗余节点。
  • * OK_NO_TOLERANCE – 有足够的online节点,但没有冗余,例如:两个节点的Cluster,其中一个挂了,集群就不可用了。
  • * NO_QUORUM – 有节点处于online状态,但达不到法定节点数,此状态下Cluster无法写入,只能读取。
  • * UNKNOWN – 不是online或recovering状态,尝试连接其他实例查看状态。
  • * UNAVAILABLE – 组内节点全是offline状态,但实例在运行,可能实例刚重启还没加入Cluster。

 

 

参考资料:

https://dev.mysql.com/doc/refman/5.7/en/mysql-innodb-cluster-production-deployment.html

 

Be First to Comment

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    This site uses Akismet to reduce spam. Learn how your comment data is processed.