PostgreSQL搭建一主一从集群的过程主要涉及到基础环境准备、PostgreSQL安装、主从节点配置以及同步验证等步骤。以下是一个详细的搭建过程:
一、基础环境准备
-
创建虚拟机:
- 准备两台虚拟机,分别作为主节点和从节点。
- 为每台虚拟机分配独立的IP地址和主机名。
-
操作系统与依赖安装:
- 确保两台虚拟机上都安装了相同版本的操作系统(如openEuler22.03/Centos7.9)。
- 安装PostgreSQL运行所需的依赖包,如gcc、gcc-c++、readline-devel等。
-
SSH免密登录:
- 在主节点和从节点上配置SSH免密登录,方便后续的管理操作。
二、PostgreSQL安装
-
下载与安装:
- 可以选择从PostgreSQL官网下载对应版本的源码包进行编译安装,或者使用包管理器(如yum)进行安装。
- 以yum安装为例,命令如下:
yum install -y postgresql postgresql-server
-
初始化与启动:
- 初始化数据库:
service postgresql initdb
- 启动PostgreSQL服务:
systemctl start postgresql
- 设置为开机自启:
systemctl enable postgresql.service
- 初始化数据库:
-
开放端口:
- 如果防火墙已开启,需要开放PostgreSQL的默认端口(5432)。
-
验证安装:
- 切换到pgsql用户,尝试登录psql命令行工具进行验证。
三、主节点配置
-
创建复制用户:
- 在主节点上创建一个专门用于复制的用户,并赋予其复制权限。
su - pgsql psql postgres=# create role repl login replication encrypted password 'repuser@2024';
-
修改配置文件:
-
修改
postgresql.conf
文件,设置listen_addresses
为'*'
,允许所有IP连接。 -
设置
wal_level
为hot_standby
,启用流复制。 -
配置其他相关参数,如
max_wal_senders
、wal_keep_segments
等。 -
archive_command=‘test ! -f /postgresql/archive/%f && cp %p /postgresql/archive/%f’
-
wal_keep_size=64MB # pg13之后版本 若是设置时不带单位,则默认为 MB(0 到 2147483647) 0,0 表示 PostgreSQL 不会为流复制环境保留额外的 wal segments
-
注意:wal_keep_segments=256 是postgresql 12及之前的版本,postgresql 13.0中,将wal_keep_segments重命名为wal_keep_size,让用户指定WAL大小,而不是WAL文件个数。在PG内核不断演进的过程中,PostgreSQL开发者在逐渐弱化wal段数量(wal文件个数)的概念,并强调wal的size,之前就有checkpoint_segments改变为max_wal_size的先例
-
修改
pg_hba.conf
文件,添加对复制用户的访问权限配置。vi /postgresql/pgdata/pg_hba.conf host all all 0.0.0.0/0 md5 host replication repl 0.0.0.0/0 md5
-
-
重启PostgreSQL服务:
-
修改配置后,需要重启PostgreSQL服务使配置生效。
pg_ctl stop pg_ctl start
-
四、从节点配置
-
安装PostgreSQL:
- 从节点上也需要安装PostgreSQL,过程与主节点相同。
-
数据同步:
- 使用pg_basebackup命令从主节点同步基础数据到从节点。
pg_basebackup -h 主节点IP -U repl -D /var/lib/pgsql/data -P -Xs -v -- 示例 pg_basebackup -D /postgresql/pgdata16.4 -F p -P -R -h 192.168.80.239 -p 5432 -U repl -l /postgresql/backup/backup20240902
-
修改配置文件:
- 修改从节点的
postgresql.conf
文件,设置hot_standby
为on
,开启热备模式。 - 修改
recovery.conf
文件(在PostgreSQL 12及以后版本,部分参数可以直接在postgresql.conf
中配置),配置恢复模式、主节点信息等。 - primary_conninfo = ‘host=192.168.80.239 port=5432 user=repl passowrd=repuser@2024’
- 修改从节点的
-
启动从节点服务:
- 启动从节点的PostgreSQL服务,它将自动进入恢复模式,并从主节点同步数据。
- [pgsql@pgstandby:/postgresql/pgdata]$ps -ef | grep postgres # 重点关注 startup recovering
五、同步验证
-
在主节点上创建数据:
-
在主节点上创建一些数据库或表,并插入数据。
[pgsql@pgstandby:/postgresql/pgdata16.4]$pg_controldata -- OR [pgsql@pgstandby:/home/pgsql]$pg_controldata /postgresql/pgdata/ -- postgres=# select * from pg_stat_replication;
create table t_replication(id int primary key); insert into t_replication select generate_series(1,10);
-
-
在从节点上验证数据:
- 登录从节点的psql命令行工具,查询刚才在主节点上创建的数据,确认数据已同步。
[pgsql@pgstandby:/postgresql/pgdata16.4]$pg_controldata -- OR [pgsql@pgstandby:/home/pgsql]$pg_controldata /postgresql/pgdata/-- 检查表数据是否同步 postgres=# select * from t_replication
- 登录从节点的psql命令行工具,查询刚才在主节点上创建的数据,确认数据已同步。
通过以上步骤,你可以成功搭建一个PostgreSQL的一主一从集群。在实际部署时,还需要根据具体环境和需求进行相应的调整和优化。