生产部署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集群生产部署涉及的内容

用户权限

可以使用非root用户管理集群,这个用户可以手工配置,也可以通过dba.configuration()方法配置。MySQL推荐使用方法来生成集群管理用户。

InnoDB集群创建的用户

InnoDB创建内部用户用于集群成员内部通信。dba.createCluster()方法会生成内部用户。

配置主机名

推荐的解决方案:每台机器配置其他机器的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':'root@mysql-node1: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

配置生产实例

dba.checkInstanceConfiguration() 检查实例是否满足要求。这个方法只接受TCP/IP连接。

dba.configureInstance() 配置实例。这个方法接收一些选项,可以通过这个方法创建管理集群的用户。

dba.createCluster() 创建集群

var cluster = dba.createCluster('testcluseter') 这里将集群对象赋值给变量cluster,方便集群相关管理操作。

var cluster = dba.getCluster('testcluster') 集群创建后,可以通过 dba.getCluster() 获取集群对象。

cluster.addInstance() 添加实例到集群

cluster.status() 查看集群状态

注:这些方法一般需要一个 URI连接,这个URI连接类似Oracle DB做远端连接的格式,比如:icadmin@192.168.1.140:3306

在部署过程中遇到一个这样的问题:

[ERROR] [MY-013107] [Repl] Plugin group_replication reported: 'The member is configured with a lower_case_table_names option value '1' different from the group '0'.

安装MySQL Router

MySQL Router提供了一种自动切换连接,故障转移的功能,类似MHA。

MySQL 建议将MySQL Router安装在应用程序服务器,也可以安装在一台公用的机器上。

安装:

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

加载InnoDB metadata:

mysqlrouter --bootstrap icadmin@192.168.1.140:3306 --user=mysqlrouter

启动MySQL Router:

mysqlrouter &

测试连接:

mysqlsh --uri icadmin@localhost:6446

ERROR: MySQL Error 2003 (HY000): Can't connect to remote MySQL server for client connected to '0.0.0.0:6446'

查看MySQL Router日志文件:

less /var/log/mysqlrouter/mysqlrouter.log

2020-02-21 23:38:09 metadata_cache WARNING [7fc7c0c4b700] Failed connecting with Meta
data Server mysql-node3:3306: Unknown MySQL server host 'mysql-node3' (110) (2005)
2020-02-21 23:38:09 metadata_cache ERROR [7fc7c0c4b700] Failed to connect to metadata
server

MySQL 8 InnoDB 集群生产部署的更多相关文章

  1. MySQL 8 InnoDB 集群管理

    使用 dba.checkInstanceConfiguration() 在添加实例到集群中前,使用该方法检查实例配置是否满足InnoDB 集群要求. 使用 dba.configureLocalInst ...

  2. LVS+Keepalived+Squid+Nginx+MySQL主从高性能集群架构部署方案

    方案一,在tomcat的workers.properties里面配置相关条件 worker.tomcat.lbfactor= worker.tomcat.cachesize= worker.tomca ...

  3. Hyperledger Fabric 1.0 从零开始(八)——Fabric多节点集群生产部署

    6.1.平台特定使用的二进制文件配置 该方案与Hyperledger Fabric 1.0 从零开始(五)--运行测试e2e类似,根据企业需要,可以控制各节点的域名,及联盟链的统一域名.可以指定单独节 ...

  4. MySQL+MGR 单主模式和多主模式的集群环境 - 部署手册 (Centos7.5)

    MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决方案.MGR是MySQL官方在5.7.17版本引进的一个数据库高可用与 ...

  5. Centos7.5基于MySQL5.7的 InnoDB Cluster 多节点高可用集群环境部署记录

    一.   MySQL InnoDB Cluster 介绍MySQL的高可用架构无论是社区还是官方,一直在技术上进行探索,这么多年提出了多种解决方案,比如MMM, MHA, NDB Cluster, G ...

  6. 面试系列10 es生产集群的部署架构

    如果你确实干过es,那你肯定了解你们生产es集群的实际情况,部署了几台机器?有多少个索引?每个索引有多大数据量?每个索引给了多少个分片?你肯定知道! 但是如果你确实没干过,也别虚,我给你说一个基本的版 ...

  7. 部署MYSQL高可用集群

                                                  mysql-day08     部署MYSQL高可用集群 u 集群架构                   ...

  8. 容器化 | 在 K8s 上部署 RadonDB MySQL Operator 和集群

    作者:程润科 数据库研发工程师 编辑:张莉梅 高级文档工程师 视频:钱芬 高级测试工程师 本文将演示在 Kubernetes 上部署 RadonDB MySQL Kubernetes 2.X(Oper ...

  9. MySQL数据库企业集群项目实战(阶段三)

                              MySQL数据库企业集群项目实战(阶段三) 作者 刘畅 时间 2020-10-25 目录 1 架构拓扑图 1 1.1 方案一 1 1.2 方案二 2 ...

随机推荐

  1. CSS学习笔记--Div+Css布局(div+span以及盒模型)

    1.DIV与SPAN 1.1简介 1.DIV和SPAN在整个HTML标记中,没有任何意义,他们的存在就是为了应用CSS样式 2.DIV和span的区别在与,span是内联元素,div是块级元素 内联元 ...

  2. Java 中的各种锁和 CAS + 面试题

    Java 中的各种锁和 CAS + 面试题 如果说快速理解多线程有什么捷径的话,那本文介绍的各种锁无疑是其中之一,它不但为我们开发多线程程序提供理论支持,还是面试中经常被问到的核心面试题之一.因此下面 ...

  3. Codeforces_460_B

    http://codeforces.com/problemset/problem/460/B 枚举s(X). #include<cstdio> #include<iostream&g ...

  4. java代码之美(15)---Java8 Function、Consumer、Supplier

    Java8 Function.Consumer.Supplier 有关JDK8新特性之前写了三篇博客: 1.java代码之美(1)---Java8 Lambda 2.java代码之美(2)---Jav ...

  5. C# 把带有父子关系的数据转化为------树形结构的数据 ,以及 找出父子级关系的数据中里面的根数据Id

    紧接上一篇,将List<Menu>的扁平结构数据, 转换成树形结构的数据 返回给前端   ,   废话不多说,开撸! --------------------- 步骤: 1. 建 Menu ...

  6. Go语言实现:【剑指offer】字符流中第一个不重复的字符

    该题目来源于牛客网<剑指offer>专题. 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是 ...

  7. elasticsearch kibana 安装 配置

    二.Elasticsearch  配置信息 2.1  因为 Elasticsearch 可以执行脚本文件,为了安全性,默认不允许通过 root 用户启动服务.我们需要新创建用户名和用户组启动服务 2. ...

  8. Linux ftp VSftp

    一.Linux FTP服务器分类: <1>wu-ftp <2>proftp=profession ftp <3>vsftp=very security ftp  本 ...

  9. docker启动nginx的ssl配置

    前提条件 一台云服务器(阿里云.腾讯云等的centOS) 服务器上面要有docker(安装方法这里不做介绍) 一个域名 ssl证书(两个文件:一个key后缀,一个pem后缀:生成方法很多这里不再介绍) ...

  10. 对象级别锁 vs 类级别锁(Java)

    前言 对于多线程(并发)和Spring Boot这两块在同步进行学习中,在看到使用synchronized关键字使操作同步时,看到和C#中不一样的东西,所以这里呢,就深入学习了下,若有错误之处,还望指 ...