MySQL InnoDB Cluster Read Replicas(只读副本)

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又增加了一个高可用性解决方案,用户可以通过它实现读写分离,保存多个数据副本等目的,在一些场景的应用上,又多了一个选择。

感谢关注“MySQL解决方案工程师”

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/251024.html

联系我们
联系我们
分享本页
返回顶部