BgWriter 后台写进程
WalWriter 预写式日志进程
Checkpointer 检查点进程
AutoVacuum 自动清理进程
* 执行delete操作时,旧的数据并不会立即被删除,在更新数据时,也不会在旧的数据上做更新,而是新生成一行数据。旧的数据只是被标识为删除状态,在没有并发的其他事务读到这些旧数据时,它们才会被清除掉
PgArch 归档进程
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
#创建复制的用户并授权
[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
[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是流行的PostgreSQL对象关系数据库的空间数据库扩展。PostGIS“在空间上的”PostgreSQL服务器,允许它作为地理信息系统(GIS)和网络地图应用程序的后端空间数据库,与Microsoft的SQL server spatial和Oracle的spatial数据库扩展相同。
PostGIS是一个开源项目,PostGIS源代码根据GNU通用公共许可证(GPL)发布。
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=#
通过客户端链接测试是否可以链接