暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Mysql shell建立innodb cluster

原创 徐佩怡 2020-08-04
2057

innodb cluster

安装包

截屏20200804 下午4.10.31.png

前提条件

在安装InnoDB Cluster的生产部署之前,请确保要使用的服务器实例满足以下要求:

  1. 组复制要求:
    MySQL :: MySQL 8.0 Reference Manual :: 18.9.1 Group Replication Requirements
  2. 必须是innodb的表才能够使用组复制写入。
  3. 必须启动performance_schema。
  4. MySQL Shell用于配置要在InnoDB Cluster中使用的服务器的配置脚本需要访问Python。MySQL cluster的要求是python版本为2.7及以上。
  5. InnoDB Cluster示例必须拥有唯一的server id。

安装方法

对于沙盒部署,将InnoDB Cluster的组件安装到一台计算机上。沙箱部署仅在一台计算机上本地进行,因此安装仅需在本地计算机上完成一次。
对于生产部署,将组件安装到要添加到群集的每台计算机上。生产部署使用多个运行MySQL服务器实例的远程主机,因此您需要使用诸如SSH或Windows远程桌面之类的工具连接到每台计算机,以执行诸如安装组件之类的任务。

使用以下文档下载和安装组件:

useradd -r -g mysql -s /bin/false mysql
cd /usr/local
tar zxvf mysql-8.0.21-el7-x86_64.tar.gz
ln -s mysql-8.0.21-el7-x86_64 mysql
复制
yum localinstall mysql-shell-8.0.21-1.el7.x86_64.rpm
复制
rpm -i mysql-router-community-8.0.21-1.el7.x86_64.rpm
复制

mysql shell

MySQL Shell包含添加dba全局变量的AdminAPI,该 全局变量提供了用于管理沙箱实例的功能。在clusterAdmin属于集群的所有实例上,用户名和密码必须相同。对于沙盒部署,root用户名和密码在所有实例上都必须相同。

MySQL Shell启动时,默认情况下处于JavaScript模式。通过发出
\js JavaScript模式
\py Python模式
\sql SQL模式来切换模式
在JavaScript和Python模式下,不需要使用分号终止命令。

通过发出\js命令确保处于JavaScript模式:
截屏20200804 下午4.47.32.png

持久化设置

用于群集及其服务器实例的AdminAPI命令会修改实例的配置。根据MySQL Shell连接到实例的方式以及实例上安装的MySQL版本,这些配置更改可以自动保存到实例中。将实例的设置持久化可确保实例重新启动后保留配置更改。
这对于可靠地使用群集非常重要,例如,如果设置未保留,则重新添加后已添加到群集的实例将不会重新加入群集,因为配置更改会丢失。

执行以下操作后,需要进行永久更改:
dba.configureInstance()
dba.createCluster()
Cluster.addInstance()
Cluster.removeInstance()
Cluster.rejoinInstance()

满足以下要求的实例支持自动持久配置更改:
该实例运行的是MySQL 8.0.11或更高版本
persisted_globals_load设定为ON
实例未使用—no-defaults选项 启动
在支持自动保留配置更改的本地实例上,配置更改将保留到实例的 mysqld-auto.cnf文件中,并且配置更改不需要任何其他步骤。在不支持自动持久保存配置更改的本地实例上,需要在本地进行更改,请参阅 配置实例

截屏20200804 下午6.00.48.png

沙箱部署

本教程展示了如何使用MySQL Shell创建由三个MySQL服务器实例组成的InnoDB集群。它包括以下步骤:
1.创建沙箱实例
2.创建沙箱innodb集群
3.将实例添加到innodb集群
4.保留沙箱配置

1.创建沙箱实例

创建一个3310的实例:
MySQL JS > dba.deploySandboxInstance(3310)
输入密码后,会自动启动3310端口的MySQL服务:
截屏20200804 下午4.53.27.png

每个沙箱实例都使用root用户和密码。在生产中不建议这样做。

启动另外两个实例,对应端口为3320、3330

 MySQL  JS > dba.deploySandboxInstance(3320)
 MySQL  JS > dba.deploySandboxInstance(3330)
复制

此时,文件系统,沙箱的位置在/root/mysql-sandboxes下:
截屏20200804 下午5.15.41.png
如果想修改沙箱目录的地址,可以使用mysql-js> shell.options.sandboxDir='/home/user/sandbox1'所有后续与沙盒相关的操作都针对处的实例执行 /home/user/sandbox1。

2.创建沙箱innodb集群

源实例(seed MySQL Server instance)包含要复制到其他实例的数据。沙箱也可以使用MySQL Clone,请参见 第21.2.5节“在InnoDB Cluster中使用MySQL Clone” 。在此示例中,沙箱实例为空白,因此我们可以选择任何实例。

连接3310实例:
MySQL JS > \connect root@localhost:3310 MySQL JS > shell.connect('root@localhost:3310')
截屏20200804 下午5.24.00.png
AdminAPI可以写入本地实例的选项文件。这与生产部署不同,在生产部署中,需要先连接到远程实例并在实例上本地运行MySQL Shell应用程序,然后AdminAPI才能写入实例的选项文件。

使用dba.createCluster()方法以当前连接的实例作为源,创建InnoDB集群:
MySQL localhost:3310 ssl JS > var cluster = dba.createCluster('testCluster')
截屏20200804 下午5.34.07.png
createCluster()方法将InnoDB Cluster元数据部署到所选实例,并将您当前连接的实例添加为源实例。该createCluster()方法返回创建的集群,在上面的示例中,该集群被分配给cluster变量。传递给createCluster() 方法的参数是为此InnoDB Cluster赋名,叫做testCluster。
从图中可以看到,innodb cluster至少需要3个节点。

3.将实例添加到innodb集群

向InnoDB集群添加更多实例。源实例执行的所有事务都会在添加时由每个辅助实例重新执行。这里使用先前在端口3320和3330创建的沙盒实例。
此示例中的源实例是最近创建的,因此几乎为空。几乎没有数据需要从源实例(seed instance)复制到辅助实例(secondary instances)。在生产环境中,源实例上有一个现有数据库,则可以使用MySQL Enterprise Backup之类的工具来确保在复制开始之前,辅助数据库具有匹配的数据。这样可以避免在将数据从主数据库复制到辅助数据库时出现长时间延迟的可能性。

将第二个实例添加进innodb集群:
MySQL localhost:3310 ssl JS > cluster.addInstance('root@localhost:3320')
截屏20200804 下午5.44.16.png
截屏20200804 下午5.44.46.png
提示输入root用户的密码。从源实例中恢复到指定的实例。换句话说,将来自源实例的事务复制到加入集群的实例。
以相同的方式添加第三个实例:
MySQL localhost:3310 ssl JS > cluster.addInstance('root@localhost:3330')

至此,已经创建了具有三个实例的集群:一个主实例和两个辅助实例。

4.保留沙箱配置

将沙箱实例添加到集群后,必须将InnoDB Cluster所需的配置持久化到该实例的每个选项文件中。进行方式取决于实例是否自动支持持久配置更改,请参考我在mysql shell部分写的“持久化设置”的内容。

检查集群是否已创建cluster.status()
截屏20200804 下午6.03.37.png

参考网址:
https://dev.mysql.com/doc/refman/8.0/en/mysql-innodb-cluster-sandbox-deployment.html

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论