配置完实例后,通过完成以下步骤来创建 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')