前言
![61913ce10784a902a87eacbad4e121f4.png](https://i-blog.csdnimg.cn/blog_migrate/93b562a18eafa1951beb3bafd45ff1cc.jpeg)
上一回我们讲了怎么安装pg_auto_failover,今天就来讲一下客户端怎么配置故障转移。
从PostgreSQL 10版本之后,使用PSQL客户端就可以利用libpq
驱动进行故障转移(不能负载均衡)。也就是我们配置客户端连接,数据库的主节点或者备节点出现故障后,也可以保障业务的连续性。libpq
是一组库函数,允许客户端程序将查询传递到PostgreSQL后端服务器并接收这些查询返回的结果。libpq
还是其他几个PostgreSQL应用程序接口的基础引擎,包括为C ++,PHP,Perl,Python,Tcl,Swift和ECPG编写的接口。这里没有Java,因为Java的故障转移和负载均衡要使用PostgreSQL JDBC驱动程序。
在PSQL客户端,我们只需要配置好多个IP地址端口,调整参数target_session_attrs
就行了。
target_session_attrs
read-write
在连接的时候,只接受可以读写的数据库。顾名思义,当它建立连接后,会发送SHOW transaction_read_only
,如果是on,就代表是只读库,它就会把连接关闭,然后测试第二个数据库,以此类推,直至连接到支持读写的数据库为止。any
,它表示可以允许连接到任意数据库,它会从所有配置的连接中随机选择一个,如果连接的数据库出现故障导致连接断开,会尝试连接其他数据库,从而实现故障转移。
接下来我们来测试一下。
使用read-write连接到主节点
使用target_session_attrs=read-write,就可以连接到主节点进行读-写操作。还是先看一下我们的集群环境。
[postgres@paf1 data]$ pg_autoctl show state
Name | Node | Host:Port | LSN | Reachable | Current State | Assigned State
-------+-------+------------+-----------+-----------