MySQL 8 InnoDB 集群生产部署

sofast 2020-02-22

生产部署InnoDB集群

1、先决条件

InnoDB集群使用组复制技术,所以InnoDB中的实例需要满足组复制要求。可以查看MySQL文档中组复制相关的部分,也可以通过AdminAPI提供的dba.checkInstanceConfiguration() 方法检查实例是否满足要求,如果不满足可以使用 dba.configureInstance() 方法配置实例以满足要求。

组复制成员的表需要使用InnoDB存储引擎。如果表示用其他存储引擎,需要先转化为使用InnoDB存储引擎。

Performance Schema需要开启,这个默认是打开的。

MySQL Shell提供用于配置服务器的脚本需要Pthon 2.7以上的版本。通过/usr/bin/env python查看Python当前版本,不满足的话,如果通过源码安装更新的Python版本,注意将其加入到环境变量中。比如在/usr/bin/python和安装位置做个软链接。

从MySQL 8.0.17版本开始,InnoDB中的实例必须有唯一的Server ID。如果通过Cluster.addInstance(instance) 操作添加实例到集群环境,而该实例的Server ID与集群中实例冲突,则添加实例的操作失败。

2、下载并安装需要的组件

MySQL Server

MySQL Shell

MySQL Router

通过RPM方式安装MySQL Shell 和 MySQL Router:

rpm -ivh mysql-shell-8.0.18-1.el7.x86_64.rpm mysql-router-community-8.0.18-1.el7.x86_64.rpm

3、InnoDB集群生产部署涉及的内容

用户权限

InnoDB集群创建的用户

配置主机名

推荐的解决方案:每台机器配置其他机器的IP地址到主机名的映射,比如:

vim /etc/hosts

192.168.1.140 mysql-node1
192.168.1.150 mysql-node2
192.168.1.160 mysql-node3

配置端口

localAdress地址端口计算方式:实例端口 * 10 + 1。如果得出的值超过65535,在创建集群时,指定localAdress端口,比如:

mysql-js> dba.createCluster(‘testCluster‘, {‘localAddress‘:‘:33061‘}

如果有防火墙或者启用了SElinux,注意集群之间端口的连通性。

持久化配置

下面这些操作之后需要持久化更改:

• dba.configureInstance()
• dba.createCluster()
• Cluster.addInstance()
• Cluster.removeInstance()
• Cluster.rejoinInstance()

实例满足下面要求,支持自动持久化更改:

MySQL 8.0.11以上版本

persisted_globals_load 系统变量设置为 ON

启动实例没有添加--no-defaults 选项

注:如果AdminAPI命令在本地实例运行,即运行在本地的MySQL Shell上。对于不支持持久化配置的MySQL Server版本,需要本地进行更改,比如:dba.configureLocalInstance().如果支持持久化,会将更改写到mysqld-auto.cnf配置文件中。

如果AdminAPI命令运行在远端实例,支持持久化,会将更改写到mysqld-auto.cnf配置文件中。不支持持久化,AdminAPI不能自动更改my.cnf选项文件,需要本地更改,比如:dba.configureLocalInstance().

Verbose Logging

控制在MySQL Shell执行AdminAPI日志输出等级,比如:

shell> mysqlsh --log-level=DEBUG3

生成的日志文件在:~/.mysqlsh/mysqlsh.log 

控制AdminAPI在MySQL Shell中日志输出量:

mysql-js> dba.verbose=2

配置生产实例

 
 

configureInstance()

相关推荐