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故障转移)

相关推荐
云境天合小科普2 分钟前
农业四情监测系统:墒情、苗情、虫情、灾情全掌握
大数据
難釋懷4 分钟前
Redis分片集群手动故障转移
数据库·redis·缓存
无名-CODING10 分钟前
从零开始!Vue3+SpringBoot前后端分离项目Docker部署实战(上):环境搭建与数据库容器化
数据库·spring boot·docker
Larry_Yanan11 分钟前
Qt网络开发之基于 QWebEngine 实现简易内嵌浏览器
linux·开发语言·网络·c++·笔记·qt·学习
Bdygsl22 分钟前
MySQL(2)—— CRUD
数据库·mysql
chushiyunen27 分钟前
python edge-tts实现tts文本转语音、音频
数据库·python·音视频
原来是猿32 分钟前
MySQL【事务中 - 事务的隔离级别】
数据库·mysql
径硕科技JINGdigital42 分钟前
B2B工业制造企业GEO供应商排名审视:以专业交付能力为核心的选型指南
大数据·人工智能·科技
2501_9454235444 分钟前
游戏与图形界面(GUI)
jvm·数据库·python
大傻^44 分钟前
Spring AI Alibaba Agent开发:基于ChatClient的智能体构建模式
java·数据库·人工智能·后端·spring·springaialibaba