Shared Server 的高可用特性

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: PolarDB for PostgreSQL 提供了更多企业级数据库的特性。本实验将体验其 Shared Server 的高可用特性。

Shared Server 的高可用特性

1. 资源创建

开始实验之前,您需要先创建相关实验资源。

登录成功后,搜索并进入 PolarDB 的控制台:

  1. 在实验室页面,单击创建资源。
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。

说明:资源创建过程需要3~8分钟。


2. 创建用户并登录到 DMS

首先打开桌面的 Chrome 浏览器,使用左侧给出的子用户名称和子用户密码登录。

登录成功后,搜索并进入 PolarDB 的控制台:

进入控制台以后,点击全局概览,可以看到正在运行中的 PolarDB for PostgreSQL 实例。

点击这个实例查看详情:

实例详情如下:

对于一个新实例来说,我们需要创建一个新的用户才可以使用 PolarDB 实例。点击创建用户,创建一个名为 polardb 的高权限用户。

另外,如果需要使用自己的客户端来连接阿里云上的 PolarDB 实例,还需要配置客户端的 IP 地址白名单。只有在这个白名单中的 IP 地址才可以连接到 PolarDB 上。那么这里我们可以直接使用阿里云数据库的 DMS(数据管理服务),从网页上直接连接到数据库。这样就会使用 DMS 的内部 IP 地址来连接数据库,是不需要配置 IP 白名单的。

点击登录数据库,进入到 DMS 控制台。

输入刚才创建的数据库账号的用户名和密码:

成功登录 DMS 以后,点击左侧的 SQL 窗口,选择连接默认数据库 postgres :


3. 参数学习

shared server为保证系统性能和兼容特性,提供了众多参数来适配不同的场景。

实验版本的shared server功能默认关闭,由于开启参数需要使用后台超级管理员权限(后续会逐步放开权限)并配合实例的重启,

受限于演示环境的权限限制不能开启直接演示,本次实验着重让大家了解下相关的系统参数,对于并发连接时的backend的共享效果直接在后一页通过截图展示(最后一页不用实践)。

  1. shared server使用的核心参数

1.1 polar_enable_shared_server:控制shared server功能开启,当前默认关闭

1.2 polar_ss_shared_memory_size控制shared server使用全局共享内存的上限, 默认1MB

-单位kB, 为0时表示关闭Shared Server

-单个空白session要占用共享内存2k,一个查询的prepare plancache占用0.6k。 plancache的内存占用是大头,如果单个session有较多prepare plancache, 多个session时很容易oom。

show polar_ss_shared_memory_size;
show polar_enable_shared_server;

1.3 polar_enable_shm_aset:参数控制是否开启全局共享内存,当前默认关闭(需要超级管理员用户配置,实验环境暂不支持

show polar_enable_shm_aset;

具体配置方式如下

注意:下面代码不需要实验

alter system set polar_enable_shm_aset = on;

alter system set polar_ss_shared_memory_size = '1MB';

alter system set polar_enable_shared_server = 1;

select pg_reload_conf();

  1. 与shared server相关的参数众多,为了可以在少量并发场景下可以察到backend共享,可以对如下参数进行调整,从而达到降低shared server开启阀值的目的。

2.1 polar_ss_dispatcher_count:控制dispatcher最大个数, 默认2,最大为cpu核数

2.2 polar_ss_client_threshold_for_shared:控制超过多少个连接后, 新连接才会使用SS。 默认100

show polar_ss_dispatcher_count;
show polar_ss_client_threshold_for_shared;
  1. 除此之外还有很多策略参数,这里简单举两例,剩余参数搭建可以关注后续官网发布。

polar_ss_client_schedule_policy:控制client选择dispatcher的策略, 默认load-balancing, 支持round-robin, random

polar_ss_session_schedule_policy:控制session选择backend的策略, 默认fifo, 支持random, disposable, dedicated

show polar_ss_client_schedule_policy;
show polar_ss_session_schedule_policy;


4. backend共享验证

由于实验环境的限制,对backend共享的场景直接通过截图展示:

其中pg_backend_pid表示session id,polar_session_backend_pid表示使用的backend id

图一和图二分别可以观测到:

  1. 同一个seesion不同的事务内可以使用不同的backend;
  2. 不同的session可以使用同一个backend id;

图一:

图二:

实验链接:https://developer.aliyun.com/adc/scenario/12384f08c88048acadcc756851664259

相关文章
|
9月前
|
存储 固态存储 算法
第五章:OB Server的存储引擎
第五章:OB Server的存储引擎
379 0
|
7月前
|
负载均衡 应用服务中间件 Nacos
最全解决:微服务之间调用出现Load balancer does not have available server for client
最全解决:微服务之间调用出现Load balancer does not have available server for client
740 1
最全解决:微服务之间调用出现Load balancer does not have available server for client
|
C# 容器
分布式服务器框架之Server.Common库中实现 秒级定时器
定时器模块是服务器中的常用组件,本文带你实现一个具有基本功能的定时器模块要想设计一个定时器模块,一般包含两部分,一个是定时器对象(ServerTimer),另一个管理定时器对象的管理者(TimerManager)也叫定时器容器;定时器使用了C#内System库里面的Timer定时器作为定时器的主驱动
分布式服务器框架之Server.Common库中实现 秒级定时器