热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使用MySQL5.7内置的InnoDB集群

最近到处查资料的时候,发现MySQL5.7终于实现了原生的基于InnoDB的集群功能,于是在此写一篇文章介绍如何配置。我在数据库领域见识尚浅,本文只解释如何配置和使用,不涉及和其他

最近到处查资料的时候,发现MySQL 5.7 终于实现了原生的基于InnoDB的集群功能,于是在此写一篇文章介绍如何配置。

我在数据库领域见识尚浅,本文只解释如何配置和使用,不涉及和其他方案的对比和调优。

核心架构

  • MySQL 5.7 引入了 Group Replication 功能,可以在一组 MySQL 服务器之间实现自动主机选举,形成一主多从结构。经过高级配置后,可以实现多主多从结构。
  • MySQL Router 是一个轻量级透明中间件,可以自动获取上述集群的状态,规划 SQL 语句,分配到合理的 MySQL 后端进行执行。
  • MySQL Shell 是一个同时支持 Javascript 和 SQL 的交互程序,可以快速配置 InnoDB Cluster。

以上三个组件构成了 MySQL InnoDB Cluster

配置演示

1) 创建环境

使用 VirtualBox 创建三个 CentOS 7.4 服务器,命名为 db1,db2,db3,并配置为 “NAT 网络”(而非 “网络地址转换(NAT)”)。

《如何使用 MySQL 5.7 内置的 InnoDB 集群》
《如何使用 MySQL 5.7 内置的 InnoDB 集群》

# 安装 mysql.com yum 源
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# 安装 mysql-community-server、mysql-shell
yum install mysql57-community-release-el7-11.noarch.rpm
yum install mysql-community-server mysql-shell
# 启动 mysqld
systemctl enable mysqld
systemctl start mysqld
# 找到随机密码
cat /var/log/mysqld.log | grep password
# 配置,注意允许 remote root 访问
mysql_secure_installation
# 允许 root 远程访问
echo "UPDATE mysql.user SET host = '%' WHERE user = 'root';FLUSH PRIVILEGES;" | mysql -u root -p
# firewalld 配置
firewall-cmd --add-service=mysql --permanent
firewall-cmd --add-port=13306/tcp --permanent
firewall-cmd --reload
# selinux 配置
yum install policycoreutils-python
semanage port -a -t mysqld_port_t -p tcp 13306

以上配置了三个独立的 MySQL 服务器,互相可以通过内网访问,并可以互相使用 root 用户。

生产环境上不建议直接使用 root 用户,如何配置专用用户权限,参见官方文档 20.2.5 Production Deployment of InnoDB Cluster

然后配置 hosts 表,使得这三台服务器互相可以使用 db1, db2, db3 解析到对方内网地址。

配置每台服务 my.cnf 中 report_host 字段,为自己的 hostname

2) 检查 MySQL 配置

在任一台服务器上启动 mysql-shell

mysqlsh

使用JS命令,检查每台服务器的配置。

dba.checkInstanceConfiguration('root@db1:3306') // 生产模式下此处使用专用用户

上述命令会执行一系列检查,列出有问题的配置,比如:

+----------------------------------+---------------+----------------+--------------------------------------------------+
| Variable | Current Value | Required Value | Note |
+----------------------------------+---------------+----------------+--------------------------------------------------+
| binlog_checksum | CRC32 | NONE | Update the server variable or restart the server |
| enforce_gtid_consistency | OFF | ON | Restart the server |
| gtid_mode | OFF | ON | Restart the server |
| log_bin | 0 | 1 | Restart the server |
| log_slave_updates | 0 | ON | Restart the server |
| master_info_repository | FILE | TABLE | Restart the server |
| relay_log_info_repository | FILE | TABLE | Restart the server |
| transaction_write_set_extraction | OFF | XXHASH64 | Restart the server |
+----------------------------------+---------------+----------------+--------------------------------------------------+

3)修正 MySQL 配置

此时,可以在各台服务器自己的 mysqlsh 上执行

dba.configureLocalInstance('root@localhost:3306') // 此处必须使用 root 用户

可以自动修复配置并写入 my.cnf

也可以按照给出的建议,手工修改各个服务器 my.cnf 中的配置。注意,在启用 binlog 的时候,需要额外增加 server_id 选项,分别设置为 1, 2, 3

《如何使用 MySQL 5.7 内置的 InnoDB 集群》
《如何使用 MySQL 5.7 内置的 InnoDB 集群》

自动配置或手动配置后,重启MySQL,并重新执行 dba.checkInstanceConfiguration,当输出

{
"status": "ok"
}

的时候,表示该服务器检查通过。按上述步骤,完成三台服务器的配置

3) 创建集群

以 db1 为起始主节点,在上面运行 mysqlsh

mysqlsh --uri root@db1:3306 // 生产模式下,此处使用专用用户

执行命令,完成集群创建和子节点添加

// 创建集群
var cluster = dba.createCluster('main')
// 添加子节点
cluster.addInstance('root@db2:3306') // 生产模式下,此处使用专用用户
cluster.addInstance('root@db3:3306') // 生产模式下,此处使用专用用户
// 查看节点信息
cluster.status()

至此,一个3节点,一主多从节点创建完成

创建节点后,在两个子节点上执行 dba.configureLocalInstance,更新 METADATA

4) MySQL Router 的配置

假设将 mysqlrouter 安装在 db2 上,实际生产中可以安装在其他的服务器上。

yum install mysql-router

使用主节点获取配置

mysqlrouter --bootstrap root@db1:3306 --user mysqlrouter #生产模式下,此处使用专用用户

此命令会更新 /etc/mysqlrouter/mysqlrouter.conf 中的配置信息

启动 mysqlrouter

systemctl start mysqlrouter
systemctl enable mysqlrouter

查看日志,就能看到 mysqlrouter 已经启动并准备就绪。

此时尝试连接 6446 端口(读/写)

mysql -u root -h 127.0.0.1 -P 6446 -p

执行命令

SELECT @@port;

就能够看到输出的结果是 3306,也就是已经经由 SQL Router 负载给后端 MySQL 服务器了。

当主节点失效的时候,集群会自动重新选举主节点,SQL Router 也会自动感知这一过程,更新路由。

更多详细信息,诸如多主节点配置,请参阅 http://mysql.com 上的官方文档 MySQL 5.7 Reference Manual :: 20 InnoDB Cluster

《如何使用 MySQL 5.7 内置的 InnoDB 集群》
《如何使用 MySQL 5.7 内置的 InnoDB 集群》


推荐阅读
  • Python项目实战10.2:MySQL读写分离性能优化
    本文介绍了在Python项目实战中进行MySQL读写分离的性能优化,包括主从同步的配置和Django实现,以及在两台centos 7系统上安装和配置MySQL的步骤。同时还介绍了创建从数据库的用户和权限的方法。摘要长度为176字。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文详细介绍了cisco路由器IOS损坏时的恢复方法,包括进入ROMMON模式、设置IP地址、子网掩码、默认网关以及使用TFTP服务器传输IOS文件的步骤。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有