1个不稳定版本
0.5.0-yb-1 | 2024年1月4日 |
---|
#2092 在 数据库接口
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"
在URL中指定此参数后,驱动程序将获取并维护从给定端点(如示例中所示,为127.0.0.1
)提供的tservers列表,这些端点位于YugabyteDB集群中,并将连接均匀地分配给它们。
此列表每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
。
依赖项
~11–22MB
~329K SLoC