2个版本
新 0.19.7-yb-1-beta.1 | 2024年8月7日 |
---|---|
0.19.7-yb-1-beta | 2023年12月1日 |
#5 in #负载均衡
239 每月下载量
用于 2 crates
415KB
8K 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()刷新服务器列表时,如果它看到失败的服务器在响应中,只有当失败的宿主重新连接延迟时间已过时,它才将服务器标记为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
并以 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) 指定的第二个回退,依此类推。如果在主要放置或任何回退放置中都没有可用的节点,则尝试集群中其余的节点。每次连接请求都会重复此过程。
指定刷新间隔
用户可以指定刷新时间间隔(以秒为单位)。这是两次尝试刷新集群节点信息之间的时间间隔。默认值是 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–20MB
~299K SLoC