Shared Server 的高可用特性

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: 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

相关实践学习
MySQL基础-学生管理系统数据库设计
本场景介绍如何使用DMS工具连接RDS,并使用DMS图形化工具创建数据库表。
相关文章
|
存储 固态存储 算法
第五章:OB Server的存储引擎
第五章:OB Server的存储引擎
476 0
|
负载均衡 监控 算法
架构扩展ha-proxy
ha-proxy是一款高性能的负载均衡软件。因为其专注于负载均衡这一些事情,因此与nginx比起来在负载均衡这件事情上做更好。
221 3
|
NoSQL Redis
Redis进阶-Redis集群 【高可用切换】&【cluster-require-full-coverage】集群是否完整才能对外提供服务
Redis进阶-Redis集群 【高可用切换】&【cluster-require-full-coverage】集群是否完整才能对外提供服务
228 0
|
NoSQL MongoDB 数据库
分布式服务器框架之Server.Core库中实现YFUniqueEntity、YFUniqueIDBase 管理MongoDB 自定义Id的自增
YFUniqueEntity是数据库中的结构,GetUniqueID函数中会根据Type和自增步长去数据库中寻找该类型的当前ID是多少,然后会用当前的Id去加上步长,把更新后的新ID插入到MongoDB中记录着ID的那张表里。
|
存储 缓存 NoSQL
分布式服务器框架之Servers.Core中 实现Log模块设计 写入MongoDB数据库
游戏服务器中都需要用到Log模块,log模块存在的意义第一个是将log输出到控制台又或者是写入到log文件中,出了BUG方便定位;第二是常用于将用户的数据(例如玩家登录、道具购买量)将这种log统计到数据库中,方便统计用户留存信息、数据分析等。
|
缓存 Rust Kubernetes
Rust 写的 Undermoon Redis 集群 - Redis Cluster Protocol与Server Proxy
Rust 写的 Undermoon Redis 集群 - Redis Cluster Protocol与Server Proxy
382 0
Rust 写的 Undermoon Redis 集群 - Redis Cluster Protocol与Server Proxy