9.3 创建InnoDB副本集
配置实例 后 ,通过完成以下步骤创建 InnoDB ReplicaSet:
-
连接到实例并用于
dba.createReplicaSet()创建使用 MySQL 异步复制的托管 ReplicaSet,而不是 InnoDB Cluster 使用的 MySQL 组复制。MySQL Shell 连接到的 MySQL 实例用作 ReplicaSet 的初始主实例。该
dba.createReplicaSet()操作执行多项检查以确保实例状态和配置与托管 ReplicaSet 兼容,如果是,则在实例上初始化元数据模式。如果ReplicaSet创建成功,
ReplicaSet则返回一个对象。因此,最佳实践是将返回值分配ReplicaSet给变量。这使您能够使用 ReplicaSet,例如通过调用status()操作。example要创建以实例命名的 ReplicaSetrs-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对象来验证操作是否成功。例如,它提供了*ReplicaSet*.status()显示有关 ReplicaSet 的信息的操作。返回的值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"
}
}
此输出显示已创建名为 的 ReplicaSet
example,并且主副本为rs-1。目前,只有一个实例,下一步的任务是向 ReplicaSet 添加更多实例。
ReplicaSet加密和认证
从 MySQL Shell 8.0.33 开始,副本可以验证源的身份并使用客户端 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:与“必需”相同,但另外根据配置的证书颁发机构 (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"});
笔记
从 MySQL Shell 8.0.32 开始,所有新的复制通道都是在启用 SSL 的情况下创建的。对于 MySQL Shell 8.0.32 采用的复制组而言,情况并非如此。它们的复制通道保持未加密状态。
InnoDB ReplicaSet 复制允许主机
使用 MySQL Shell 8.0.28 及更高版本创建 InnoDB ReplicaSet 时,如果您有安全需求,希望 AdminAPI 自动创建的所有帐户都具有严格的身份验证要求,则可以为 replicationAllowedHostReplicaSet 的配置选项设置一个值。MySQL replicationAllowedHost 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.
replicationAllowedHostInnoDB ReplicaSet 在创建后可以进行修改,以通过 配置选项 设置变量setOption,方法是发出:
mysql-js> rs.setOption('replicationAllowedHost', '192.0.2.0/24')