Linux软件安装 —— PostgreSQL集群安装(主从复制集群)

文章目录


一、节点说明

IP 主机名
192.168.10.102 node02
192.168.10.103 node03

二、软件下载

下载地址: PostgreSQL: File Browser

本文使用: postgresql-16.10.tar.gz


三、安装部署

1、前置准备(两台机器)

shell 复制代码
# 安装基础依赖
yum install -y gcc gcc-c++ make libicu-devel readline-devel zlib-devel openssl-devel

# 关闭防火墙和SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

vim /etc/selinux/config
# 修改
SELINUX=disabled

# 创建postgres用户
useradd postgres
passwd postgres

# 配置postgres sudo权限
vim /etc/sudoers
# 在%wheel  ALL=(ALL)       ALL下面添加一行
postgres        ALL=(ALL)       NOPASSWD:ALL

# 创建安装目录和数据目录
mkdir -p /opt/module/pgsql16/pgsql
mkdir -p /opt/module/pgsql16/pgdata

# 修改安装包(上传的)目录权限,安装目录权限
chown -R postgres:postgres /opt/software/pgsql/
chown -R postgres:postgres /opt/module/pgsql16/

# 切换到postgres用户
su - postgres

2、解压并编译

shell 复制代码
# 此项两台虚拟机均需操作
# 两台服务器上分别执行以下步骤进行编译安装。
tar -zxvf postgresql-16.10.tar.gz
cd postgresql-16.10

# 配置编译选项 --prefix 指定安装目录
./configure --prefix=/opt/module/pgsql16/pgsql

# 编译
make && make install
cd contrib
make && make install
# 安装成功后,主要文件会出现在 /opt/module/pgsql16/pgsql 目录下

# 编辑 postgres 用户环境变量
vi ~/.bash_profile
export PGHOME=/opt/module/pgsql16/pgsql
export PGDATA=/opt/module/pgsql16/pgdata
export PATH=$PATH:$PGHOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PGHOME/lib
# 重新加载环境变量
source ~/.bash_profile

# 配置系统环境变量
vim /etc/profile.d/my_env.sh
export PGHOME=/opt/module/pgsql16/pgsql
export PGDATA=/opt/module/pgsql16/pgdata
export PATH=$PATH:$PGHOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PGHOME/lib
# 重新加载环境变量
source /etc/profile.d/my_env.sh

3、初始化与配置主库(Master)

(1)初始化数据库

shell 复制代码
# 初始化主库,仅主库
initdb -D $PGDATA -E UTF8 --locale=en_US.utf8

(2)conf配置

配置postgresql.conf

shell 复制代码
# 配置postgresql.conf
cp postgresql.conf postgresql.conf.bak
vim postgresql.conf

# 修改以下内容
listen_addresses = '0.0.0.0'
port = 5432
max_connections = 2000
shared_buffers = 2048MB
dynamic_shared_memory_type = posix
wal_level = replica
full_page_writes = on
wal_log_hints = on
max_wal_size = 1GB
min_wal_size = 256MB
archive_mode = on
archive_command = 'test ! -f /opt/module/pgsql16/pgdata/pg_archive/%f && cp %p /opt/module/pgsql16/pgdata/pg_archive/%f'
restore_command = 'cp /opt/module/pgsql16/pgdata/pg_archive/%f %p'
archive_cleanup_command = 'pg_archive cleanup /opt/module/pgsql16/pgdata/pg_archive %r'
max_wal_senders = 10
wal_keep_size = 320
hot_standby = on
logging_collector = on
log_directory = '/opt/module/pgsql16/pgdata/logs'
log_filename = 'postgresql-%Y-%m-%d.log'
log_rotation_age = 30d
log_connections = on
log_disconnections = on
log_timezone = 'PRC'
datestyle = 'iso, mdy'
timezone = 'PRC'
lc_messages = 'en_US.utf8'
lc_monetary = 'en_US.utf8'
lc_numeric = 'en_US.utf8'
lc_time = 'en_US.utf8'
default_text_search_config = 'pg_catalog.english'

配置从库IP段

bash 复制代码
# 配置IP段
vi $PGDATA/pg_hba.conf
# 添加从库IP段
# 这允许 replicator 用户进行流复制连接,并采用 scram-sha-256 加密认证。
host    replication     replicator	192.168.10.102/32	scram-sha-256
host    replication     replicator	192.168.10.103/32	scram-sha-256
# 用于远程连接
host    all         	all			0.0.0.0/0			scram-sha-256

(3)启动主库并创建复制用户

SQL 复制代码
# 启动数据库
pg_ctl -D $PGDATA -l $PGHOME/logfile start
# 登录数据库
psql

# 先修改postgres用户密码
ALTER USER postgres WITH PASSWORD 'postgres';

# 创建主从复制用户
CREATE USER replicator WITH REPLICATION LOGIN PASSWORD 'replicator';

4、配置从库(Slave)

shell 复制代码
# 从库同步主库配置,在此之前从库除了编译安装,并没有其他操作,没有初始化,也没有启动
pg_basebackup -h 192.168.10.102 -p 5432 -U replicator -D $PGDATA -Fp -Xs -P -R
-h:主库IP地址。
-U:复制用户 replicator,执行时会提示输入密码。
-D:目标数据目录。
-Fp:以普通文件格式备份。
-Xs:在备份开始后启动流式传输WAL日志。
-P:显示进度。
-R:关键参数,自动在从库 $PGDATA 目录下生成 standby.signal 文件(声明此实例为备库),并更新 postgresql.auto.conf 文件,写入连接主库的信息。

# 通常 -R 参数已自动完成配置。可以检查并确认 $PGDATA/postgresql.auto.conf 文件内容类似如下(主从同步配置信息):
primary_conninfo = 'user=replicator password=replicator channel_binding=disable host=192.168.10.102 port=5432 sslmode=disable sslcompression=0 sslcertmode=disable sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=postgres gssdelegation=0 target_session_attrs=any load_balance_hosts=disable'

# 修改从库pgdata权限
chmod -R 750 /opt/module/pgsql16/pgdata/

# 启动从库
pg_ctl -D $PGDATA -l $PGHOME/logfile start

四、测试

1、在主库上查询复制状态

sql 复制代码
SELECT application_name, client_addr, state, sync_state, sync_priority FROM pg_stat_replication;

2、在从库上验证数据同步

sql 复制代码
# 主库操作
CREATE TABLE test_repl (id int, name text);
INSERT INTO test_repl VALUES (1, 'Hello from Master');

# 从库查询
SELECT * FROM test_repl;

# 此外,从库是只读状态,进行增删改会报错
INSERT INTO test_repl VALUES (2, 'Hello from Slave');

五、高可用集群安装

有需求的小伙伴可以参考本人下篇文章:
Linux软件安装 ------ PostgreSQL高可用集群安装(postgreSQL + repmgr主从复制 + keepalived故障转移)

相关推荐
十日十行16 小时前
Linux和window共享文件夹
linux
李广坤19 小时前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
木心月转码ing1 天前
WSL+Cpp开发环境配置
linux
武子康1 天前
大数据-236 离线数仓 - 会员指标验证、DataX 导出与广告业务 ODS/DWD/ADS 全流程
大数据·后端·apache hive
爱可生开源社区2 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
蝎子莱莱爱打怪2 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
崔小汤呀2 天前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端
随逸1772 天前
《从零搭建NestJS项目》
数据库·typescript
何中应2 天前
vi编辑器使用
linux·后端·操作系统
何中应2 天前
Linux进程无法被kill
linux·后端·操作系统