配置完实例后,通过完成以下步骤来创建 InnoDB ReplicaSet。
-
连接到实例并使用
dba.createReplicaSet()创建一个使用 MySQL 异步复制的托管 ReplicaSet,而不是 InnoDB 集群使用的 MySQL 组复制。MySQL Shell 连接到的 MySQL 实例用作 ReplicaSet 的初始主实例。dba.createReplicaSet()操作执行一些检查,以确保实例状态和配置与托管 ReplicaSet 兼容,如果兼容,则会在实例上初始化元数据模式。如果 ReplicaSet 成功创建,则会返回一个
ReplicaSet对象。因此,最佳做法是将返回的ReplicaSet分配给一个变量。这使您能够使用 ReplicaSet,例如通过调用<ReplicaSet>status()操作。要在一个名为example的实例rs-1上创建一个 ReplicaSet 并将其分配给rs变量,请输入mysql-js> \connect root@rs-1:3306 ... mysql-js> var rs = dba.createReplicaSet("example") A new replicaset with instance 'rs-1:3306' will be created. * Checking MySQL instance at rs-1:3306 This instance reports its own address as rs-1:3306 rs-1:3306: Instance configuration is suitable. * Updating metadata... ReplicaSet object successfully created for rs-1:3306. Use rs.addInstance() to add more asynchronously replicated instances to this replicaset and rs.status() to check its status.注意ReplicaSet 的名称不能为空,且长度不超过 63 个字符。它只能以字母数字字符或 _(下划线)开头,并且只能包含字母数字字符、_(下划线)、.(句点)或 -(连字符)。
-
使用返回的
ReplicaSet对象验证操作是否成功。例如,这提供操作,该操作显示有关 ReplicaSet 的信息。返回的ReplicaSet.status()ReplicaSet已经分配给了变量rs,因此请输入mysql-js> rs.status() { "replicaSet": { "name": "example", "primary": "rs-1:3306", "status": "AVAILABLE", "statusText": "All instances available.", "topology": { "rs-1:3306": { "address": "rs-1:3306", "instanceRole": "PRIMARY", "mode": "R/W", "status": "ONLINE" } }, "type": "ASYNC" } }此输出显示已创建名为
example的 ReplicaSet,并且主实例是rs-1。目前只有一个实例,下一步是将更多实例添加到 ReplicaSet。
副本可以验证源的身份并使用客户端 SSL 证书进行身份验证。已将以下选项添加到 dba.createReplicaSet
-
memberAuthType:定义用于内部复制帐户的身份验证类型。此选项采用以下值之一PASSWORD:帐户仅使用密码进行身份验证。CERT_ISSUER:帐户使用客户端证书进行身份验证,该证书必须与预期颁发者匹配。此值等效于VERIFY_CA。CERT_SUBJECT:帐户使用客户端证书进行身份验证,该证书必须与预期颁发者和主题匹配。此值等效于VERIFY_IDENTITY。CERT_ISSUER_PASSWORD:帐户使用PASSWORD和CERT_ISSUER值的组合进行身份验证。CERT_SUBJECT_PASSWORD:帐户使用PASSWORD和CERT_SUBJECT值的组合进行身份验证。
certIssuer:定义身份验证所需的证书颁发者(如果memberAuthType包含CERT_ISSUER或CERT_SUBJECT)。certSubject:定义实例的证书主题。如果memberAuthType包含CERT_SUBJECT,则需要此参数。-
replicationSslMode:定义 replicaSet 中复制通道的身份验证类型。此选项采用以下值之一DISABLED:复制通道禁用 TLS 加密。REQUIRED:复制通道启用 TLS 加密。VERIFY_CA:与 REQUIRED 相同,但还会针对配置的证书颁发机构 (CA) 证书验证对等服务器 TLS 证书。VERIFY_IDENTITY:与 VERIFY_CA 相同,但还会验证对等服务器证书是否与尝试连接到的主机匹配。AUTO:如果实例支持,则启用 TLS 加密。如果实例不支持 TLS,则禁用。
例如
mysql-js> myreplicaset = dba.createReplicaSet("replicaSet1",
{ "replicationSslMode": "VERIFY_IDENTITY", "memberAuthType":"CERT_SUBJECT",
"certIssuer":"/CN=MyCertAuthority", "certSubject": "/CN=mysql-5.local"});
所有新的复制通道都是启用 SSL 创建的。
创建 InnoDB ReplicaSet 时,如果您有安全要求,需要将 AdminAPI 自动创建的所有帐户设置为严格的身份验证要求,您可以为 ReplicaSet 的 replicationAllowedHost 配置选项设置一个值。 replicationAllowedHost MySQL Shell 选项允许您将 ReplicaSet 的内部管理复制帐户设置为严格的基于子网的过滤器,而不是默认的通配符值 %。 replicationAllowedHost 选项可以取字符串值。例如,要将 replicationAllowedHost 设置为 192.0.2.0/24,请输入
mysql-js> var rs = dba.createReplicaSet('example', {replicationAllowedHost:'192.0.2.0/24'})
A new replicaset with instance 'rs-1:3306' will be created.
* Checking MySQL instance at rs-1:3306
This instance reports its own address as rs-1:3306
rs-1:3306: Instance configuration is suitable.
* Updating metadata...
ReplicaSet object successfully created for rs-1:3306.
Use rs.addInstance() to add more asynchronously replicated instances to this replicaset
and rs.status() to check its status.
创建 InnoDB ReplicaSet 后,可以通过 setOption 配置选项修改它以设置 replicationAllowedHost 变量,方法是发出以下命令
mysql-js> rs.setOption('replicationAllowedHost', '192.0.2.0/24')