首页 > 数据库 >PostgreSQL libpq的客户端故障转移

PostgreSQL libpq的客户端故障转移

时间:2024-11-15 18:46:13浏览次数:1  
标签:PostgreSQL standby libpq session attrs 节点 conn 客户端

什么是libpq

libpq是应用程序使用PostgreSQL的C接口。libpq是一个库函数的集合,它们允许客户端程序传递查询给PostgreSQL后端服务器并且接收这些查询的结果。libpq也是很多其他PostgreSQL应用接口的底层引擎,包括为 C++、Perl、Python、Tcl 和 ECPG编写的接口。
类似于Redis或者Mongodb的客户端,libpq自身可以实现客户端的故障转移,也就是说,PostgreSQL可用数据库集群故障转移之后,客户端也能探测到数据库的身份的变化,无须修改连接字符串的情况下实现“自动故障转移”。


libpq客户端故障转移和负载均衡

libpq的自动故障转移,是根据连接信息中的par_session_attrs来实现的,可以分为以下几种情况:
1,target_session_attrs="read-write"或者“primary”
  数据库连接总是会去找主节点,如果主节点宕机切故障转移到其他节点,连接会连接到新的主节点
2,target_session_attrs=“read-only”
  数据库连接总是会去找standby节点,如果standby节点宕机,则连接失败
3,target_session_attrs=“prefer-standby”
  数据库连接总是会去找standby节点,如果standby节点宕机,可以连接到可用的主节点
4,target_session_attrs=“any”
  理论上来说会去连接集群中的任意一个节点,实际测试发现他只会去连接standby节点,如果standby节点宕机,才回去连主节点,如果standby节点正常之后,又只会连standby节点
5,load_balance_hosts='random',
  在PostgreSQL 16中也有一个负载均衡的增强load_balance_hosts特性,可以再连接串里设置load_balance_hosts为random
  当设置了load_balance_hosts为random之后,在target_session_attrs=“any”的情况下,会随机连接集群中的所有节点。

测试代码如下

import psycopg2
import time

def get_conn_by_attrs(par_session_attrs):
    conn = psycopg2.connect(host="192.168.152.100,192.168.152.101,192.168.152.102",#集群节点IP
                            port="****",
                            database="postgres",
                            user="postgres",
                            password="******",
                            #load_balance_hosts='random',
                            target_session_attrs=par_session_attrs)
    with conn.cursor() as cur:
        cur.execute("select inet_server_addr();")
        var = cur.fetchall()
        print(var)
    time.sleep(1)
    conn.close()


if __name__ == "__main__":
    while 1 > 0:
        try:
            #测试不同target_session_attrs获取连接的差异
            #get_conn_by_attrs(par_session_attrs="read-write")
            #get_conn_by_attrs(par_session_attrs="primary")
            #get_conn_by_attrs(par_session_attrs="read-only")
            #get_conn_by_attrs(par_session_attrs="prefer-standby")
            get_conn_by_attrs(par_session_attrs="any")
        except Exception as err:
            print(err)
            time.sleep(3)

 

客户端故障转移解决了什么问题

1,客户端也能探测到数据库的身份变化之后,实现“自动故障转移”的方式连接到目的节点,应用程序端不需要做任何修改
2,主动实现负载均衡
因此,是否还有必要使用第三方proxy之类的中间件?

 

标签:PostgreSQL,standby,libpq,session,attrs,节点,conn,客户端
From: https://www.cnblogs.com/wy123/p/18548034

相关文章

  • postgresql逆向工程
    packagestanfordcorenlp.wang.biao.diy;importcom.baomidou.mybatisplus.annotation.FieldFill;importcom.baomidou.mybatisplus.generator.FastAutoGenerator;importcom.baomidou.mybatisplus.generator.config.DataSourceConfig;importcom.baomidou.mybatisplus.g......
  • 基于UDP的tftp传输服务的客户端
    效果图下载上传:代码:#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<string.h>#include<unistd.h>#include<netinet/in.h>#include<stdlib.h>#include<......
  • Grafana:监控PostgreSQL数据运维新利器
    在数据驱动的业务环境中,数据库的性能监控是确保数据流畅和系统稳定的关键。PostgreSQL,作为强大的开源关系型数据库,其性能监控尤为重要。Grafana,一个开源的数据可视化和监控平台,提供了一个直观的界面来监控和分析数据。本文将带您了解如何利用Grafana来监控PostgreSQL,让您的数据库......
  • C#不装Oracle客户端,连接数据库的方法
      前几天临时碰到个项目需求,让从Oracle数据库中直接查询视图数据。  按照正常的模式,首先问清楚Oracle版本,然后安装Oracle客户端,更改“listener.ora”监听文件,安装PLSQL,连接、查询。  再在代码中引用“System.Data.OracleClient.dll”,配置连接字符串使用。  太麻烦了! ......
  • Z-Library电子图书馆官方地址入口 国内最新可用镜像网址入口 客户端(持续更新)
    Z-Library:自由获取知识的电子图书馆Z-Library(简称Z-Lib)。曾用名BookFinder。是一个提供广泛学术资源的影子图书馆网站。用户可以在此下载期刊、文章以及各类书籍。其藏书量超过1000万本书籍和8000万篇文章。尽管因版权问题。Z-Library在2022年11月3日遭到封S。但它通过新的官方......
  • PostgreSQL 创建相同结构的表
    我们经常会遇到这样的需求,就是我有一个表A,现在表A由于设计的时候存在一些缺陷,我现在需要创建一个相同结构的表B但是不需要表A的数据,只需要保持其原来的表设计即可。有啥快速的方法没有。下面我介绍下几种常见的方法和每种方法的缺点以及最好的方法。方法一:BEGIN;CREA......
  • more Layer Architecture in Python and postgreSQL17.0
    postgreSQLscript:createtableSchool--創建表(SchoolIdchar(5)NOTNULLPRIMARYKEY,SchoolNamevarchar(500)NOTNULLDEFAULT'',SchoolTelNovarchar(8)NULLDEFAULT'');model:#encoding:utf-8#版权所有20......
  • 客户端与服务器之间双向通讯的5种方式总结(完整代码演示)
    客户端与服务器之间双向通讯的5种方式总结(完整代码演示)  目录1.polling轮循2.long-polling长轮循3.iframe流4.EventSource流5.websocket 首先简单说一下常用的http协议的特点:http是客户端/服务器模式中请求-响应所用的协议,在这种模式中,客户端(一般......
  • 网页版五子棋——对战模块(客户端开发)
    前一篇文章:网页版五子棋——匹配模块(服务器端开发)-CSDN博客项目源代码:Java:利用Java解题与实现部分功能及小项目的代码集合-Gitee.com目录·前言一、前后端交互接口设计二、游戏房间页面基本结构1.游戏房间页面布局2.游戏房间页面样式设计三、实现棋盘信息绘制四......
  • 推荐一个Elasticsearch ES可视化客户端工具:ES-King
    ES-King:开源免费,一个现代、实用的ESGUI客户端,支持多平台。下载地址:https://github.com/Bronya0/ES-King功能清单详尽的集群信息:节点信息、堆内存占用、总内存占用、cpu占用、磁盘占用、网络流量、节点角色、集群健康、5分钟负载、每个节点的字段缓存、段缓存、查询缓存、请求......