利用 Pgpool-II 实现 IvorySQL 集群读写分离

时间:2024-10-09 13:47:39

读写分离是数据库架构中的一种常见策略,它通过将读操作和写操作分开处理来优化数据库的负载,可以显著提高数据库系统的性能和可伸缩性。

Pgpool-II 是一个强大的 PostgreSQL 中间层代理,能够为PostgreSQL 集群提供读写分离、负载均衡等功能。通过正确配置 pgpool.conf 和使用 pcp 命令,可以有效地管理和优化 PostgreSQL 集群的性能与可靠性。

IvorySQL 作为一款基于 PostgreSQL 研发的兼容 Oracle 的数据库,同样完美适配Pgpool-II,通过搭建IvorySQL流复制集群、配置Pgpool-II等一系列操作后,即可完成一个高效易用的读写分离架构。下面我们将开始介绍Pgpool-II与IvorySQL适配过程及读写分离实践方案。

1

系统环境及应用版本

操作系统:CentOS Stream 9

数据库版本:IvorySQL 3.3

pgpool版本:Pgpool-II-4.5.2

2

IvorySQL 3.3安装与运行

CentOS Stream 9 已支持一键安装IvorySQL3.3

dnf install -y https://yum.highgo.ca/dists/ivorysql-rpms/repo/ivorysql-release-3.0-1.noarch.rpmdnf install -y ivorysql3 ivorysql3-server ivorysql3-contrib ivorysql3-test

配置IvorySQL​​​​​​​

sudo chown -R ivorysql:ivorysql /usr/local/ivorysqlsu ivorysqlcd ~vim .bash_profile

将以下配置写入~/.bash_profile文件并使用source命令该文件使环境变量生效:​​​​​​​

PATH=/usr/local/ivorysql/ivorysql-3/bin:$PATHexport PATHLD_LIBRARY_PATH=/usr/local/ivorysql/ivorysql-3/libexport LD_LIBRARY_PATH​​​​​​
source ~/.bash_profileinitdb -D /usr/local/ivorysql/ivorysql-3/datapg_ctl -D /usr/local/ivorysql/ivorysql-3/data -l ivory.log start

更多IvorySQL3.3的安装与数据库启动说明,请查阅文档:

https://docs.ivorysql.org/cn/ivorysql-doc/v3.3/v3.3/6

3

源码编译及安装 Pgpool-II​​​​​​​

wget https://www.pgpool.net/mediawiki/images/pgpool-II-4.5.2.tar.gztar -xvf pgpool-II-4.5.2.tar.gzcd pgpool-II-4.5.2./configure --prefix=<path>make & make install

4

安装扩展函数

为提高 Pgpool-II 与 PostgreSQL 的集成稳定性,我们通常还需要安装一些扩展函数。

以pgpool-regclass为例​​​​​​​

cd sql/pgpool-regclassmake && make installpsql -U ivorysql -f pgpool-regclass.sql template1

5

配置Pgpool-II及启动​​​​​​​

cd /usr/local/etccp pcp.conf.sample pcp.confcp pgpool.conf.sample pgpool.conf

修改 pcp.conf​​​​​​​

pg_md5 postgresecho "postgres:e8a48653851e28c69d0506508fb27fc5" >> pcp.conf

修改pgpool.conf

对下列配置选项进行修改​​​​​​​

listen_addresses = '*'pcp_listen_addresses = '*'backend_hostname0 = '127.0.0.1'backend_port0 = 5432                     backend_weight0 = 1sr_check_period = 20sr_check_user = 'ivorysql'sr_check_password=''sr_check_database = 'ivorysql'

保存修改后,启动Pgpool-II

pgpool -f pgpool.conf

pgpool将自动在后台运行,尝试使用 Pgpool-II 端口连接IvorySQL

psql -p 9999 -U ivorysql

我们成功通过Pgpool-II连上IvorySQL,IvorySQL与Pgpool-II适配成功。

7

一主一备的IvorySQL读写分离实践方案

接下来,简单介绍如何配置pgpool实现读写分离。

首先,本地启动两个数据库,并已开启流复制,5432为主库,5433为备库

将已启动的Pgpool-II停止。

pgpool -f pgpool.conf stop

编辑 pgpool.conf,添加或修改如下配置。​​​​​​​

backend_hostname0 = '127.0.0.1'backend_port0 = 5432backend_weight0 = 0.1backend_data_directory0 = '/usr/local/ivorysql/ivorysql-3/data'backend_flag0 = 'ALWAYS_PRIMARY|DISALLOW_TO_FAILOVER'
backend_hostname1 = '127.0.0.1'backend_port1 = 5433backend_weight1 = 0.9backend_data_directory1 = '/usr/local/ivorysql/ivorysql-3/data-1'backend_flag1 = 'DISALLOW_TO_FAILOVER'load_balance_mode = on

重新启动Pgpool-II

pgpool -f pgpool.conf

连入Pgpool-II,通过show pool_nodes,查看数据库状态。

我们看到,5432作为主节点,5433作为备节点,均处于启动状态。

接下来,简单测试读写分离是否成功。

测试create、insert语句

图片

查看主库的log,我们可以找到create 与 insert 记录。

图片

测试 select 语句

在备库 data-1 的log中,就会出现刚才执行的 select 查询语句。

图片

这样,一个包含一主一备的IvorySQL数据库集群的读写分离架构就完成了。

8

Pgpool-II适配IvorySQL兼容Oracle端口

在读写分离架构基础上,将PG端口修改成Oracle兼容端口。

图片

重启Pgpool-II,并查询主备状态及兼容模式。

图片

图片

由此证明,Pgpool-II不但可以兼容IvorySQL的PG端口,也可以完美适配IvorySQL兼容的Oracle端口,并实现读写分离架构,这也为想要快速搭建读写分离架构的Oracle用户,提供了一种可行的方案。

本文简单介绍了Pgpool-II的启动与读写分离实践,想了解更多关于Pgpool-II的使用,请参阅官方文档:

https://www.pgpool.net/docs/latest/en/html/index.html