扫码阅读
手机扫码阅读

PostgreSQL双机热备篇

416 2023-09-06

PostgreSql双机热备,数据库部署零基础的福音从这里开始

1.前言

长久以来数据在企业发展中都起着至关重要的作用,在网络科技高度发达的今天,系统业务复杂度与日俱增,数据量也成几何式增长,那么数据灾备方案显得越来越重要,PostgreSql主从复制是一种高可用解决方案,可以实现读写分离,实时备份,PostgreSql主从复制是基于xlog来实现的,主库开启日志功能,从库根据主库xlog来完成数据的同步。本篇就和大家一起分享一下PostgreSql双机热备的部署全过程。

开始之前大家请记先住主从复制需要注意的几个地方:

  1. 启动从库之前,不能执行初始化,若已经初始化了需要删掉对应的data文件。

  2. 启动从库之前,需要通过base_backup从主服务器上同步配置与数据。

  3. 启动从库之前,需要对同步之后的配置文件进行修改。

  4. 启动从库之前,需要设置一个恢复的配置文件。

  5. 从库只能读,不能写。

2.postgreSql编译安装

2.1 去官网选择一个合适的版本下载源码包:

https://www.postgresql.org/ftp/source/

2.2 我们在/usr/local/下创建一个pgsql目录 并将源码包上传到这个目录下面:

cd /usr/local/

mkdir pgsql

rz

tar -zxvf postgresql-10.16.tar.gz

2.3 解压完成后进入进入源码解压后的目录,然后进行检查安装环境,当初出现"GNUmakefile"时表示成功了,若期间出现报错可能是有些插件没有安装导致的,安装对对应插件即可。

cd postgresql-10.16/

./configure --prefix=/usr/local/pgsql(检查安装环境,后面是安装路径)

我在检查后出现过报错,通过安装以下工具处理的,你要是没有报错请忽略(安装:yum install gcc,yum -y install -y readline-devel,yum install zlib-devel)

2.4 执行make命令编译源码

make(当出以下一段话时表示编译成功)

2.4 安装

make install (当出现下面这段话时表示安装完成)

2.5 创建一个普通用户,因为默认超级用户(root)不能启动postgresql,所以需要创建一个普通用户来启动数据库

groupadd postgres

useradd -g postgres postgres

passwd postgres

在/usr/local/pgsql下创建数据目录data:

mkdir -p data

赋予postgres用户整个pgsql目录的权限

chown -R postgres:postgres /usr/local/pgsql

2.6 以postgres用户来初始化pgsql数据库(后面相关操作都用postgres 用户)

su -  postgres

/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data start (第一个路径是pgsql的初始化指令initdb的路径 第二个路劲是我们创建data目录用于存放pgsql的相关配置和数据)

当出现一下这段话时表示初始化成功,并可根据最后一句命名启动数据库

2.7 修改配置文件实现账号远程连接

vi /usr/local/pgsql/data/postgres.conf(配置数据库监听的ip * 表示所有 ,开启端口5432,若端口被占用修改成其他的即可)

vi /usr/local/pgsql/data/pg_hba.conf(在ipv4 里新增一条配置进行客户端认证)

上面两配置文件修改好了之后执行下面的命令就可以启动pgsql了,出现server started时表时启动成功

/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data start

接下来我们还需要一个创建一个账号用于远程登陆

su - postgres (切换到我们创建的postgres用户,已postgres身份进行后续的数据库操作)

psql(执行该命令 进入数据库)

alter user postgres with password ‘postgres’;(修改数据库用户postgres的密码,改好了之后就可以用navicat进行登陆了)

=============================================

至此pgsql的安装已经完成了,主库按照以上步骤完成安装启动,从库只需执行到步骤2.5即可,从库后续步骤依赖主库的配置=============================================

3.配置主从关系(主机:10.0.23.199  备机:10.0.42.38)

3.1 修改主库配置文件/user/local/pgsql/data/postgresql.conf ,添加以下参数,修改完后重启数据库

su - postgres

vi postgresql.conf

listen_addresses="*"

wal_level=hot_standby  #wal归档复制级别为hot_standby异步流复制

max_wal_senders=2  #主库可以最多有多少个并发的standby数据库

wal_keep_segments=64  #指定pg_xlog目录保存的wal log的最小数量。每个文件一般是       16M。

max_connections=500

/usr/local/pgsql/bin/pg_ctl -D -D /usr/local/pgsql/data restart

3.2 重启好了之后我们需要在主库创建一个用户做主从复制

su - postgres

psql(执行该命令 进入数据库)

create role data_backup login replication encrypted password '123456';

用户创建好了之后修改主库配置文件/use/local/pgsql/pg_hba.conf添加一条从库的ip,user使用我们刚创建的data_backup,修改完后重启主库

vi pg_hba.conf

/usr/local/pgsql/bin/pg_ctl -D -D /usr/local/pgsql/data restart

========至此主库的相关配置已经完成,下面开始配置从库========

3.3 修改主库配置文件postgresql.conf添加一下参数,修改完后重启数据库

前面注意事项里面提到,不能初始化从库,因为我们需要首先从主库备份数据,备份之后,从库的data里面的数据和配置信息就和主库一致了

切换到postgres用户,进行数据备份和启动操作

通过base_backup命令将主库的数据备份到从库

/usr/local/pgsql/bin/pg_basebackup -h 10.0.23.199 -p 5432 -U  data_backup -F p -P -D /usr/local/pgsql/data

(注:pg_basebackup命令路径 -h 主机ip -p 主库端口 -U 主库用户名 -F p -P -D 从库data路径)

3.4 postgresql.conf是从主库同步过来的,这里需要修改一些配置,改为从库的配置

vi /usr/local/pgsql/data/postgresql.conf

#wal_level=hot_standby #从库不需要这个配置 下面两个参数也注释掉

#max_wal_senders=2

#wal_keep_segments=64

hot_standby=on #开启hot_standby模式

max_standby_streaming_delay=30s #可选,流复制最大延迟

wal_receiver_status_interval=10s #可选,向主库报告状态的最大间隔时间

hot_standby_feedback=on #可选,查询冲突时向主库反馈

max_connections=1000 #最大连接数一般大于主库就行

3.5 创建恢复配置recovery.conf文件

这个文件在安装postgresql时,会生到/usr/local/pgsql/share/postgresql目录下,名字是recovery.conf.sample。我们复制并修改名称recovery.conf并放置在/usr/local/pgsql/data目录下,并修改添加其配置:recovery_target_timeline = 'latest'  #从主库恢复最新的数据

standby_mode = on  #开启备库

primary_conninfo = 'host=10.0.23.199 port=5432 user=data_backup password=123456' #连接主库

3.6 启动从库

/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data start

========至此主库和从库的相关配置已经完,下面进行验证========

4.主从复制验证

ps -ef | grep 'postgres'

主机会增加一个wal sender进程 并连接着备机的ip

备机会增加一个wal receiver进程

最后在主库中验证对数据进行增删改操作时,看从库中的数据是否已同步过来,若有问题则需要重新重点检测一下主库和从库的postgresql.conf  pg_hba.conf  recovery.conf  这几个配置文件是否配置有问题,至此PostgreSql双机热备全部完成

原文链接: http://mp.weixin.qq.com/s?__biz=Mzg5MzUyOTgwMQ==&mid=2247486972&idx=1&sn=b95c823c44196398ce89a10cc2dd9dd0&chksm=c02c365af75bbf4cff1ab42d0990d94128ef7c35c029d20bbd5446661645df997fc15a8c24fc#rd