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

新特性 | MySQL InnoDB Cluster Read Replicas(只读副本)

276

推篇徐老师的文章。正文如下:

MySQL Shell 8.1与MySQL 8.1 同日发行,在这个创新版里,MySQL Shell推出了一个新的功能——MySQL InnoDB Cluster Read Replicas,为InnoDB Cluster增加了只读副本。

通过该功能,用户可以分散集群的工作负载,将数据的读取从InnoDB Cluster分散到一个或多个只读副本上,并为InnoDB Cluster提供额外的数据副本。这同样也是MySQL的一个高可用性方案,该架构的示意图如下:

到目前为止,MySQL的高可用方案包括如下:

  • InnoDB Cluster

  • InnoDB ClusterSet

  • InnoDB ReplicaSet

相对于InnoDB ClusterSet而言,InnoDB Cluster ReadReplicas的架构更为简单,通过异步复制,提供InnoDB Cluster的一个或多个只读副本,在一些场景上(读写分离等)更便于DBA对MySQL的操作。

配置InnoDB Cluster ReadReplicas非常灵活,用户可以选择InnoDB Cluster中的任意一成员作为副本的复制源,可以是主要成员,也可以是次要成员,当InnoDB Cluster发生故障转移时,副本可以按照事先的配置重新选择正确的复制源。创建和配置只读副本使用如下语句:

    Cluster.addReplicaInstance('host4:4110', {label: 'RReplica1', replicationSources: ['host2:4101']})

    使用该语句的前提是已经利用MySQL Shell创建了一个InnoDB Cluster,并通过Shell获得该集群的对象“Cluster”,之后使用“addReplicaInstance”进行添加。其中的host4是需要添加的副本,host2则为用户选择的复制源。复制源除了直接指定主机名,还可以使用“primary”或“secondary”,例如

       Cluster.addReplicaInstance('host4:4110', {label: 'RReplica1', replicationSources: 'primary']})
       Cluster.addReplicaInstance('host4:4110', {label'RReplica1'replicationSources'secondary']})

       选择“primary”作为复制源时,副本将仅从主要成员进行复制,如果主要成员发生故障转移,则副本等待新的主要成员上线时继续进行复制。

      此外,用户也可以配置复制源列表,复制源发生故障时,可以按照用户配置的权重,按序选择复制源。例如,

        Cluster.addReplicaInstance('host4:4110', {label: 'RReplica1', replicationSources: ['host2:4101','host3:4102']]})

        当用户部署一个新的只读副本时,副本可以通过克隆方式接受数据,并能够指定数据源。例如,

          cluster.addReplicaInstance('host5:4113',{label'RReplica5'recoveryMethod"clone"cloneDonor"host2:4101"})

          用户可以对加入集群后的只读副本进行修改或删除,删除只读副本时,首先,会删除用于从InnoDB Cluster中进行复制的用户,其次,会删除该副本的元数据,最后,停止复制通道,重置该副本的相关变量值。当删除副本时,副本需要将当前的事务与InnoDB Cluster进行同步,用户可以设置超时,如果超时范围内未能结束同步,则删除操作进行回滚,该副本不能删除。

          副本如果暂时离开集群后可以通过“ Cluster.rejoinInstance”方法重新加入集群,但需要注意,副本中不能出现与InnoDB Cluster不同的GTID。注意,如果副本已经从集群中删除(集群中不存在该副本的元数据),则该副本无法重新加入,只能将其作为新的副本加入。

          只读副本可以通过“Cluster.status()”及“Cluster.describe() ”进行监视,输出信息中包括,角色、状态、地址等信息。例如:

                    "topology": {
            "host1:4100": {
            "address": "host1:4100",
            "memberRole": "PRIMARY",
            "mode": "R/W",
            "readReplicas": {
            "RReplica1": {
            "address": "host4:4110",
            "role": "READ_REPLICA",
            "status": "ONLINE",
            "version": "8.1.0"
            },
            "RReplica2": {
            "address": "host5:4120",
            "role": "READ_REPLICA",
            "status": "ONLINE",
            "version": "8.1.0"
            },
            "RReplica3": {
            "address": "host6:4130",
            "role": "READ_REPLICA",
            "status": "ONLINE",
            "version": "8.1.0"
            }
            },
            "replicationLag": "applier_queue_applied",
            "role": "HA",
            "status": "ONLINE",
            "version": "8.1.0"
            },
                       {
              "address": "127.0.0.1:4110",
              "label": "RReplica1",
              "replicationSources": [
              "PRIMARY"
              ],
              "role": "READ_REPLICA"
              },
              {
              "address": "127.0.0.1:4120",
              "label": "RReplica2",
              "replicationSources": [
              "PRIMARY"
              ],
              "role": "READ_REPLICA"
              },

               

              MySQL InnoDB Cluster Read Replicas的推出,为MySQL又增加了一个高可用性解决方案,用户可以通过它实现读写分离,保存多个数据副本等目的,在一些场景的应用上,又多了一个选择。

                转文至此。


                以下是个人微信公众号,欢迎关注:

              文章转载自戏说数据那点事,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论