配置实例 后 ,通过完成以下步骤创建 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 自动创建的所有帐户都具有严格的身份验证要求,则可以为 replicationAllowedHost
ReplicaSet 的配置选项设置一个值。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.
replicationAllowedHost
InnoDB ReplicaSet 在创建后可以进行修改,以通过 配置选项 设置变量setOption
,方法是发出:
mysql-js> rs.setOption('replicationAllowedHost', '192.0.2.0/24')