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目录下: #TYPEDATABASEUSERADDRESSMETHOD #localreplicationpostgrestrust hostreplicationpostgres1trust
#vipostgresql.conf port=5432 (postgresql服务的端口,建议采用默认值5432) max_connections=100 shared_buffers=1280MB wal_level=hot_standby fsync=on full_page_writes=on checkpoint_segments=32 archive_command='cp%p/opt/bjca3/pgsql/archive/%f' wal_keep_segments=250 hot_standby=on 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |