postgresql高可用及postgis安装

2023-11-07

postgresql 高可用

进程

在这里插入图片描述 - Postmaster 主进程

  • 它是整个数据库实例的主控制进程,负责启动和关闭该数据库实例
  • 实际上,使用pg ctl来启动数据库时,pg_ctl也是通过运行postgres来启动数据库的,只是它做了一些包装,更容易启动数据库
  • 它是第一个PostgreSQL进程,此主进程还会fork出其他子进程,并管理它们

BgWriter 后台写进程

  • 为了提高插入、删除和更新数据的性能,当往数据库中插入或者更新数据时,并不会马上把数据持久化到数据文件中,而是先写入Buffer中

WalWriter 预写式日志进程

  • 预写式日志是在修改数据之前,必须把这些修改操作记录到磁盘中,这样后面更新实际数据时,就不需要实时的把数据持久化到文件中了。即使机器突然宕机或者数据库异常退出, 导致一部分内存中的脏数据没有及时的刷新到文件中,在数据库重启后,通过读取WAL日志,并把最后一部分WAL日志重新执行一遍,就能恢复到宕机时的状态了
  • WAL日志保存在pg_wal目录(早期版本为pg_xlog) 下。每个xlog 文件默认是16MB,为了满足恢复要求,在pg_wal目录下会产生多个WAL日志,这样就可保证在宕机后,未持久化的数据都可以通过WAL日志来恢复,那些不需要的WAL日志将会被自动覆盖

Checkpointer 检查点进程

  • 检查点(Checkpoints)是事务序列中的点,保证在该点之前的所有日志信息都更新到数据文件中。在检查点时,所有脏数据页都冲刷到磁盘并且向日志文件中写入一条特殊的检查点记录。在发生崩溃的时候,恢复器就知道应该从日志中的哪个点(称做 redo 记录)开始做 REDO 操作,因为在该记录前的对数据文件的任何修改都已经在磁盘上了。在完成检查点处理之后,任何在redo记录之前写的日志段都不再需要,因此可以循环使用或者删除。在进行 WAL 归档的时候,这些日志在循环利用或者删除之前应该必须先归档保存
  • 检查点进程 (CKPT) 在特定时间自动执行一个检查点,通过向数据库写入进程 (BgWriter) 传递消息来启动检查点请求

AutoVacuum 自动清理进程
* 执行delete操作时,旧的数据并不会立即被删除,在更新数据时,也不会在旧的数据上做更新,而是新生成一行数据。旧的数据只是被标识为删除状态,在没有并发的其他事务读到这些旧数据时,它们才会被清除掉

PgArch 归档进程

  • 默认没有此进程,开启归档功能后才会启动archiver进程WAL日志文件会被循环使用,也就是说WAL日志会被覆盖,利用PgArch进程会在覆盖前把WAL日志备份出来,类似于binlog,可用于备份功能
  • PostgreSQL 从8.X版本开始提供了PITR ( Point-In-Time-Recovery)技术,即就是在对数据厍进行过一次全量备份后,该技术将备份时间点后面的WAL日志通过归档进行备份,将来可以使用数据库的全量备份再加上后面产生的WAL 日志,即可把数据库向前恢复到全量备份后的任意一个时间点的状态

startup 启动进程

  • 用于数据库恢复的进程

流式复制

流复制 streaming replication 是实现PostgreSQL的高可用的常见技术.PostgreSQL流复制相当于MySQL的主从复制,可以实现数据同步和数据备份
PostgreSQL通过 WAL 日志来传送的方式有两种:基于文件的日志传送和流复制。不同于基于文件的日志传送,流复制的关键在于“流”,所谓流就是没有界限的一串数据,类似于河里的水流,是连成一片的。
流复制出现是从2010年推出的PostgreSQL9.0开始的

流复制原理

备库不断的从主库同步相应的数据,并在备库apply每个WAL record,这里的流复制每次传输单位是WAL日志的record

在这里插入图片描述

流复制实现

环境准备

192.168.144.60 Master 
192.168.144.40 slave
master 节点配置
#创建复制的用户并授权
[postgres@master ~]$ psql
postgres=#create role repluser with replication login password 'qazxsw';
#修改pg_hba.conf进行授权
[postgres@master ~]$vim /usr/local/pgsql/data/pg_hba.conf
host replication repluser 0.0.0.0/0 md5
#修改配置(可选):
[postgres@master ~]$vim /usr/local/pgsql/data/postgresql.conf
	synchronous_standby_names = '*' #开启此项,表示同步方式,需要同时打开synchronous_commit = on,此为默认值,默认是异步方式
	synchronous_commit = on #开启同步模式
	archive_mode = on #建议打开归档模式,防止长时间无法同步,WAL被覆盖造成数据丢失
	archive_command = '[ ! -f /archive/%f ] && cp %p /archive/%f'
	wa1_level = replica #设置wal的级别
	max_wal_senders = 5 #这个设置可以最多有几个流复制连接,一般有几个从节点就设置几个
	wal_keep_segments = 128 #设置流复制保留的最多的WAL文件数目
	wal_sender_timeout = 60s #设置流复制主机发送数据的超时时间
	max_connections = 200 # 一般查多于写的应用从库的最大连接数要比较大
	hot_standby = on #对主库无影响,用于将来可能会成为从库,这台机器不仅仅是用于数据归档,也用于数
	据查询,在从库上配置此项后为只读
	max_standby_streaming_delay = 30s #数据流备份的最大延迟时间
	wal_receiver_status_interval = 10s #多久向主报告一次从的状态,当然从每次数据复制都会向主报
	告状态,只是设置最长的间隔时间
	hot_standby_feedback = on #如果有错误的数据复制,是否向主进行反馈
	wal_log_hints = on #对非关键更新进行整页写入
[postgres@master ~]$pg_ctl restart -D $PG_DATA
slave 节点配置
[postgres@slave ~]$ pg_ctl stop -D $PGDATA
//删除从节点数据目录
[postgres@slave ~]$ rm -rf /usr/local/pgsql/data/*
//备份主库数据到备库
[postgres@slave ~]$ pg_basebackup -D /usr/local/pgsql/ -Ft -Pv -Urepluser -h 192.168.144.60 -p 5432 -R
//还原备份的数据,实现初始的主从数据同步
[postgres@slave ~]$ tar xf /usr/local/pgsql/base.tar -C /usr/local/pgsql/data/
//修改postgresql.conf文件
[postgres@slave ~]$ vi /usr/local/pgsql/data/postgresql.conf
#添加下面代码
primary_conninfo = 'host=192.168.144.60 port=5432 user=repluser password=qazxsw'
// 启动从节点
[postgres@slave ~]$ pg_ctl -D /usr/local/pgsql/data start
查看同步状态
[postgres@localhost ~]$ pg_controldata

在这里插入图片描述
在这里插入图片描述

在主库查看状态
postgres=# select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;
  pid  |   state   |  client_addr   | sync_priority | sync_state 
-------+-----------+----------------+---------------+------------
 52560 | streaming | 192.168.144.40 |             0 | async
(1 row)
#服务器查看数据库是否为备库,f表主库 t表示为备库
postgres=# select * from pg_is_in_recovery();

-[ RECORD 1 ]-----+--
pg_is_in_recovery | f

查看流复制进程

[postgres@localhost ~]$ ps aux |grep walsender
postgres  52560  0.0  0.1 273576  2352 ?        Ss   14:02   0:00 postgres: walsender repluser 192.168.144.40(40306) streaming 0/3000E40
postgres  52680  0.0  0.0 112824   988 pts/1    R+   14:09   0:00 grep --color=auto walsender

postgis

PostGIS是流行的PostgreSQL对象关系数据库的空间数据库扩展。PostGIS“在空间上的”PostgreSQL服务器,允许它作为地理信息系统(GIS)和网络地图应用程序的后端空间数据库,与Microsoft的SQL server spatial和Oracle的spatial数据库扩展相同。
PostGIS是一个开源项目,PostGIS源代码根据GNU通用公共许可证(GPL)发布。

docker安装postgis

postgis安装。需要一堆的插件,且这些插件有版本依赖,在安装编译时很不方便,所以在这里推荐使用docker 进行安装。避免了繁杂的依赖编译过程。
如果需要用源码安装的可以到管网下载对应的插件进行手动编译安装,这里不做过多演示

插件下载地址:https://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS
我们这里可以去postgis官方指定的docker hub仓库下载docker镜像进行安装
仓库地址:https://registry.hub.docker.com/r/postgis/postgis
下载需要的版本:
我这里下载postgersql-14对应的版本
在这里插入图片描述
在这里插入图片描述
服务器拉取镜像

在这里插入图片描述

[root@localhost ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
docker.io/postgis/postgis   latest              c05523e87855        4 days ago          589 MB
//启动容器
[root@localhost ~]# docker run --name postgis -p 5432:5432 -e POSTGRES_PASSWORD=qazxsw -d docker.io/postgis/postgis
972093e32e9b2c35dd39c7fb13e36e7227a9327a074a3572ba8e0dc9f3d4ee18
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                    NAMES
972093e32e9b        docker.io/postgis/postgis   "docker-entrypoint..."   34 seconds ago      Up 32 seconds       0.0.0.0:5432->5432/tcp   postgis
//进入sql命令行
[root@localhost _data]# docker exec -ti 972093e32e9b psql -U postgres
psql (15.1 (Debian 15.1-1.pgdg110+1))
Type "help" for help.
postgres=# 

通过客户端链接测试是否可以链接

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

postgresql高可用及postgis安装 的相关文章

随机推荐

  • libmad 解码mp3并且播放测试

    测试环境 window64 codeblock mingw64 下载libmad源码后发现自带的minimad c是用了linux的API 所以修改了下 将 F d mp3音乐文件解码后将pcm数据写入F d pcm 并且用ffplay播放
  • 阿里 前端 规范_阿里前端开发规范

    前端代码规范 Front Standard Guide 前端 JS 项目开发规范 规范的目的是为了编写高质量的代码 让你的团队成员每天得心情都是愉悦的 大家在一起是快乐的 引自 阿里规约 的开头片段 现代软件架构的复杂性需要协同开发完成 如
  • 【Liunx常用操作】利用iso镜像制作并使用本地yum源(CentOS7.6为例)

    提示 为保证文章的正确性和实用性 文章内容可能会不定时优化改进 若您有建议或者文章存在错误请私信留言或评论指正 下面以CentOS7 6操作系统为例 介绍具体的操作步骤 如果本文对你有帮助 记得关注加收藏 1 文章前言 在私网环境中部署的L
  • 【多线程中的线程安全问题】线程互斥

    1 线程间的互斥相关背景概念 先来看看一些基本概念 1 临界资源 多线程执行流共享的资源就叫做临界资源 2 临界区 每个线程内部 访问临界资源的代码 就叫做临界区 3 互斥 任何时刻 互斥保证有且只有一个执行流进入临界区 访问临界资源 通常
  • uni-app 打包之后日志输出和调试

    背景 真机调试时console log可以在控制台输出 但是 打包上线后 我们想查看apk的运行情况和调试日志 竟然官网没有方式 只有android app记录运行日志 通过abd指令 这是最无语的事 我还得学abd指令 逗我呢 反正收集用
  • 【木头Cocos2d-x 032】我是定时器(第01章)—我爱单线程之schedule介绍

    我是定时器第01章 我爱单线程之schedule介绍 本来今天我应该要做其它事情的 但是和一位网友提起了schedule 我无法按捺心中对写教程的热血和冲动 所以我就决定要写关于schedule的使用心得了 小若 我噗 永远都是那么唠叨 笨
  • Golang(Go语言)中Protobuf的使用

    什么是protobuf protobuf也叫protocol buffer是google 的一种数据交换的格式 它独立于语言 独立于平台 google 提供了多种语言的实现 java c c go 和 python 每一种实现都包含了相应语
  • CSS属性选择器的高级用法(内含一道编程测试题)

    目录 0 简述属性选择器 1 href url 设置页面上所有包含href属性并且属性值为https www baidu com的a元素 2 class 设置页面上所有含有class属性并且属性值的词列表的某个词等于baidu的div元素
  • 社科院和英国斯特灵大学在职博士,选择真的很重要

    现代社会飞速发展 稍不留神就会被落下 读博可以接触到更多的社会经验 学习心得 交流探讨 掌握最新的行业发展动态 对自己未来的发展有更清楚的规划 中国社科院和英国斯特灵大学可以作为自己的一个新的起点 给自己一个新的前方 很多的职场人员未来追求
  • 合并两棵二叉树

    还是使用 的递归写法套路情况 八股文 类似于归并排序的一样的情况 package Tree public class megertwotree 树中常见的递归套路题目 八股文写法 先处理根节点 然后就是左边 右边 根的左孩子节点 递归调用函
  • 学习Linux的第八天

    安装软件 rpm 安装工具 处理 rpm 格式的软件包 主版本号 子版本号 修订版本号 编译版本号 本地获取 一 第一种安装方式 1 mount dev sr0 mnt 挂载命令 光盘设备 挂载点目录 临时生效 仅在主机运行状态下生效 什么
  • node.js创建第一个应用

    node js创建第一个应用 1 引入require模块 我们是用require指令来载入http模块 并将实例化的http赋值给变量http 实例如下 var http require http 2 创建服务器 http createSe
  • 数据库表字段设置为自增时,使用实体类插入或者更新数据时报错解决(hibernate框架)

    问题 数据库表字段存在自增列 使用实体类新增或者更新数据时 会报错 hibernate框架 报错如下 2021 05 06 15 12 04 WARN org hibernate engine jdbc spi SqlExceptionHe
  • 尺取法 — 详解 + 例题模板(全)

    尺取法 顾名思义 像尺子一样取一段 借用挑战书上面的话说 尺取法通常是对数组保存一对下标 即所选取的区间的左右端点 然后根据实际情况不断地推进区间左右端点以得出答案 尺取法比直接暴力枚举区间效率高很多 尤其是数据量大的时候 所以说尺取法是一
  • 【图像处理】PIL与OpenCV的读取、显示、保存图片/ numpy与Image的转换

    文章目录 PIL 读取 显示 保存图片 OpenCV 读取 显示 保存图片 采用 matplotlib 显示以 OpenCV 读取的图片 numpy 和 Image 的相互转换 Image 转换成 numpy numpy 转换成 Image
  • 【LVGL 学习】样式(style)属性学习

    属性 尺寸和位置 要理解尺寸和位置是如何起作用的 首先要理解 LVGL 的盒子模型 官方文档给出了一张图 可以很好地描述一个控件的框架结构 在设置尺寸的时候 长和宽指的是包括边框 border 厚度的长宽 也就是不包括轮廓 outline
  • 【LeetCode-中等题】39. 组合总和

    文章目录 题目 方法一 递归 回溯 题目 这题的nums数组里面不存在重复元素 所以也就无需做去重操作 但同一个元素可以被无限次取 说明每次递归中的for循环的开始位置就是自己 nums数组里面存在重复元素 去重版本 方法一 递归 回溯 参
  • 全面介绍插入排序

    何谓 插入排序 其概念如是说 每次将一个待排序的记录 按其关键字大小插入到前面已经排序好的序列中 直到全部记录插入完成为止 概念的东西总是有些抽象 也可称其为基本思想 上述插入排序的概念同样也可说是插入排序的基本思想 抽象的东西理解起来总是
  • 【翻译】 如何应对内核警告?

    LWN net需要你 没有订阅者 LWN就根本不存在 请考虑注册订阅 帮助LWN继续出版 作者 Jonathan Corbet 2021年11月18日 内核在内部提供了许多宏 允许代码在出错时产生警告 然而 它并没有提供很多关于警告发出时应
  • postgresql高可用及postgis安装

    postgresql高可用及postgis安装 postgresql 高可用 进程 流式复制 流复制原理 流复制实现 master 节点配置 slave 节点配置 查看同步状态 在主库查看状态 postgis docker安装postgis