配置好实例后,按照以下步骤创建 InnoDB ReplicaSet
-
连接到一个实例,并使用
dba.createReplicaSet()
创建一个使用 MySQL 异步复制的托管 ReplicaSet,而不是 InnoDB 集群使用的 MySQL 组复制。MySQL Shell 连接到的 MySQL 实例用作 ReplicaSet 的初始主实例。dba.createReplicaSet()
操作执行一些检查,以确保实例状态和配置与托管 ReplicaSet 兼容,如果兼容,则会在实例上初始化元数据模式。如果 ReplicaSet 创建成功,则会返回一个
ReplicaSet
对象。因此,最佳实践是将返回的ReplicaSet
分配给一个变量。这使您能够使用 ReplicaSet,例如通过调用<ReplicaSet>status()
操作。要创建名为example
的 ReplicaSet,并在实例rs-1
上将其分配给变量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,则禁用 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
配置选项设置一个值。MySQL Shell 选项 replicationAllowedHost
允许您将 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')