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

PGP VIP:  192.168.200.200

 

软件和系统版本

Pgsql 版本: pgsql 9.3.2

Pgpool 版本: pgpool II 3.3.2

Linux 版本: CenterOS 5.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目录下:
#vi pg_hba.conf 

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     trust
host    all             all             127.0.0.1/32            trust
host    all             all             192.168.200.0/24        trust

#local   replication     postgres                               trust
#host    replication     postgres        ::1/128                trust

host     replication     postgres        192.168.200.0/24       trust
(192.168.200.0/24 为双方所在网络的网段)

 

#vi postgresql.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/pgsql  start

 

说明:

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

强行关闭的命令   /opt/bjca3/pgsql/bin/pgsql  stop  -m  fast

 

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'

(192.168.200.231为本机的ip)

wd_port = 9000

delegate_IP = '192.168.200.200'

if_up_cmd = 'ifconfig eth0:0 inet $_IP_$ netmask 255.255.255.0'

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

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

wd_interval = 10

heartbeat_destination0 = '192.168.200.230'

other_pgpool_hostname0 = '192.168.200.230'

(以上两项是对方的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 -m fast stop

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

 

2.2 主备切换

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

1.切换到主节点,关闭pgsql:/opt/bjca3/pgsql/bin/pgsql  stop -m fast.

说明:当主节点的pgsql down掉后,主节点上的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


最后跟大家分享一位网友对集群的实现:http://blog.csdn.net/lengzijian/article/details/7704814

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值