环境准备

序号 IP 标识(hostname) CPU/内存配置 系统盘 数据盘
1 192.168.8.190 pg01 8C+16G 80G 500G
2 192.168.8.191 pg02 8C+16G 80G 500G
3 192.168.8.192 pg03 8C+16G 80G 500G

规划的文件夹目录(所有主机):

## 以下目录为本文规划的目录,可以提前创建,也可以跟着说明一步步创建。
## 可以根据各自情况自行规划,注意更改后替换后文里面对应的路径。
# app目录为数据盘挂载目录,将所有程序和数据保存在该目录下
/app
# postgresql应用的安装目录
/app/pg15
# 保存解压后的应用源代码
/app/source
# 存储临时文件(如下载的应用压缩包)
/app/temp-files
#保存应用数据
/app/appdata
# postgresql15的数据目录 即是环境变量$PGDATA (建议用postgres用户创建或创建后给postgres授权)
/app/appdata/pg15/data
# postgresql15的日志 即是环境变量$PGLOG(建议用postgres用户创建或创建后给postgres授权)
/app/appdata/pg15/logs

系统和组件版本(所有主机):

# 操作系统:
OpenEuler:22.03 (LTS-SP2)
# 数据库:
postgresql:15.5

系统环境状态(所有主机):

# SeLinux(cat /etc/selinux/config)变更需重启系统
SELINUX=permissive # Firewalld 防火墙保持开启状态(systemctl status/start/stop/restart firewalld)
active

更新系统并安装必备组件

*(如无特殊说明代表所有主机

# 查看系统版本
[root@pg01 ~]$ cat /etc/os-release
NAME="openEuler"
VERSION="22.03 (LTS-SP2)"
ID="openEuler"
VERSION_ID="22.03"
PRETTY_NAME="openEuler 22.03 (LTS-SP2)"
ANSI_COLOR="0;31"
# 更新系统
[root@pg01 ~]$ dnf upgrade -y

关于“dnf update” 和“dnf upgrade”的说明:

update:更新源里的软件列表。一般指量的变化,侧重更新的意思,主要是为原有的东西增加新功能,或者对已有的部分做出更改等。更新数据源。

upgrade:升级你系统里的软件。一般指质的变化,侧重升级的意思,是指从较低级版本升级到高级的版本,这种升级往往伴有新功能的增加,因此也有update的意思。

  1. 更新资源

    sudo dnf update

  2. 软件更新升级,包括升级语言包等

    sudo dnf upgrade

#安装缺失组件,OpenEuler默认最小化安装
#不同系统安装镜像默认安装的基础组件可能不一样,根据情况安装(gcc、make有的镜像安装时默认安装,有的镜像则没有默认安装)
[root@pg01 ~]$ dnf install gcc make tar readline-devel zlib-devel

挂载数据盘

#查看磁盘情况
[root@pg01 ~]$ fdisk -l

#给“/dev/vdb分区”
[root@pg01 ~]$ fdisk /dev/vdb

输入指令如下:

# 再次查看分区情况
[root@pg01 ~]$ fdisk -l
# 显示结果已创建vdb1分区
Device Boot Start End Sectors Size Id Type
/dev/vdb1 2048 1048575999 1048573952 500G 83 Linux # 格式化分区
[root@pg01 ~]$ mkfs.ext4 /dev/vdb1
# 根目录下创建data挂载目录
[root@pg01 ~]$ mkdir /app
# 挂载/vdb1分区到/app
[root@pg01 ~]$ mount /dev/vdb1 /app
# 查看挂载情况
[root@pg01 ~]$ df -lh # 将挂载添加到启动项,否则挂载在重启后失效
[root@pg01 ~]$ vi /etc/fstab
# 末尾添加一行
/dev/vdb1 /app ext4 defaults 0 0

保存关闭fstab文件,数据盘挂载完毕。

PostgreSQL安装

下载PostgreSQL 15.5

PostgreSQL官方下载地址:PostgreSQL: File Browser

#下载PostgreSQL15.5版本
[root@pg01 ~]$ cd /app/temp-files/
[root@pg01 temp-files]$ wget https://ftp.postgresql.org/pub/source/v15.5/postgresql-15.5.tar.gz

编译安装

#解压源码包
[root@pg01 temp-files]$ tar -xzvf postgresql-15.5.tar.gz
# 将解压后的文件夹(postgresql-15.5)移动到规划的source目录
[root@pg01 temp-files]$ mv postgresql-15.5 ../source/
# 切换到postgresql-14.10文件夹(系统当前在root用户根目录下)
[root@pg01 temp-files]$ cd ../source/postgresql-15.5
# 配置安装目录:
[root@pg01 postgresql-15.5]$ ./configure --prefix=/app/pg15
# 编译(耗时较长,耐心等待)
[root@pg01 postgresql-15.5]$ make
# 安装
[root@pg01 postgresql-15.5]$ make install
# 创建PostgreSQL数据存放目录(可根据实际情况自行配置数据存储路径)
[root@pg01 postgresql-15.5]$ mkdir -p /app/appdata/pg15/data
# 创建PostgreSQL日志存放目录(可根据实际情况自行配置日志存储路径)
[root@pg01 postgresql-15.5]$ mkdir -p /app/appdata/pg15/logs
# 创建postgres用户
[root@pg01 postgresql-15.5]$ adduser postgres
# 给postgres用户授权访问data和logs目录
[root@pg01 postgresql-15.5]$ chown postgres /app/appdata/pg15/data
[root@pg01 postgresql-15.5]$ chown postgres /app/appdata/pg15/logs
# 切换到postgres用户(数据库操作不允许使用root用户)
[root@pg01 postgresql-15.5]$ su - postgres
# 创建日志文件【postgres用户】
[postgres@pg01 ~]$ touch /app/appdata/pg15/logs/server.log
# 初始化数据库【postgres用户】
[postgres@pg01 ~]$ /app/pg15/bin/initdb -D /app/appdata/pg15/data
# 启动数据库【postgres用户】
[postgres@pg01 ~]$ /app/pg15/bin/pg_ctl -D /app/appdata/pg15/data -l /app/appdata/pg15/logs/server.log start
# 创建test数据库【postgres用户】
[postgres@pg01 ~]$ /app/pg15/bin/createdb test ##创建test数据库
# 连接test数据库【postgres用户】
[postgres@pg01 ~]$ /app/pg15/bin/psql test ##连接test数据库

配置PostgreSQL

以下操作如无特殊说明,均采用postgres用户(指操作系统普通用户)操作命令。

修改数据库密码

# 我们从外部采用工具连接该数据库,需要知道数据库用户和对应的密码
# 连接默认postgres数据库;
[postgres@pg01 ~]$ /app/pg15/bin/psql
# 修改数据库用户postgres的密码为postgres;
postgres=# ALTER USER postgres WITH PASSWORD 'postgres';

修改配置文件以支持远程连接

需要修改的文件存放于postgresql的数据存储目录(/app/appdata/pg15/data)。

# pg_hba.conf 文件
# 待修改的行:
host all all 127.0.0.1/32 trust
# 修改为
host all all 0.0.0.0/0 md5
# postgresql.conf文件
# 待修改的行
#listen_addresses = 'localhost'
#移除前方的“#”,并将localhost修改为*
listen_addresses = '*'

重启postgresql

#重启postgresql
[postgres@pg01 ~]$ /app/pg15/bin/pg_ctl -D /app/appdata/pg15/data -l /app/appdata/pg15/logs/server.log restart

操作系统配置

防火墙放行5432端口

root用户操作。

# 配置防火墙放行5432端口
sudo firewall-cmd --zone=public --add-port=5432/tcp --permanent
#防火墙重新加载配置文件
sudo firewall-cmd --reload

环境变量配置

我们想在安装postgresql的服务器使用psql或其他提供的工具连接数据库,就必须输入psql的全路径“/app/pg15/bin/psql",环境变量配置完毕后,我们可以以postgres用户在任意位置输入psql来使用psql工具。

postgres用户操作。

# 切换用户目录
[postgres@pg01 ~]$ cd ~
# 编辑用户环境变量文件
[postgres@pg01 ~]$ vi .bash_profile
# 将下面两行代码添加文件末尾后保存退出
PATH=/app/pg15/bin:$PATH
export PATH
# 使配置文件生效
[postgres@pg01 ~]$ source .bash_profile # 此时postgres用户就可以直接输入psql调用了

开机启动配置

root用户操作。

PostgreSQL的开机自启动配置模板在源码目录的“contrib/start-scripts”目录下,其中linux文件为linux环境下的开机自启动脚本模板,将其拷贝到“/etc/init.d”目录下,并改名为postgresql:

# 切换至源码开机脚本模版目录
cd postgresql-15.5/contrib/start-scripts/
# 拷贝linux脚本拷贝至启动目录修改名称为pgsql
cp linux /etc/init.d/pgsql
# 编辑启动脚本
vi /etc/init.d/pgsql # 在Selinux开启Enforcing的情况,开启仍然无法启动,我们需要修复pgsql文件的安全上下文
# restorecon [选项】 文件或目录
# -R:递归.当前目录和目录下所有的子文件同时恢复;
# -V:把恢复过程显示到屏幕上;
# 执行如下命令即可 (本文环境将selinux修改为宽容模式,不需要进行修复)
# restorecon /etc/init.d/pgsql # 给启动脚本增加文件执行权限
chmod a+x /etc/init.d/pgsql #添加至开机启动
chkconfig --add /etc/init.d/pgsql

“/etc/init.d/pgsql”需要编辑的内容如下:

# 安装位置,根据实际情况修改
prefix=/app/pg15 # Postgresql数据目录,根据实际情况修改
PGDATA="/app/appdata/pg15/data" # Who to run the postmaster as, usually "postgres". (NOT "root")
# 将启动用户修改为实际用户,这里使用postgres,所以不变。
PGUSER=postgres # Postgresql日志文件位置,根据实际情况修改
PGLOG="/app/appdata/pg15/logs/server.log"

重启验证即可。

创建一主二从

主库配置:

# 创建同步账号 psql下执行:
postgres=# CREATE ROLE replica login replication encrypted password 'replica';
CREATE ROLE # 修改postgresql.conf文件,添加同步参数
wal_level = replica
max_wal_senders = 8
wal_keep_size = 500
wal_sender_timeout = 60s
max_connections = 100 # pg_hba.conf 文件增加备库访问控制
# 文件末尾增加允许复制的从机
host replication replica 192.168.8.191/32 md5
host replication replica 192.168.8.192/32 md5 # 重启主库服务
[postgres@pg01 ~]$ /app/pg15/bin/pg_ctl -D /app/appdata/pg15/data -l /app/appdata/pg15/logs/server.log restart # 从库验证是否可以连接主库
# 返回输入密码即表示可访问
[postgres@pg02 ~]$ psql -h 192.168.8.190 -U postgres
Password for user postgres:

从库配置[pg02/03主机配置相同]

# 停掉从库
[postgres@pg02 ~]$ /app/pg15/bin/pg_ctl -D /app/appdata/pg15/data -l /app/appdata/pg15/logs/server.log stop # 清空从库数据文件
[postgres@pg02 ~]$ rm -rf /app/appdata/pg15/data/*
[postgres@pg02 ~]$ ll /app/appdata/pg15/data
total 0 # 拉取主库文件
[postgres@pg02 ~]$ pg_basebackup -h 192.168.8.80 -D /app/appdata/pg15/data -p 5432 -U replica -Fp -Xs -Pv -R --checkpoint=fast
Password:
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/D000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created temporary replication slot "pg_basebackup_17064"
50729/50729 kB (100%), 1/1 tablespace
pg_basebackup: write-ahead log end point: 0/D000100
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk ...
pg_basebackup: base backup completed
[postgres@dj data]$ ll /app/appdata/pg15/data
total 128
-rw-------. 1 postgres postgres 224 Jul 12 03:43 backup_label
drwx------. 7 postgres postgres 4096 Jul 12 03:43 base
drwx------. 2 postgres postgres 4096 Jul 12 03:43 global
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_commit_ts
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_dynshmem
-rw-------. 1 postgres postgres 4886 Jul 12 03:43 pg_hba.conf
-rw-------. 1 postgres postgres 1636 Jul 12 03:43 pg_ident.conf
drwx------. 4 postgres postgres 4096 Jul 12 03:43 pg_logical
drwx------. 4 postgres postgres 4096 Jul 12 03:43 pg_multixact
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_notify
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_replslot
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_serial
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_snapshots
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_stat
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_stat_tmp
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_subtrans
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_tblspc
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_twophase
-rw-------. 1 postgres postgres 3 Jul 12 03:43 PG_VERSION
drwx------. 3 postgres postgres 4096 Jul 12 03:43 pg_wal
drwx------. 5 postgres postgres 4096 Jul 12 03:43 pg_walminer
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_xact
-rw-------. 1 postgres postgres 267 Jul 12 03:43 postgresql.auto.conf
-rw-------. 1 postgres postgres 27115 Jul 12 03:43 postgresql.conf
-rw-------. 1 postgres postgres 30 Jul 12 03:43 postmaster.opts.bak
-rw-------. 1 postgres postgres 0 Jul 12 03:43 standby.signal

修改postgresql.conf配置:

# 从库postgresql.conf修改
[postgres@pg02 ~]$ vi /app/appdata/pg15/data/postgresql.conf # 1.注释一下参数,即是在前面加#
#wal_level = replica
#max_wal_senders = 8
#wal_keep_size = 500
#wal_sender_timeout = 60s
# 2.添加和修改一下参数
primary_conninfo = 'host=192.168.8.80 port=5432 user=replica password=replica'
recovery_target_timeline = latest
hot_standby = on
max_standby_streaming_delay = 30s
wal_receiver_status_interval = 10s
hot_standby_feedback = on
max_connections = 200 #大于主节点
max_worker_processes = 20 # 3.保存退出

重新启动从库:

# 启动从库
[postgres@pg02 ~]$ /app/pg15/bin/pg_ctl -D /app/appdata/pg15/data -l /app/appdata/pg15/logs/server.log start

主从同步验证

将Pg02、Pg03主机都配置完成并启动postgresql后,在主库pg01上用postgres用户进入psql,输入如下查询sql验证同步状态:

# 主库PSQL查询
postgres=# select client_addr,usename,backend_start,application_name,sync_state,sync_priority FROM pg_stat_replication;
client_addr | usename | backend_start | application_name | sync_state | sync_priority
-----------------+---------+-------------------------------+------------------+------------+---------------
192.168.8.191 | replica | 2023-12-22 18:52:32.45571+08 | walreceiver | async | 0
192.168.8.192 | replica | 2023-12-22 19:04:32.92774+08 | walreceiver | async | 0 # 测试创建删除数据库观察从库是否同步
postgres=# create database test;
postgres=# drop database test;
# 在主库上创建、删除后可到从库上查看是否一致。psql 输入‘\l’可查看所有的数据库。
postgres=# \l

至此,Postgresql 15.5的安装和一主两从配置结束。

开启归档模式

主机pg01操作修改postgresql.conf文件

#调整如下两个参数
archive_mode='on'
archive_command='test ! -f /app/appdata/pg15/archive/%f && cp %p /app/appdata/pg15/archive/%f'

同步在主库(pg01)以及其他从他从库(pg02/pg03)创建归档目录:

# 创建归档目录
mkdir -p /app/appdata/pg15/archive # 给postgres用户授权
chown -R postgres /app/appdata/pg15/archive

然后重启主库pg服务即可。

其他参考命令:

# 查询归档参数SQL
select * from pg_settings where name in ('wal_level','archive_mode','archive_command');
# 查询归档文件状态
select * from pg_stat_get_archiver();

本文作者: Mr Liu

本文链接: https://it-liupp.gitee.io/2023/12/23/openeuler-install-pgsql14/

博客园链接:https://www.cnblogs.com/boyliupan/p/17935733.html

版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

OpenEuler22.03安装PostgreSQL15.5并配置一主二从的更多相关文章

  1. 虚拟机(Vmware)安装ubuntu18.04和配置调整(二)

    二.配置修改 1.修改语言环境(settings->Region & Language) 选中中文简体(Chinese(simplified)),点击Apply 中文简体语言安装完成后, ...

  2. IDM主机上安装融合应用程序配置框架

    IDM主机上安装融合应用程序配置框架   安装Oracle融合应用程序>设置>身份和访问管理节点安装融合应用程序配置框架 由于我们使用Oracle VirtualBox虚拟机这一次,我们在 ...

  3. Oracle 12cR1 RAC 在VMware Workstation上安装(上)—OS环境配置

    Oracle 12cR1 RAC 在VMware Workstation上安装(上)-OS环境配置 1.1  整体规划部分 1.1.1  所需软件介绍 Oracle RAC不支持异构平台.在同一个集群 ...

  4. Centos7安装openvpn及客户端配置

    1.openvpn介绍 VPN直译就是虚拟专用通道,是提供给企业之间或者个人与公司之间安全数据传输的隧道,使用OpenSSL加密库中的SSLv3/TLSv1协议函数库. 目前OpenVPN能在Sola ...

  5. Linux平台 Oracle 18c RAC安装Part2:GI配置

    三.GI(Grid Infrastructure)安装 3.1 解压GI的安装包 3.2 安装配置Xmanager软件 3.3 共享存储LUN的赋权 3.4 使用Xmanager图形化界面配置GI 3 ...

  6. MyEclipse安装后需要进行的配置

    摘自: http://hi.baidu.com/timesten/item/c826983a6f9654ffde2221c0 MyEclipse安装后需要进行的配置 在MyEclipse中编写Web ...

  7. django 简易博客开发 1 安装、创建、配置、admin使用

    首先贴一下项目地址吧  https://github.com/goodspeedcheng/sblog 到现在位置项目实现的功能有: 1.后台管理使用Admin ,前端显示使用bootstrap 2. ...

  8. Linux平台 Oracle 19c RAC安装Part2:GI配置

    三.GI(Grid Infrastructure)安装 3.1 解压GI的安装包 3.2 安装配置Xmanager软件 3.3 共享存储LUN的赋权 3.4 使用Xmanager图形化界面配置GI 3 ...

  9. 视频+图文教程 | Java之安装JDK与环境配置

    演示所用软件JDK 8与Eclipse(Java开发工具)软件下载链接: 链接:https://pan.baidu.com/s/1Vg9ulrQH8WlGRAE89Y02UA提取码:swwl 视频介绍 ...

  10. 第06讲:Flink 集群安装部署和 HA 配置

    Flink系列文章 第01讲:Flink 的应用场景和架构模型 第02讲:Flink 入门程序 WordCount 和 SQL 实现 第03讲:Flink 的编程模型与其他框架比较 第04讲:Flin ...

随机推荐

  1. 安卓APK加固工具 如何进行实名认证购买和激活

    安卓APK资源混淆加密重签名工具 价格表 授权时长 价格 1小时 49 1天 99 1个月 199 1个季度 399 半年 599 1年 799 付费版功能 功能点 免费版 付费版 去除广告信息 × ...

  2. rnacos实现raft和类distro协议,支持集群部署

    1. rnacos 简介 rnacos是一个用rust实现的nacos服务. rnacos是一个轻量. 快速.稳定.高性能的服务:包含注册中心.配置中心.web管理控制台功能,支持单机.集群部署. r ...

  3. ES 2023新特性速解

    ES 2023新特性速解 一.新增数组方法 操作数组的方法 Array.prototype.toSorted(compareFn) //返回一个新数组,其中元素按升序排序,而不改变原始数组. Arra ...

  4. slate源码解析(三)- 定位

    接口定义 能够对于文字.段落乃至任何元素的精准定位 并做出增删改查,都是在开发一款富文本编辑器时一项最基本也是最重要的功能之一.让我们先来看看Slate中对于如何在文档树中定位元素是怎么定义的[源码] ...

  5. bash解释器特性、目录结构、命令种类及优先级、常用命令

    bash解释器的交互式环境特性 命令和文件自动补全 注意:Tab只能补全命令和文件及其文件路径 [root@localhost ~]# ls /etc/sysconfig/network-script ...

  6. Mac 下使用 ffmpeg 制作 gif

    Mac 下使用 ffmpeg 制作 gif 公众号文章,gif要求  300帧数以内        .以下是从 mp4 转为 gif 的步骤. 步骤 ffmpeg 是著名的视频处理开源软件 brew ...

  7. Capture Data.dmg

    苹果apple mac 系统检测  日常分析  软件 https://gigafiles.apple.com/#/download 现有文件可供下载. 备注 Capture Data 9.9.0 Th ...

  8. [GXYCTF 2019]Ping Ping Ping

    题目就是ping,而且这还有一个查询窗口,就随便查询试试 ping了一下本地,发现没有什么很大的作用,给出了提示是php可以执行系统函数这就感到神奇了,就还是上网搜了搜 发现可以在查询IP后面进行拼接 ...

  9. 【京东开源项目】微前端框架MicroApp 1.0正式发布

    介绍 MicroApp是由京东前端团队推出的一款微前端框架,它从组件化的思维,基于类WebComponent进行微前端的渲染,旨在降低上手难度.提升工作效率.MicroApp无关技术栈,也不和业务绑定 ...

  10. Stable-diffusion WebUI API调用方法

    写这篇文章的主要原因是工作中需要写一个用训练好的模型批量生图的脚本,开始是想用python直接加载模型,但后来发现webui的界面中有不少好用的插件和参数,所以最终改成调用WebUI接口的方式来批量生 ...