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

相关推荐
xiaoliuliu123452 小时前
openssl-libs-1.1.1f-4.p12.ky10.x86_64.rpm 安装指南 解决依赖与常见报错
linux
程序员小白条2 小时前
面试 Java 基础八股文十问十答第二十二期
java·开发语言·数据库·面试·职场和发展·毕设
万象.2 小时前
redis客户端安装与实现C++版本
数据库·c++·redis
Yiyaoshujuku2 小时前
疾病的发病率、发病人数、患病率、患病人数、死亡率、死亡人数查询网站及数据库
数据库·人工智能·算法
不想写bug呀2 小时前
Redis总结
数据库·redis·缓存
17(无规则自律)2 小时前
【CSAPP 读书笔记】第一章:计算机系统漫游
linux·c语言·arm开发·嵌入式硬件·学习·ubuntu
李少兄2 小时前
深入解析 Nginx 413 Request Entity Too Large 错误
运维·nginx
青主创享阁2 小时前
玄晶引擎:基于多模态大模型的全流程AI自动化架构设计与落地实践
运维·人工智能·自动化
Neolnfra2 小时前
数据库提权实战指南
数据库·数据库安全