首页 > 数据库 >PostgreSQL的一主一从集群搭建部署

PostgreSQL的一主一从集群搭建部署

时间:2024-08-11 15:05:53浏览次数:14  
标签:wal postgresql postgres 一主一 集群 conf PostgreSQL 节点

1. PostgreSQL的一主一从集群搭建部署

1. 目标

​ 掌握Postgresql数据库主从部署搭建配置

2. 脉络

  • 部署规划
  • PostgreSQL单节点安装
  • PostgreSQL主从部署配置
  • 主从同步验证

3. 部署搭建

3.1 基础准备

1.1 创建两台虚拟机
虚拟机名 IP hostname 主从划分
test11 192.168.198.146 node236 主节点
test12 192.168.198.144 node237 从节点1
1.2 创建两台虚拟机

对于本文部署涉及到的软件版本如下表所示。

操作系统发行版本 CentOS 7
操作系统版本 Linux
PostgreSQL 9.2.24
本地虚拟化软件 VMware® Workstation

3.2 安装软件包

3.2.1 查看软件版本

安装之前首先查看软件是否已经安装。输入命令:

rpm -qa | grep postgresql

一般来讲,从虚拟机安装系统,自然是不会安装PostgreSQL。因此输出为空。

安装软件包有多种方式可选,对于PostgreSQL本文选用的方式是尽量选择yum安装默认版本的软件,以便后期维护。

2.2.2 安装与初始化

两台机器安装过程相同。

(1)安装postgresql postgresql-server

yum install -y postgresql postgresql-server

(2)查看安装结果。

rpm -qa | grep postgresql
[root@localhost ~]# rpm -qa | grep postgresql
postgresql-libs-9.2.24-9.el7_9.x86_64
postgresql-server-9.2.24-9.el7_9.x86_64
postgresql-9.2.24-9.el7_9.x86_64

(3)初始化

service postgresql initdb

(4)启动

systemctl start postgresql

(5)设置为开机自启

systemctl enable postgresql.service

(6)开放端口(如果防火墙已经关闭则可以省略)

iptables -I INPUT -p tcp --dport 5432 -j ACCEPT

(6)验证安装结果,首先输入 su - postgres切换用户,然后输入psql,如下图所示,则安装成功。

[root@localhost ~]# su - postgres
-bash-4.2$ psql
psql (9.2.24)
输入 "help" 来获取帮助信息.
postgres=# 

(7)对posgres用户和数据库管理员设置密码。

# 切换到root用户设置postgres用户密码
passwd postgres
# 在输入两次新密码即可


# 进入posgresql数据中
su - postgres
psql
postgres=# alter user postgres with password '654321';
ALTER ROLE

3.2 主节点配置

(1)创建用于主从访问的用户

# su - postgres
-bash-4.2$ psql
postgres=# create role repl login replication encrypted password 'postgres';

(2)在pg_hba.conf和postgresql.conf中增加配置内容

pg_hba.conf是对访问权限的以下配置,需要根据实际情况配置。其中192.168.198.143是从节点的IP,用于主从的配置。repl是刚刚创建的用户。最后一行是用于子网内客户端的登录。

# vi /var/lib/pgsql/data/pg_hba.conf
host    replication    repl    192.168.198.143/32    trust
host    replication    repl    192.168.198.146/32    trust
host    all    		  all      192.168.198.0/24     md5
host    all	    	  all      0.0.0.0/0            md5

postgresql.conf是postgresql本身配置。

# vi /var/lib/pgsql/data/postgresql.conf

# 要修改的地方
# 监听地址
listen_addresses = '*'
#  写入WAL的级别(minimal:不能通过基础备份和wal日志恢复数据库; replica: 支持wal归档和复制; logical: 在replica级别添加了逻辑解码所需的信息)
wal_level = hot_standby
# 允许最多的流复制连接发送数量, 根据从节点数量来设定
max_wal_senders= 6
# 设置流复制保留的最多的xlog数目
wal_keep_segments = 10240
# 设置流复制发送数据的超时时间
wal_sender_timeout = 60s 
# 最大连接数量,根据从节点与客户端连接数来设定
max_connections = 512

参数说明:

listen_addresses = '*' 可以连接服务器使用的IP,一般初始值为 localhost或者local,意味着只有本机可以连接数据库。这里一般设置为 " * " ,允许全部的IP连接数据库。
wal_level = hot_standby wal_level中有三个主要的参数:minimal、archive和hot_standby1.minimal是默认的值,它仅写入崩溃或者突发关机时所需要的信息(不建议使用)。2.archive是增加wal归档所需的日志(最常用)。3.hot_standby是在备用服务器上增加了运行只读查询所需的信息,一般是在流复制的时候使用到。
max_wal_senders= 6 最多多少个流复制链接
wal_keep_segments = 10240 流复制保留最多的xlog数,xlog这个日志是记录的Postgresql的WAL信息
max_connections = 512 允许的最大并发连接数,简单来说就是同时多少客户端能连接你的数据库。

(3)重启主节点

建议先停止,再启动,而不是重启。之后再验证一下是否启动成功

systemctl stop postgresql
systemctl start postgresql

2.4 从节点配置

从节点的操作建议全部在postgres用户下进行。

(1)切换postgres用户

su - postgres

(2)对主节点的数据进行备份,其中192.168.198.143对应主机IP,repl是上一节主节点创建的用户。

# 删除原有的data目录下数据
-bash-4.2$ rm -rf /var/lib/pgsql/data/*
# 从主库中拷贝数据
-bash-4.2$ pg_basebackup -h 192.168.198.143 -U repl -D /var/lib/pgsql/data -X stream -P

(3)拷贝recovery.conf,编辑recovery.conf内容,其中192.168.198.143对应主机IP,repl是上一节主机创建的用户。

-bash-4.2$ cp /usr/share/pgsql/recovery.conf.sample /var/lib/pgsql/data/recovery.conf
-bash-4.2$ vi /var/lib/pgsql/data/recovery.conf

# 要修改的值
# 从机不仅用于数据归档,也可用于数据查询
standby_mode = on
primary_conninfo = 'host=192.168.198.143 port=5432 user=repl password=postgres'
recovery_target_timeline = 'latest'
# 根据实际应用情况, 设定最大连接数
max_connections = 1000
# 如果有错误的数据复制,是否向主进行反馈
hot_standby_feedback = on 
# 多久向主报告一次从的状态,当然从每次数据复制都会向主报告状态,这里只是设置最长的间隔时间
wal_receiver_status_interval = 10s 
# 数据流备份的最大延迟时间
max_standby_streaming_delay = 3

参数说明。

standby_mode 开启standby模式
primary_conninfo 主节点信息
recovery_target_timeline = 'latest' 指定恢复到一个特定的时间线中。默认值是沿着基础备份建立时的当前时间线恢复。将这个参数设置为latest会恢复到该归档中能找到的最新的时间线。
trigger_file = '/tmp/trigger_file0' '/tmp/trigger_file0'是一个自定义的文件,在后面主从切换的时候能够用得上。倘若检测到该文件的创建,则PostgreSQL由主节点的状态切换为主。如果下文在failover_stream.sh采用文件触发的办法,则必须配置此项,若采用命令触发方法则无需配置此项,但配置此项对命令方式没有影响。

(4)在postgresql.conf中添加一行,用于开启standby模式。

-bash-4.2$ vi /var/lib/pgsql/data/postgresql.conf
# 要修改的值
hot_standby = on

(5)退出postgres用户,重启PostgreSQL

systemctl stop postgresql
systemctl start postgresql

4. 验证主从

(1)在主节点写数据,从节点读数据。

在主节点,切换到psql界面

create database test;

可以看见提示创建成功。

在从节点上查看分别在创建之前和创建之后查看数据库。可以看见,数据库同步了。

# 主库
                                 资料库列表
   名称    |  拥有者  | 字元编码  | 校对规则 | Ctype |       存取权限        
-----------+----------+-----------+----------+-------+-----------------------
 postgres  | postgres | SQL_ASCII | C        | C     | 
 template0 | postgres | SQL_ASCII | C        | C     | =c/postgres          +
           |          |           |          |       | postgres=CTc/postgres
 template1 | postgres | SQL_ASCII | C        | C     | =c/postgres          +
           |          |           |          |       | postgres=CTc/postgres
 test      | postgres | SQL_ASCII | C        | C     | 
(4 行记录)


# 从库
                                 资料库列表
   名称    |  拥有者  | 字元编码  | 校对规则 | Ctype |       存取权限        
-----------+----------+-----------+----------+-------+-----------------------
 postgres  | postgres | SQL_ASCII | C        | C     | 
 template0 | postgres | SQL_ASCII | C        | C     | =c/postgres          +
           |          |           |          |       | postgres=CTc/postgres
 template1 | postgres | SQL_ASCII | C        | C     | =c/postgres          +
           |          |           |          |       | postgres=CTc/postgres
 test      | postgres | SQL_ASCII | C        | C     | 
(4 行记录)

(2)在从节点写数据

postgres=# create database test2;
ERROR:  cannot execute CREATE DATABASE in a read-only transaction

可以看见,提示,从节点是个只读数据库。

5. 总结

  • 通过PostgreSQL主从同步部署, 能够有效保障主节点数据的安全, 即便主库归档日志损坏, 也可以通过从节点恢复获取数据,主从部署还可以有效减少主节点的负载压力, 将集中读取的数据通过从节点处理,减少主节点的IO瓶颈和CPU负载, 如果一台从节点不够, 也可以参照以上部署方式,扩展多个从节点, 从而提升整体数据库吞吐性能。
  • 虽然PostgreSQL原生对多主集群模式没有较好的支持,对于复杂的海量数据的业务, 我们可以从架构设计上做改进, 将复杂的业务进行拆分, 设为多个微服务, 搭建多个PostgreSQL主从服务群, 分散负载, 消除瓶颈,从而有效支撑海量数据的业务服务。

标签:wal,postgresql,postgres,一主一,集群,conf,PostgreSQL,节点
From: https://www.cnblogs.com/zreo2home/p/18353386

相关文章

  • OceanBase集群安装
    环境Centos7.6+OB4.2.1角色IP配置备注OBD/OBClient192.168.18.118G+100G中控机+客户端OBServer/OBProxy192.168.18.1662G+30G节点1OBServer/OBProxy192.168.18.1672G+30G节点2OBServer/OBProxy192.168.18.1682G+30G节点31.创建用户(192.168.18.11/......
  • 搭建PostgreSQL高可用集群(基于Patroni+Etcd)
    搭建PostgreSQL高可用集群(基于Patroni+Etcd)1.主机环境准备节点名称主机名网卡IP地址OS安装软件角色作用PGSQL1pgsql1ens33192.168.198.162CentOS7PostgreSQL、ETCD、Patroni主数据库PGSQL2pgsql2ens33192.168.198.163CentOS7PostgreSQL、ETCD、Patr......
  • PostgreSQL15.6源码编译安装
    1.postgres数据库源码下载地址,自己选择对应版本,我这里是15.6https://www.postgresql.org/ftp/source/2.编译cd/data/make/postgresql-15.6./configure--prefix=/pgdata/postgres15make-j$(nproc)#加快编译速度,自动获取对应cpu核心数makeinstall3.创建postgres用户......
  • PostgreSQL 读取表主键和唯一键的SQL
    给定表名,读取对应的约束字段(主键,唯一键)SELECTtc.* FROMinformation_schema.table_constraintstc JOINinformation_schema.constraint_column_usageASccuUSING(constraint_schema,constraint_name) JOINinformation_schema.columnsAScONc.table_schem......
  • 【Kubernetes】k8s集群存储卷(pvc存储卷)
    目录一.pvc存储卷1.PV2.PVC3.StorageClass4.PV和PVC的生命周期二.实战演练1.创建静态pv1.1.配置nfs1.2.创建pv1.3.创建pvc1.4.结合pod,将pv、pvc一起运行2.创建动态pv2.1.上传2.2.创建ServiceAccount,用来管理NFSProvisioner在k8s集群中运行的权限,设置nfs-......
  • 【云原生】Kubernetes中如何对etcd进行备份和还原,确保k8s集群的稳定和健壮
    ✨✨欢迎大家来到景天科技苑✨✨......
  • 关于k8s集群的存储卷
    目录1.emptyDir存储卷2.hostPath存储卷3.nfs共享存储卷容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。其次,在Pod中同时运行多......
  • Docker 部署之 docker-compose 部署 MongoDB 三副本集群(三节点)
    docker-compose部署MongoDB1.生成`keyFile`2.详细的`docker-compose.yml`文件信息3.启动三个容器4.配置集群5.使用配置文件初始化集群本文是通过三台机器部署的三个mongo副本组成的集群,每个节点部署一个mongo服务,数据存储采用绑定nfs进行存储前提......
  • K8S集群中使用JDOS KMS服务对敏感数据安全加密
    基本概念KMS,KeyManagementService,即密钥管理服务,在K8S集群中,以驱动和插件的形式启用对Secret,Configmap进行加密。以保护敏感数据,驱动和插件需要使用者按照需求进行定制和实现自己的KMS插件,插件可以是gRPC服务器或者启用一个云服务商提供的KMS插件。本文中演示使用的KMS服务......
  • 派胜OA ExpressOA 3.0 现已支持 PostgreSQL 16 开源数据库
    ExpressOA3.0跨平台,高性能,现代化的协同办公平台系统。ExpressOA3.0现已支持PostgreSQL16开源数据库-世界上功能最强大的开源数据库。下载派胜OA最新版:www.paioffice.comPostgreSQL是全球最先进的开源数据库,它的全球社区是一个拥有数以千计的用户、贡献者、公司和组织组......