1个不稳定版本
0.5.0-yb-1 | 2024年1月4日 |
---|
#2136 in 数据库接口
325KB
7K SLoC
YugabyteDB Rust-Postgres 智能驱动程序
这是一个YugabyteDB SQL的Rust驱动程序。该驱动程序基于 sfackler/rust-postgres,具有以下附加连接属性
load_balance
- 它期望 true/false 作为可能的值。topology_keys
- 它接受逗号分隔的地理位置值。单个地理位置可以给出为 'cloud.region.zone'。也可以指定多个地理位置,用逗号(,
)分隔。yb_servers_refresh_interval
- (默认值:300秒)两次尝试刷新集群节点信息之间的时间间隔,单位为秒。有效值为0到600之间的整数。值0表示每次连接请求时都刷新。范围之外的任何值都将被忽略,并使用默认值。fallback_to_topology_keys_only
: (默认值:false)仅适用于拓扑感知负载均衡。当设置为true时,智能驱动程序不会尝试连接到通过属性指定的主和备用放置之外的服务器。默认行为是回退到整个集群中的任何可用服务器。failed_host_reconnect_delay_secs
- (默认值:5秒)当驱动程序无法连接到服务器时,它将服务器标记为失败。稍后,每次它通过 yb_servers() 刷新服务器列表时,如果它看到失败的服务器在响应中,它仅在 failed-host-reconnect-delay-secs 时间已过之后将服务器标记为UP。
连接负载均衡
用户可以使用此功能进行两种配置。
集群感知/均匀连接负载均衡
在集群感知连接负载均衡中,连接将在集群中的所有tservers之间分布,而不管它们的放置。
要启用集群感知连接负载均衡,请在连接URL中提供参数load_balance
并设置为true,即load_balance=true
。
"postgresql://127.0.0.1:5433/yugabyte?user=yugabyte&password=yugabyte&load_balance=true"
指定此参数后,驱动程序将从指定的端点(如上述示例中的127.0.0.1
)获取并维护YugabyteDB集群中可用的tservers列表,并将连接均匀地分配给它们。
此列表每5分钟刷新一次,当收到新的连接请求时。
应用程序需要使用相同的连接URL创建它所需的每个连接,以确保均匀分配。
拓扑感知连接负载均衡
使用拓扑感知连接负载均衡,用户可以通过指定这些区域作为topology_keys
来针对特定区域的tservers进行定位,这些区域的值格式为cloudname.regionname.zonename
。可以指定多个区域,使用逗号分隔值。
连接将均匀分配到这些区域的tservers。
请注意,您仍然需要指定load_balance=true
来启用拓扑感知连接负载均衡。
"postgresql://127.0.0.1:5433/yugabyte?user=yugabyte&password=yugabyte&load_balance=true&topology_keys=cloud1.datacenter1.rack1"
指定备用区域
对于拓扑感知负载均衡,现在您可以指定备用位置。这不适用于集群感知负载均衡。每个位置值可以后缀一个冒号(:
),后跟1到10之间的偏好值。偏好值:1
表示它是主要位置。偏好值:2
表示它是第一个备用位置,依此类推。如果没有提供偏好值,则视为主要位置(相当于偏好值:1
)。以下是一个示例。
"postgresql://127.0.0.1:5433/yugabyte?user=yugabyte&password=yugabyte&load_balance=true&topology_keys=cloud1.region1.zone1:1,cloud1.region1.zone2:2";
您还可以使用*
来指定给定区域中的所有区域,如下所示。这不适用于云或区域值。
"postgresql://127.0.0.1:5433/yugabyte?user=yugabyte&password=yugabyte&load_balance=true&topology_keys=cloud1.region1.*:1,cloud1.region2.*:2";
驱动程序将尝试以下顺序连接到节点:1) 主要位置中的最少负载节点,否则在2) 指定的情况下,第一个备用节点,否则在3) 指定的情况下,第二个备用节点,依此类推。如果主要位置或任何备用位置中都没有节点可用,则尝试连接到集群中的其余节点。对于每个连接请求,此操作重复进行。
指定刷新间隔
用户可以指定刷新时间间隔(以秒为单位)。这是两次尝试刷新集群节点信息之间的时间间隔。默认值为300。有效值为介于0和600之间的整数。值0表示每个连接请求都刷新。范围之外的任何值都将被忽略,并使用默认值。
要指定刷新间隔,请使用连接URL中的参数yb_servers_refresh_interval
。
"postgresql://127.0.0.1:5433/yugabyte?user=yugabyte&password=yugabyte&yb_servers_refresh_interval=0&load_balance=true&topology_keys=cloud1.region1.*:1,cloud1.region2.*:2";
有关使用tokio-postgres::connect()
演示连接负载均衡配置的工作示例,请参阅driver-examples存储库。
Rust对PostgreSQL的支持。
postgres
原生、同步的 PostgreSQL 客户端。
tokio-postgres
原生、异步的 PostgreSQL 客户端。
postgres-types
Rust 和 Postgres 类型之间的转换。
postgres-native-tls
通过 native-tls 为 postgres 和 tokio-postgres 提供TLS支持。
postgres-openssl
通过 openssl 为 postgres 和 tokio-postgres 提供TLS支持。
运行测试套件
测试套件需要 postgres 以正确的配置运行。最简单的方法是使用 docker。
- 安装
docker
和docker-compose
。- 在 ubuntu 上:
sudo apt install docker.io docker-compose
。
- 在 ubuntu 上:
- 确保您的用户具有 docker 的权限。
- 在 ubuntu 上:
sudo usermod -aG docker $USER
- 在 ubuntu 上:
- 切换到
rust-postgres
仓库的顶层目录。 - 运行
docker-compose up -d
。 - 运行
cargo test
。 - 运行
docker-compose stop
。
依赖项
~9–21MB
~327K SLoC