开通RDS for MySQL数据库代理实现读写分离
创建RDS for MySQL实例后,您可以开通数据库代理,通过代理地址实现读写请求的自动转发。写请求自动访问主节点,读请求按照数据库代理的路由模式分发到各个节点,降低主节点的负载。
本章节介绍使用数据库代理实现读写分离的过程,主要流程如下:
使用须知
- 在开通数据库代理前,需要有已购买成功的RDS for MySQL实例。
- 主实例和只读实例的状态必须均为“正常”。
- 数据库代理支持的区域和版本限制,请参见数据库代理约束与限制。
步骤1:开通数据库代理
- 购买单个数据库代理实例:中国-香港、亚太-曼谷、亚太-新加坡区域默认开通单个数据库代理,即1个RDS for MySQL实例下只能购买1个数据库代理实例。适用于单个业务场景,灵活性低,无法实现业务隔离,仅有单一访问数据库的入口。
- 购买多个数据库代理实例:华北-北京四、华东-上海一、华南-广州、西南-贵阳一区域默认开通多个数据库代理,即一个RDS for MySQL实例下可以购买多个数据库代理实例,最多支持购买4个代理实例。适用于复杂的多业务场景,多代理可以使用多个入口,不同的业务通过不同的入口访问数据库,实现业务隔离,提高资源利用效率。
更多功能介绍,请参见RDS for MySQL数据库代理简介。
更多区域限制,请参见数据库代理约束与限制。
- 单击管理控制台左上角的
,选择区域。
- 单击页面左上角的
,选择“数据库 > 云数据库 RDS”,进入RDS信息页面。
- 在实例列表中,单击目标实例的名称,进入实例的“概览”页面。
- 在左侧导航栏中,单击“数据库代理”。
您还可以在实例的“概览”页面,展开概览详情,单击“读写分离地址”后的“设置”,跳转到“数据库代理”页面。
- 在“数据库代理”页面单击“创建数据库代理”。
- 在开启数据库代理页面,设置以下参数,单击“下一步”。
图1 选择权重负载图2 选择负载均衡
表1 基本信息 参数
描述
计费模式
- 按需计费实例开启数据库代理时,仅支持选择按需计费的代理实例。
- 包周期实例开启数据库代理时,支持选择按需计费或包周期的代理实例。其中,如果选择按需计费的代理,创建成功后支持转为包周期代理。
路由模式
- 权重负载:开启读写分离功能后,用户自行设置主备实例和只读实例的权重。
- 负载均衡:开启了Proxy负载均衡,可以选择该模式。支持基于负载的自动调度策略,读请求将在多个只读节点中按照活跃连接数自动调度,来保证多个只读节点间的负载均衡。
开启数据库代理后,可以修改路由模式,具体操作请参见设置延时阈值和路由模式。
主库接受读
“负载均衡”模式需设置。
- 选择“是”,查询SQL可以发送到主节点和只读节点。
- 选择“否”,查询SQL将仅发送到只读节点,来降低主节点的负载,确保主节点稳定。
性能规格
选择代理实例的规格。创建后可以根据业务需求变更规格,具体请参见变更数据库代理的规格。
如需查看性能指标,请参见表2。
子网
选择代理实例所在的子网。
代理节点数量
支持2~8个节点。创建后可以修改,具体请参见调整代理节点数量。
建议您根据需要连接的只读实例个数设置代理节点数,1个只读实例配1个代理节点。
- 读写分离具备连接保持、读写分离能力。开启读写分离后,将新增1个读写分离连接地址,请将应用连接切换到新地址。
- 读写分离地址:通过读写分离地址连接数据库,可实现读写分离功能。
- 延时阈值:对于成功开启读写分离功能的实例,您可以设置其延时阈值。具体操作请参见设置延迟阈值。
- 负载均衡实例选择:对于成功开启读写分离功能的实例,您可以选择负载均衡实例。
- 确认数据库代理信息。
- 如果需要重新选择,单击“上一步”,修改基本信息。
- 信息确认无误,单击“提交”,下发创建数据库代理请求。
- 创建完成后,可以在“数据库代理”页面查看并管理代理服务信息。
在“概览”页面查看读写分离地址,通过读写分离地址连接数据库,可实现读写分离功能。
该读写分离地址与实例的内网IP地址处于同一VPC和子网,且与实例的内网IP地址并存,互不影响。
图3 查看读写分离地址
- 单击管理控制台左上角的
,选择区域。
- 单击页面左上角的
,选择“数据库 > 云数据库 RDS”,进入RDS信息页面。
- 在实例列表中,单击目标实例的名称,进入实例的“概览”页面。
- 在左侧导航栏中,单击“数据库代理”。
您还可以在实例的“概览”页面,展开概览详情,单击“读写分离地址”后的“设置”,跳转到“数据库代理”页面。
图4 开启读写分离入口 - 在“数据库代理”页面单击“创建数据库代理”。
图5 创建数据库代理
- 在“开启数据库代理服务”页面,填选如下信息后,单击“下一步”。
图6 选择权重负载图7 选择负载均衡
表2 基本信息 参数
描述
计费模式
- 按需计费实例开启数据库代理时,仅支持选择按需计费的代理实例。
- 包周期实例开启数据库代理时,支持选择按需计费或包周期的代理实例。其中,如果选择按需计费的代理,创建成功后支持转为包周期代理。
代理名称
实例名称长度最小为4字符,最大为64个字符,如果名称包含中文,则不超过64字节(注意:一个中文字符占用3个字节),必须以字母或中文开头,区分大小写,可以包含字母、数字、中划线、下划线或中文,不能包含其他特殊字符。
读写属性
- 读写:读写分离。
- 只读:不连接主实例,无法接收写请求。
路由模式
- 权重负载:开启读写分离功能后,用户自行设置主备实例和只读实例的权重。
- 负载均衡:支持基于负载的自动调度策略,读请求将在多个只读节点中按照活跃连接数自动调度,来保证多个只读节点间的负载均衡。
开启数据库代理后,可以修改路由模式,具体操作请参见设置延时阈值和路由模式。
主库接受读
仅“负载均衡”模式需设置。
- 选择“是”,读请求可以发送到主节点和只读节点,这在一定程度上,会增加主节点的负载,请您根据业务需求配置该开关。
- 选择“否”,读请求仅发送到只读节点,来降低主节点的负载,确保主节点稳定。
性能规格
选择代理实例的规格。创建后可以变更规格,具体请参见变更数据库代理的规格。
如需查看性能指标,请参见表2。
代理节点数量
支持2~8个节点。创建后可以修改,具体请参见调整代理节点数量。
建议您根据需要连接的只读实例个数设置代理节点数,1个只读实例配1个代理节点。
权重设置
仅“权重负载”模式需设置。选择需要分配权重的主实例和只读实例。
读权重分配:
- 读权重越高,处理的读请求越多,假设已选2个实例,权重分别设置为100,200,则当前proxy全部读请求自动按照1:2的比例发往已选实例(未选择的实例权重会设置为0)。
- 一个只读实例可以关联多个代理,建议您根据当前主实例下只读实例的已有代理权重和流量拓扑设置当前代理的权重,尽量避免一个只读实例承载过多读请求。
- 对于成功开启读写分离功能的实例,您可以设置其主实例和只读实例的权重。具体操作请参见设置延时阈值和路由模式。
负载均衡实例选择
仅“负载均衡”模式需设置。选择需要参与负载均衡的只读实例。
选择负载均衡时,数据库代理会按照后端数据库节点的活跃连接数情况,来进行读请求的转发,将读请求转发到活跃连接数少的数据库节点上。
对于成功开启读写分离功能的实例,您可以设置负载均衡实例。具体操作请参见设置延时阈值和路由模式。
- 确认数据库代理信息。
- 如果需要重新选择,单击“上一步”,修改基本信息。
- 信息确认无误,单击“提交”,下发创建数据库代理请求。
- 创建完成后,可以在“数据库代理”页面查看并管理代理服务信息。
在“概览”页面查看读写分离地址,通过读写分离地址连接数据库,可实现读写分离功能。
该读写分离地址与实例的内网IP地址处于同一VPC和子网,且与实例的内网IP地址并存,互不影响。
图8 查看读写分离地址
步骤2:进行用户认证
在使用数据库代理连接RDS for MySQL实例前,需要确保当前数据库账号具有访问数据库代理地址的权限,否则将无法通过数据库代理连接到RDS for MySQL实例。
您可以通过以下步骤来检查权限并授权该账号访问数据库代理地址的权限。
- 连接RDS for MySQL实例。
- 实例连接成功后,执行下列SQL语句,查看当前数据库账号的host是否包含数据库代理地址。
SELECT user,host FROM mysql.user;
图9 查看host地址如果地址为%,表示host包含全部网段。
- 如果查询的host不包含数据库代理所在网段,则需要赋予远程访问权限。
例如:使用root用户想要从192.168.0网段连接到RDS for MySQL实例,您可以在DAS用户管理界面将当前账号的主机设置为192.168.%。具体操作请参见编辑用户信息。
图10 设置主机IP
步骤3:检查安全组规则
确保安全组入方向规则允许数据库代理地址访问,默认端口号为3306。
- 在“实例管理”页面,选择目标实例,单击实例名称,进入实例的“概览”页面。
- 在左侧导航栏,单击“连接管理”,在“安全组规则”模块,单击安全组名称,查看安全组规则。
- 在入方向页签下,默认允许3306端口访问。
图11 放通3306端口如果没有该条规则,单击“添加入方向规则”或者“一键添加”,设置安全组规则。图12 添加入方向规则
步骤4:使用读写分离地址连接RDS for MySQL实例
- 参考8,获取读写分离地址和端口。
图13 获取读写分离地址和端口
- 登录弹性云服务器。
详细内容请参考《弹性云服务器用户指南》。
- 执行如下命令,通过读写分离地址连接RDS for MySQL实例。
mysql -h <host> -P <port> -u <userName> -p
示例:
mysql -h 192.168.0.61 -P 3306 -u root -p
出现如下提示时,输入数据库账号对应的密码:Enter password:
当您使用MySQL8.0客户端访问数据库代理时,可能会报错auth user failed。
在连接数据库时添加 --default-auth=mysql_native_password。