OpenEuler22.03安装PostgreSQL15.5并配置一主二从

这篇具有很好参考价值的文章主要介绍了OpenEuler22.03安装PostgreSQL15.5并配置一主二从。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环境准备

序号 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

OpenEuler22.03安装PostgreSQL15.5并配置一主二从

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

输入指令如下:

OpenEuler22.03安装PostgreSQL15.5并配置一主二从

# 再次查看分区情况
[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 许可协议。转载请注明出处!文章来源地址https://www.toymoban.com/news/detail-762824.html

到了这里,关于OpenEuler22.03安装PostgreSQL15.5并配置一主二从的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • VMware安装openEuler-22.03-LTS版本的虚拟机

    【原文链接】VMware安装openEuler-22.03-LTS版本的虚拟机 (1)下载openEuler镜像 (2)打开VMware,点击【创建虚拟机】 (3)选择【自定义安装】,点击【下一步】 (4)点击【下一步】 (5)选择【稍后安装操作系统】,点击【下一步】 (6)选择【Linux】,并选择【其他Linux5.xhuo或

    2024年02月02日
    浏览(32)
  • OpenEuler22.03源码编译安装nginx1.24.0

    操作系统版本:OpenEuler22.03 SP2 LTS Nginx版本:1.24.0 安装位置:/app/nginx Selinux配置:关闭或设置为permissive 修改nginx运行用户为root: 设置nginx开机自启: nginx.service内容: [Unit] Description=nginx After=network.target [Service] Type=forking ExecStart=/app/nginx/sbin/nginx -c /app/nginx/conf/nginx.conf ExecReloa

    2024年02月04日
    浏览(35)
  • 59 openEuler 22.03-LTS 搭建MySQL数据库服务器-软件介绍和配置环境

    59.1 软件介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下产品。MySQL是业界最流行的RDBMS (Relational Database Management System,关系数据库管理系统)之一,尤其在WEB应用方面。 关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库

    2023年04月22日
    浏览(40)
  • openEuler 22.03 (LTS-SP1)安装最新版Docker(踩坑及解决方案)

    openEuler 22.03 LTS-SP1要是直接yum install docker,默认安装docker 是18.09.0,这个版本Docker有个bug,所以还是安装个最新版Docker。 1、先增加docker官方仓库 以下作踩坑过程,请直接跳过查看下面的\\\"2、修改配置文件\\\" 查看一下最新版docker,然后报错可以发现, 这里只有centos/7/   或 ce

    2024年02月13日
    浏览(38)
  • 浪潮服务器安装OpenEuler-22.03-LTS-SP3-x86_64全程记录

    * 第一步 安装系统之前,要做raid配置,不做raid的话,以后硬盘损坏了数据全无(我师父教我的)。 首先,服务器开机,进入浪潮logo界面的时候,点击“del”键进入BIOS。进入之后使用左右上下键,到“Advanced”界面,找到“CSM configuration”,Enter键点进去: 它对应设置如图所

    2024年04月28日
    浏览(29)
  • openEuler22.03中安装docker

    由于docker-ce没有单独针对openEuler的镜像,所以我们可以用CentOS的。 1.若系统之前安装过docker,需要先卸载之后再安装 2.下载docker-ce的repo文件 3.将repo中官方地址替换为华为开源镜像,下载速度乌龟变兔子 4.repo中用$releasever变量代替当前系统的版本号,该变量在CentOS中有效,但

    2024年02月12日
    浏览(33)
  • openEuler22.03制作openstack平台使用的镜像

    第一章 openEuler22.03制作openstack平台使用的镜像 使用openEuler22.03的iso制作openstack平台使用的云主机镜像。 使用的镜像:openEuler-22.03-LTS-SP1-x86_64-dvd.iso 使用的工具:virt-manager 首先将网卡类型,硬盘类型修改为Virtio类型 只保留一个跟目录分区即可 总体上制作方式一致,直接使用云

    2024年02月07日
    浏览(33)
  • openEuler 22.03 LTS登录AWS Marketplace

    openEuler 22.03 LTS镜像正式登录AWS Marketplace ,目前在亚太及欧洲15个Region开放使用,后续将开放更多版本和区域,openEuler 22.03 LTS AMI(Amazon Machine Images)由openEuler社区提供支持。 点击查看具体使用指导:https://www.openeuler.org/zh/blog/20230711-AMIs/AMIs.html

    2024年02月16日
    浏览(25)
  • 使用openeuler 22.03替代CentOS 7.9,建立虚拟机详细步骤

    进入浏览器搜索网址下载openeuler 22.03镜像文件 https://mirrors.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP3/ISO/x86_64/openEuler-22.03-LTS-SP3-x86_64-dvd.iso 打开VMware Workstation新建一个虚拟机:         自定义虚拟机位置                     加入下载好的openeuler镜像文件           使用root用户

    2024年02月19日
    浏览(35)
  • ARM 版 OpenEuler 22.03 部署 KubeSphere v3.4.0 不完全指南

    作者:运维有术 知识点 定级: 入门级 KubeKey 安装部署 ARM 版 KubeSphere 和 Kubernetes ARM 版 KubeSphere 和 Kubernetes 常见问题 实战服务器配置 (个人云上测试服务器) 主机名 IP CPU 内存 系统盘 数据盘 用途 ks-master-1 172.16.33.16 6 16 50 200 KubeSphere/k8s-master ks-master-2 172.16.33.22 6 16 50 200 KubeSph

    2024年02月08日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包