2个版本
0.7.10-yb-1-beta.1 | 2024年8月7日 |
---|---|
0.7.10-yb-1-beta | 2023年12月1日 |
在数据库接口中排名第1050
每月下载量447次
在 3 crates中使用
305KB
6.5K 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()刷新服务器列表时,如果它看到失败的服务器在响应中,只有当失败-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 列表,并将连接平均分配到这些 tservers 上。
此列表每 5 分钟刷新一次,当接收到新的连接请求时。
应用程序需要使用相同的连接 URL 创建每个需要的连接,以确保分配是平均的。
拓扑感知连接负载均衡
使用拓扑感知连接负载均衡,用户可以通过指定 topology_keys
并使用格式 cloudname.regionname.zonename
的值来针对特定区域的 tservers。可以指定多个区域,用逗号分隔。
这些区域的连接将平均分配给这些区域的 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) 指定的情况下尝试第二个回退,依此类推。如果在主要放置(s)或任何回退放置中都没有可用的节点,则尝试集群中剩余的节点。对于每个连接请求都重复此过程。
指定刷新间隔
用户可以指定刷新时间间隔,单位为秒。这是两次尝试刷新集群节点信息之间的时间间隔。默认值为 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
~307K SLoC