PostgreSQL热备功能实施手册

前端之家收集整理的这篇文章主要介绍了PostgreSQL热备功能实施手册前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

今年以来,公司的产品开始采用postgresql开源数据库,为了使数据库服务具有高可用性,利用postgresql自带的流复制功能,来实现了双机热备,做到无缝隙无人工参与的主备循环N次切换的高可用。下面选取两个具有代表性的实施项目跟大家分享下,如有问题,欢迎交流。

一.部署说明

1.1实施环境

本文档实验环境如下:

PGsql主机:192.168.200.231

PGsql备机:192.168.200.230

PGPool主机:192.168.200.231

PGPool备机:192.168.200.230

PGPVIP:192.168.200.200

软件和系统版本

Pgsql版本:pgsql9.3.2

Pgpool版本:pgpoolII3.3.2

Linux版本:CenterOS5.8

1.2文档说明

在CA服务中默认情况下数据库pgsql采用的单机环境,本文档详细说明了在单机环境下进行双机扩展,使pgsql数据库具备双机热备流复制功能


二.实施目的

在图一所示的网络拓扑图上,主机Master和备机Slave运行pgsql,主机处于读写状态,备机处于只读状态,备机数据和主机保持数据同步状态。当主机down了,pgpoll自动把备机切换为主机,等主机恢复后,手动执行脚本切换为备机(注:这一步无需重做数据,否则后期数据量会比较大;与此同时,在将down掉的原主机执行脚本切为当前主机的备机时,有可能跟当前主机的数据量相差数百M或G的数据)。

(图一:利用pgpool实现pgsql热备的拓扑图)

上面PGPool也分主备状态,通过VIP方式提供对外pgsql的访问,当主机down了,VIP就漂移到备机上,继续提供pgsql的访问,对外的IP地址等都没有改变。


附:down机的情况包括有:断电、断网、kill 数据库进程以及重启等;

三.配置步骤

在配置pgsql之前,首先要设置两台服务器使得postgres用户可以无密码相互访问,配置过程见附一。

1.pgsql设置

1.1配置文件

切换到主机下,数据库的配置主要涉及到pg_hba.conf,postgresql.conf两个配置文件配置文件都已经配置过,现场实施人员对照着在检查一遍同时将涉及到的IP地址修改为现场的ip,进入/opt/bjca3/pgsql/data目录下:
#vipg_hba.conf

#TYPEDATABASEUSERADDRESSMETHOD
localallalltrust
hostallall127.0.0.1/32trust
hostallall192.168.200.0/24trust

#localreplicationpostgrestrust
#hostreplicationpostgres::1/128trust

hostreplicationpostgres1trust
(为双方所在网络的网段)

#vipostgresql.conf
listen_addresses='*'

port=5432

(postgresql服务的端口,建议采用默认值5432)

max_connections=100

shared_buffers=1280MB

wal_level=hot_standby

fsync=on

full_page_writes=on

checkpoint_segments=32
archive_mode=on

archive_command='cp%p/opt/bjca3/pgsql/archive/%f'
max_wal_senders=2

wal_keep_segments=250

hot_standby=on
max_standby_archive_delay=300s

max_standby_streaming_delay=300s

wal_receiver_status_interval=10s

hot_standby_Feedback=on

log_line_prefix='[%t]'

启动主机postgresql:/opt/bjca3/pgsql/bin/pgsqlstart

说明:

关闭pgsql的命令/opt/bjca3/pgsql/bin/pgsqlstop

强行关闭的命令/opt/bjca3/pgsql/bin/pgsqlstop-mfast

1.2环境配置

在主机和备机中,分别进入/opt/bjca3/pgsql/目录下,根据现场实际环境对配置文件envvars参数值进行修改,具体如下:

(配置文件涉及到产品参数,此处省略配置)

其中:

PGHOME:pgsql的安装路径

POOLHOME:pgpool的安装路径

REMOTE_IP:对方服务器的ip

LOCAL_IP:本机的ip

VIRTUAL_IP:虚拟ip

Log:log日志的路径

主机和备机的配置文件envvars设置完成后,切换到备机在确保主机pgsql开启的状态下执行流复制脚本/opt/bjca3/pgsql/bin/basebackup-stream.sh,脚本成功执行时在data目录下会产生logfile文件进行查看。

2.pgpool设置

启动pgpool前,核实下配置文件/opt/bjca3/pgpool/etc/pgpool.conf中的如下几个关键项,该配置取自主机192.168.200.231(备机为192.168.200.230)。

listen_addresses='*'

port=9999

(pgpool的服务端口,默认值9999)

backend_hostname0='192.168.200.231'

192.168.200.231为本机的ip)

backend_port0=5432

backend_weight0=1

backend_data_directory0='/opt/bjca3/pgsql/data'

backend_flag0='ALLOW_TO_FAILOVER'

(如果是备机的话,该值为DISALLOW_TO_FAILOVER)

health_check_period=1

failover_command='/opt/bjca3/pgsql/bin/failover.sh'

use_watchdog=on

wd_hostname='192.168.200.231为本机的ip)

wd_port=9000

delegate_IP='192.168.200.200'

if_up_cmd='ifconfigeth0:0inet$_IP_$netmask255.255.255.0'

(以上两项是虚拟ip及掩码设置)

wd_escalation_command='/opt/bjca3/pgsql/bin/mast.sh'

wd_interval=10

heartbeat_destination0='192.168.200.230other_pgpool_hostname0='192.168.(以上两项是对方的ip)

other_pgpool_port0=9999

other_wd_port0=9000

heartbeat_device0='eth0'

2.1启动

先启动主节点后启动备机节点(注意启动顺序):/opt/bjca3/pgpool/bin/pgpool

主节点上利用ifconfig命令会发现多了虚拟ip(192.168.200.200)的信息,至此,主备机上的pgsql和pgpool全部启动。

说明:

1.pgpool的关闭方法/opt/bjca3/pgpool/bin/pgpool-mfaststop

2.为了在关闭pgpool的过程中不发生主备切换,可以先关闭备机的pgpool之后在关闭主机的pgpool,关闭备机pgsql,最后关闭主机pgsql

2.2主备切换

经过以上几步的配置,主备之间能够同步数据了,但为了在主备之间建立一次同步状态,需要关闭主节点的pgsql做一次主备切换。具体步骤如下:

1.切换到主节点关闭pgsql:/opt/bjca3/pgsql/bin/pgsqlstop-mfast.

说明:当主节点的pgsqldown掉后,主节点上的pgpool能够检测到这一事件,之后会重启本机,同时备机上的pgpool检测到后会将备机提升为主。这一切换过程大约需要一分半时间(切换时间取决于关机的时间),检测备机是否切换成功的方法:切换到原备机上执行ifconfig查看是否有虚拟ip出现。

2.待本机(原先的主机)重启后,执行/opt/bjca3/pgsql/bin/hot_standby.sh脚本;

说明:该脚本会将原先down掉的主机成为当前主机的备机并与之同步数据,脚本成功执行时会同时启动pgsql和pgpoo。

至此,整个热备过程建立。

四.XXXXXX

产品部分,此处省略若干字。

五.Pgpool-II自动切换

这一部分的内容是在实际的生产运维环境中,如果主节点down掉了并已经修复需要恢复为当前主机的备机时需要做的操作。

1.切换到当前的备机(原先的主机)执行/opt/bjca3/pgsql/bin/hot_standby.sh脚本即可。该脚本会将原先down掉的主机成为当前主机的备机并与之同步数据,脚本可能需要花费数分钟的时间;

2.脚本运行完毕后即可



上面的项目是一个比较典型的Postgresql热备部署,下面在跟大家分享另一个比较典型的案例:


(Postgresql一主两从架构图)

关于这个项目的具体细节详见:http://download.csdn.net/detail/sszgg2006/8276445

猜你在找的Postgre SQL相关文章