20.2.6 采用组复制部署

如果您已经有组复制的现有部署,并且想使用它来创建群集,请将adoptFromGR选项传递给dba.createCluster()函数。创建的 InnoDB 集群与复制组是以单主数据库还是多主数据库运行相匹配。

Tip

组复制成员可能包含MyISAM个 table。在将组采纳到 InnoDB 集群之前,将所有此类 table 转换为InnoDB

要采用现有的组复制组,请使用 MySQL Shell 连接到组成员。在以下示例中,采用了单主要组。我们连接到辅助实例gr-member-2,而gr-member-1充当该组的主要实例。使用dba.createCluster()创建集群,并传入adoptFromGR选项。例如:

mysql-js> var cluster = dba.createCluster('prodCluster', {adoptFromGR: true});

A new InnoDB cluster will be created on instance 'root@gr-member-2:3306'.

Creating InnoDB cluster 'prodCluster' on 'root@gr-member-2:3306'...
Adding Seed Instance...

Cluster successfully created. Use cluster.addInstance() to add MySQL instances.
At least 3 instances are needed for the cluster to be able to withstand up to
one server failure.

Tip

如果实例具有super_read_only=ON,则可能需要确认 AdminAPI 可以设置super_read_only=OFF。有关更多信息,请参见超级只读和实例

新群集与组的模式匹配。如果采用的组以单主要模式运行,那么将创建一个单主要集群。如果采用的组以多主要模式运行,则将创建一个多主要群集。例如:

mysql-js> cluster.status();

{
    "clusterName": "prodCluster",
    "defaultReplicaSet": {
        "name": "default",
        "primary": "gr-member-1:3306",
        "ssl": "REQUIRED",
        "status": "OK",
        "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.",
        "topology": {
            "gr-member-2:3306": {
                "address": "gr-member-2:3306",
                "mode": "R/O",
                "readReplicas": {},
                "role": "HA",
                "status": "ONLINE"
            },
            "gr-member-1:3306": {
                "address": "gr-member-1:3306",
                "mode": "R/W",
                "readReplicas": {},
                "role": "HA",
                "status": "ONLINE"
            },
            "gr-member-3:3306": {
                "address": "gr-member-3:3306",
                "mode": "R/O",
                "readReplicas": {},
                "role": "HA",
                "status": "ONLINE"
            }
        }
    }
}

如上所示,新创建的集群是单主集群,并使用gr-member-1作为主集群。